


Membawa anda langkah demi langkah untuk melaksanakan dadu 3D menggunakan CSS Flex dan susun atur Grid (dengan kod)
Sep 23, 2022 am 09:58 AMDalam temu bual bahagian hadapan, kami sering ditanya cara menggunakan CSS untuk melaksanakan susun atur dadu/mahjong. Artikel berikut akan memperkenalkan anda kepada kaedah menggunakan CSS untuk mencipta dadu 3D (lentur dan susun atur Grid untuk melaksanakan dadu 3D, saya harap ia akan membantu anda!
Melalui artikel ini anda boleh belajar:
- Gunakan transformasi untuk mencapai bentuk 3D; ;
- Gunakan reka letak Flex untuk melaksanakan reka letak dadu; [Pembelajaran yang disyorkan: tutorial video css
- ]
- 1 Gunakan reka letak Flex untuk melaksanakan enam sisi Pertama, tentukan struktur HTML bagi enam sisi. dadu:
<div class="dice-box"> <div class="dice first-face"> <span class="dot"></span> </div> <div class="dice second-face"> <span class="dot"></span> <span class="dot"></span> </div> <div class="dice third-face"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div> <div class="dice fourth-face"> <div class="column"> <span class="dot"></span> <span class="dot"></span> </div> <div class="column"> <span class="dot"></span> <span class="dot"></span> </div> </div> <div class="fifth-face dice"> <div class="column"> <span class="dot"></span> <span class="dot"></span> </div> <div class="column"> <span class="dot"></span> </div> <div class="column"> <span class="dot"></span> <span class="dot"></span> </div> </div> <div class="dice sixth-face"> <div class="column"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div> <div class="column"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div> </div> </div>Kesannya adalah seperti berikut:
.dice { width: 200px; height: 200px; padding: 20px; background-color: tomato; border-radius: 10%; } .dot { display: inline-block; width: 50px; height: 50px; border-radius: 50%; background-color: white; }(1) Satu titik
Struktur HTML adalah seperti berikut:
<div class="dice first-face"> <span class="dot"></span> </div>justify-content:center: Jajarkan titik dengan pusat paksi utama (mendatar). align-item:center: Menjajarkan titik dengan pusat paksi silang (menegak).
- Kod tersebut dilaksanakan seperti berikut:
.first-face { display: flex; justify-content: center; align-items: center; }(2 ) Dua Klik
Struktur HTML adalah seperti berikut:
<div class="dice second-face"> <span class="dot"></span> <span class="dot"></span> </div>Kedudukan titik semasa adalah seperti berikut:
.second-face { display: flex; justify-content : space-between; }Pada masa ini, titik pertama berada di kedudukan yang betul: sudut kiri atas. Dan titik kedua perlu berada di sudut kanan bawah. Oleh itu, mari kita gunakan atribut align-self untuk melaraskan kedudukan titik kedua secara individu:
align-self: flex-end: Jajarkan item ke hujung bekas Flex.
.second-face .dot:nth-of-type(2) { align-self: flex-end; }(3) Tiga mata
Struktur HTML adalah seperti berikut:
<div class="dice third-face"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div>align-self: flex-end: Jajarkan item ke hujung bekas Flex. align-self: center: Jajarkan item ke tengah bekas Flex.
- Kini bahagian ketiga kelihatan seperti ini:
.third-face { display: flex; justify-content : space-between; } .third-face .dot:nth-of-type(2) { align-self: center; } .third-face .dot:nth-of-type(3) { align-self: flex-end; }Jika anda mahu titik pertama berada di sudut kanan atas, titik ketiga Di sudut kiri bawah, anda boleh menukar align-self titik pertama kepada flex-end, titik kedua kekal tidak berubah, dan titik ketiga tidak perlu ditetapkan Lalai adalah di hujung kiri:
.third-face { display: flex; justify-content : space-between; } .third-face .dot:nth-of-type(1) { align-self :flex-end; } .third-face .dot:nth-of-type(2) { align-self :center; }(4) Empat mata
Struktur HTML adalah seperti berikut:
<div class="dice fourth-face"> <div class="column"> <span class="dot"></span> <span class="dot"></span> </div> <div class="column"> <span class="dot"></span> <span class="dot"></span> </div> </div>Seterusnya, anda perlu susun atur dua titik lajur masing-masing:
.fourth-face { display: flex; justify-content: space-between }Tetapkan lajur kepada reka letak lentur Tetapkan arah lentur kepada lajur, Untuk meletakkan mata secara menegak
- tetapkan justify-content ke ruang-antara, ia akan menjadikan titik pertama di bahagian atas dan titik kedua di bahagian bawah.
- Kini bahagian keempat kelihatan seperti ini:
.fourth-face .column { display: flex; flex-direction: column; justify-content: space-between; }(5) Lima mata
Struktur HTML ialah seperti berikut :
<div class="fifth-face dice"> <div class="column"> <span class="dot"></span> <span class="dot"></span> </div> <div class="column"> <span class="dot"></span> </div> <div class="column"> <span class="dot"></span> <span class="dot"></span> </div> </div>Kini bahagian kelima kelihatan seperti ini:
.fifth-face { display: flex; justify-content: space-between } .fifth-face .column { display: flex; flex-direction: column; justify-content: space-between; }?. >
Juga Jika anda perlu melaraskan titik tengah, anda boleh menetapkan justify-content ke tengah untuk memusatkannya secara menegak:
Sekarang bahagian kelima kelihatan seperti ini:
.fifth-face .column:nth-of-type(2) { justify-content: center; }
(6) Enam mata
Struktur HTML adalah seperti berikut:
Susun atur sisi keenam hampir sama dengan sisi keempat satu, kecuali setiap lajur mempunyai satu lagi elemen Reka letak dilaksanakan seperti berikut:
Sisi keenam kini kelihatan seperti ini:<div class="dice sixth-face"> <div class="column"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div> <div class="column"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div> </div>
2. 使用 Grid 布局實現(xiàn)六個面
骰子每個面其實可以想象成一個 3 x 3 的網(wǎng)格,其中每個單元格代表一個點的位置:
+---+---+---+
| a | b | c |
+---+---+---+
| d | e | f |
+---+---+---+
| g | h | i |
+---+---+---+
要創(chuàng)建一個 3 x 3 的網(wǎng)格,只需要設(shè)置一個容器元素,并且設(shè)置三個大小相同的行和列:
.dice { display: grid; grid-template-rows: 1fr 1fr 1fr; grid-template-columns: 1fr 1fr 1fr; }
這里的 fr 單位允許將行或列的大小設(shè)置為網(wǎng)格容器可用空間的一部分,這上面的例子中,我們需要三分之一的可用空間,所以設(shè)置了 1fr 三次。
我們還可以使用 repeat(3, 1fr) 將 1fr 重復(fù) 3 次,來代替 1fr 1fr 1fr。還可以使用定義行/列的grid-template速記屬性將上述代碼進(jìn)行簡化:
.dice { display: grid; grid-template: repeat(3, 1fr) / repeat(3, 1fr); }
每個面所需要定義的 HTML 就像是這樣:
<div class="dice"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div>
所有的點將自動放置在每個單元格中,從左到右:
現(xiàn)在我們需要為每個骰子值定位點數(shù)。開始時我們提到,可以將每個面分成 3 x 3 的表格,但是這些表格并不是每一個都是我們需要的,分析骰子的六個面,可以發(fā)現(xiàn),我們只需要以下七個位置的點:
+---+---+---+
| a | | c |
+---+---+---+
| e | g | f |
+---+---+---+
| d | | b |
+---+---+---+
我們可以使用grid-template-areas屬性將此布局轉(zhuǎn)換為 CSS:
.dice { display: grid; grid-template-areas: "a . c" "e g f" "d . b"; }
因此,我們可以不使用傳統(tǒng)的單位來調(diào)整行和列的大小,而只需使用名稱來引用每個單元格。其語法本身提供了網(wǎng)格結(jié)構(gòu)的可視化,名稱由網(wǎng)格項的網(wǎng)格區(qū)域?qū)傩远x。中間列中的點表示一個空單元格。
下面來使用grid-area屬性為網(wǎng)格項命名,然后,網(wǎng)格模板可以通過其名稱引用該項目,以將其放置在網(wǎng)格中的特定區(qū)域中。:nth-child()偽選擇器允許單獨定位每個點。
.dot:nth-child(2) { grid-area: b; } .dot:nth-child(3) { grid-area: c; } .dot:nth-child(4) { grid-area: d; } .dot:nth-child(5) { grid-area: e; } .dot:nth-child(6) { grid-area: f; }
現(xiàn)在六個面的樣式如下:
可以看到,1、3、5的布局仍然是不正確的,只需要重新定位每個骰子的最后一個點即可:
.dot:nth-child(odd):last-child { grid-area: g; }
這時所有點的位置都正確了:
對于上面的 CSS,對應(yīng)的 HTML分別是父級為一個p標(biāo)簽,該面有幾個點,子級就有幾個span標(biāo)簽。代碼如下:
<div class="dice-box"> <div class="dice first-face"> <span class="dot"></span> </div> <div class="dice second-face"> <span class="dot"></span> <span class="dot"></span> </div> <div class="dice third-face"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div> <div class="dice fourth-face"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div> <div class="fifth-face dice"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div> <div class="dice sixth-face"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div> </div>
整體的 CSS 代碼如下:
.dice { width: 200px; height: 200px; padding: 20px; background-color: tomato; border-radius: 10%; display: grid; grid-template: repeat(3, 1fr) / repeat(3, 1fr); grid-template-areas: "a . c" "e g f" "d . b"; } .dot { display: inline-block; width: 50px; height: 50px; border-radius: 50%; background-color: white; } .dot:nth-child(2) { grid-area: b; } .dot:nth-child(3) { grid-area: c; } .dot:nth-child(4) { grid-area: d; } .dot:nth-child(5) { grid-area: e; } .dot:nth-child(6) { grid-area: f; } .dot:nth-child(odd):last-child { grid-area: g; }
3. 實現(xiàn) 3D 骰子
上面我們分別使用 Flex 和 Grid 布局實現(xiàn)了骰子的六個面,下面來這將六個面組合成一個正方體。
首先對六個面進(jìn)行一些樣式修改:
.dice { width: 200px; height: 200px; padding: 20px; box-sizing: border-box; opacity: 0.7; background-color: tomato; position: absolute; }
定義它們的父元素:
.dice-box { width: 200px; height: 200px; position: relative; transform-style: preserve-3d; transform: rotateY(185deg) rotateX(150deg) rotateZ(315deg); }
其中,transform-style: preserve-3d;表示所有子元素在3D空間中呈現(xiàn)。這里的transform 的角度不重要,主要是便于后面查看。
此時六個面的這樣的:
看起來有點奇怪,所有面都疊加在一起。不要急,我們來一個個調(diào)整位置。
首先將第一個面在 Z 軸移動 100px:
.first-face { transform: translateZ(100px); }
第一面就到了所有面的上方:
因為每個面的寬高都是 200px,所以將第六面沿 Z 軸向下調(diào)整 100px:
.sixth-face { transform: translateZ(-100px); }
第六面就到了所有面的下方:
下面來調(diào)整第二面,將其在X軸向后移動 100px,并沿著 Y 軸旋轉(zhuǎn) -90 度:
.second-face { transform: translateX(-100px) rotateY(-90deg); }
此時六個面是這樣的:
下面來調(diào)整第二面的對面:第五面,將其沿 X 軸的正方向移動 100px,并沿著 Y 軸方向選擇 90 度:
.fifth-face { transform: translateX(100px) rotateY(90deg); }
此時六個面是這樣的:
下面來調(diào)整第三面,道理同上:
.third-face { transform: translateY(100px) rotateX(90deg); }
此時六個面是這樣的:
最后來調(diào)整第五面:
.fourth-face { transform: translateY(-100px) rotateX(90deg); }
此時六個面就組成了一個完整的正方體:
下面來為這個骰子設(shè)置一個動畫,讓它轉(zhuǎn)起來:
@keyframes rotate { from { transform: rotateY(0) rotateX(45deg) rotateZ(45deg); } to { transform: rotateY(360deg) rotateX(45deg) rotateZ(45deg); } } .dice-box { animation: rotate 5s linear infinite; }
最終的效果如下:
在線體驗:
3D 骰子-Flex:https://codepen.io/cugergz/pen/jOzYGyV
3D 骰子-Grid:https://codepen.io/cugergz/pen/GROMgEe
(學(xué)習(xí)視頻分享:css視頻教程、web前端)
Atas ialah kandungan terperinci Membawa anda langkah demi langkah untuk melaksanakan dadu 3D menggunakan CSS Flex dan susun atur Grid (dengan kod). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

CSS Blok halaman yang diberikan kerana pelayar melihat CSS dalam talian dan luaran sebagai sumber utama secara lalai, terutamanya dengan stylesheet yang diimport, header sejumlah besar CSS sebaris, dan gaya pertanyaan media yang tidak dapat dioptimumkan. 1. Ekstrak CSS kritikal dan membenamkannya ke HTML; 2. Kelewatan memuatkan CSS bukan kritikal melalui JavaScript; 3. Gunakan atribut media untuk mengoptimumkan pemuatan seperti gaya cetak; 4. Memampatkan dan menggabungkan CSS untuk mengurangkan permintaan. Adalah disyorkan untuk menggunakan alat untuk mengekstrak CSS utama, menggabungkan REL = "Preload" pemuatan asynchronous, dan menggunakan media yang ditangguhkan dengan munasabah untuk mengelakkan pemisahan yang berlebihan dan kawalan skrip kompleks.

Toimplementdarkmodeincsefectely, usecssvariablesforthemecolors, detectsystempreferenceswithprefers-color-scheme, addamanualtogglebutton, andhandleimagesandbackgroundsthoughtfuly.1.definecsvariablesformesormesormesormesordemestfandemesffan

Topik Perbezaan Babetweenem, Rem, Px, andviewportunits (VH, VW) LiesintheirReferencePoint: pxisfixedandbasedonpixelelvalues, emissrelative etothefontsizeFheelementoritsparent, RemisrelatotheroToTFontsize, dan VwarebaseVeVeVeVeView.

Thebestapproachforcssdependonstantheproject'ssspecificneeds.forlargerprojects, externalcssisbetterduetomaintainabilityability;

Tidak, cssdoesnothavetobeinlowercase.however, menggunakanLowerCaseisRecommendorfendfor: 1) Consistencyandreadability, 2) Mengelakkaningerrorsinrelatedtechnologies, 3) potensiformanceBenefits, dan4) peningkatan yang lebih baik.

Memilih nilai paparan yang betul dalam CSS adalah penting kerana ia mengawal tingkah laku unsur -unsur dalam susun atur. 1.Inline: Buat unsur -unsur mengalir seperti teks, tanpa menduduki satu baris, dan tidak dapat secara langsung menetapkan lebar dan ketinggian, sesuai untuk unsur -unsur dalam teks, seperti; 2.Block: Buat unsur -unsur secara eksklusif menduduki satu baris dan menduduki semua lebar, boleh menetapkan lebar dan ketinggian dan margin dalaman dan luaran, sesuai untuk unsur -unsur berstruktur, seperti; 3. Secur-block: Mempunyai kedua-dua ciri blok dan susun atur sebaris, boleh menetapkan saiz tetapi masih dipaparkan dalam baris yang sama, sesuai untuk susun atur mendatar yang memerlukan jarak yang konsisten; 4.Flex: Mod susun atur moden, sesuai untuk bekas, mudah untuk mencapai penjajaran dan pengedaran melalui kandungan yang wajar, lien-item dan atribut lain, ya

AnimatingsvgwithcssispossibleusingkeyframesforbasicicanimationsandTransisiSforinterActiveFt.1.use@keyframestodefineAnimationStageFropertiesLikescale, Opacity, andColor.2.AplyTheAnimationTosvgelements.

AutoPrefixer adalah alat yang secara automatik menambah awalan vendor ke atribut CSS berdasarkan skop penyemak imbas sasaran. 1. Ia menyelesaikan masalah mengekalkan awalan secara manual dengan kesilapan; 2. Bekerja melalui borang pemalam postcss, menghuraikan CSS, menganalisis atribut yang perlu diawali, dan menjana kod mengikut konfigurasi; 3. Langkah-langkah penggunaan termasuk memasang pemalam, menetapkan senarai pelayar, dan membolehkan mereka dalam proses membina; 4. Nota termasuk tidak menambah awalan secara manual, menyimpan kemas kini konfigurasi, awalan tidak semua atribut, dan disyorkan untuk menggunakannya dengan preprocessor.
