CSS3的Flexbox骰子布局的實現(xiàn)及問題講解

本文中只是熟悉基本屬性的用法,并完成一組骰子各個面的制作。在下面的內(nèi)容我不會涉及flexbox一些比較棘手的問題,比如舊版本語法、供應商前綴、瀏覽器怪癖等:
一、First Face
我們知道,骰子有六個面,每個面的點的個數(shù)代表該面的值,第一個面由一個水平垂直居中的點組成。下面來看具體的實現(xiàn):
- <section name="01" class="face-01">
- <span class="dot"></span>
- </section>
- face-01 {
- display: flex;
- justify-content: center;
- align-items: center;
關(guān)于justify-content和align-items的用法請參考這里justify-content,align-items。使用flexbox,垂直居中兩行屬性就可以搞定,很easy!
二、Second Face
- .face-02 {
- display: flex;
- justify-content: space-between;
- }
- .face-02 .dot:nth-of-type(2) {
- align-self: flex-end;
- }
- <section name="02" class="face-02">
- <span class="dot"></span>
- <span class="dot"></span>
- </section>
這里我們不能使用align-items屬性,使用它兩個點都會受影響,flexbox提供了一個align-self屬性,這個屬性可以讓我們更方便的控制flex items的各項沿著cross axias方向,設置不同的布局。align-self的用法參考這里align-self。
三、Third Face
- .face-03 {
- display: flex;
- justify-content: space-between;
- }
- .face-03 .dot:nth-of-type(2) {
- align-self: center;
- }
- .face-03 .dot:nth-of-type(3) {
- align-self: flex-end;
- }
- <section name="03" class="face-03">
- <span class="dot"></span>
- <span class="dot"></span>
- <span class="dot"></span>
- </section>
該face與second face 使用的屬性相同,不再解釋。
四、Fourth Face
- .face-04 {
- display: flex;
- justify-content: space-between;
- flex-direction: column;
- }
- .face-04 .column {
- display: flex;
- justify-content: space-between;
- }
- <section name="04" class="face-04">
- <div class="column">
- <span class="dot"></span>
- <span class="dot"></span>
- </div>
- <div class="column">
- <span class="dot"></span>
- <span class="dot"></span>
- </div>
- </section>
本例中使用了flex-direction,從字面意思可以看出,是用來控制flex的方向,即按列還是按行來布局,該屬性更詳細的用法可以參考這里flex-direction
后面Fifth Face 和 Sixth Face,根據(jù)前面的布局思想,就很easy了不再贅述!
寫到此,想想配合JS寫一個玩骰子的小游戲應該很easy了吧。
五、實現(xiàn)1,2,3,4,6,12等份
- .row {
- display: flex;
- box-sizing: border-box;
- }
- .column {
- margin: 10px;
- flex-grow: 1;
- flex-shrink: 1;
- flex-basis: 0;
- box-sizing: border-box;
- }
- <section class="row">
- <div class="column">One</div>
- </section>
- <section class="row">
- <div class="column">One Half</div>
- <div class="column">One Half</div>
- </section>
- <section class="row">
- <div class="column">One Third</div>
- <div class="column">One Third</div>
- <div class="column">One Third</div>
- </section>
- <section class="row">
- <div class="column">One Fourth</div>
- <div class="column">One Fourth</div>
- <div class="column">One Fourth</div>
- <div class="column">One Fourth</div>
- </section>
- <section class="row">
- <div class="column">One Sixth</div>
- <div class="column">One Sixth</div>
- <div class="column">One Sixth</div>
- <div class="column">One Sixth</div>
- <div class="column">One Sixth</div>
- <div class="column">One Sixth</div>
- </section>
- <section class="row">
- <div class="column">One Twelve</div>
- <div class="column">One Twelve</div>
- <div class="column">One Twelve</div>
- <div class="column">One Twelve</div>
- <div class="column">One Twelve</div>
- <div class="column">One Twelve</div>
- <div class="column">One Twelve</div>
- <div class="column">One Twelve</div>
- <div class="column">One Twelve</div>
- <div class="column">One Twelve</div>
- <div class="column">One Twelve</div>
- <div class="column">One Twelve</div>
- </section>
在本例中用到了flex-grow,flex-shrink,flex-basis三個屬性。
1. flex-grow:根據(jù)需要用來定義伸縮項目的擴展能力。它接受一個不帶單位的值做為一個比例。主要用來決定伸縮容器剩余空間按比例應擴展多少空間。
如果所有伸縮項目的“flex-grow”設置了“1”,那么每個伸縮項目將設置為一個大小相等的剩余空間。如果你給其中一個伸縮項目設置了“flex-grow”值為“2”,那么這個伸縮項目所占的剩余空間是其他伸縮項目所占剩余空間的兩倍。負值無效。
2. flex-shrink:根據(jù)需要用來定義伸縮項目收縮的能力。負值同樣無效。
3. flex-basis: 用來設置伸縮基準值,剩余的空間按比率進行伸縮,不支持負值。如果設置為0,圍繞內(nèi)容的額外的空間不會考慮在內(nèi)。如果設置為auto,額外的空間是基于flex-grow的值分配。
六、實現(xiàn)2-3-7布局
- .row237 .column:first-of-type {
- flex-grow: 2;
- flex-basis: 5px;
- }
- .row237 .column:nth-of-type(2) {
- flex-grow: 3;
- flex-basis: 18px;
- }
- .row237 .column:nth-of-type(3) {
- flex-grow: 7;
- flex-basis: 70.5px;
- }
- <section class="row row237">
- <div class="column">One Half</div>
- <div class="column">One Third</div>
- <div class="column">One Seventh</div>
- </section>
此處各項flex-basis的值的計算,應該有個公式(待解決),如果有這個公式,配合sass,less等預處理語言實現(xiàn)多列自適應布局將會很方便。
相關(guān)文章
利用CSS3的flexbox實現(xiàn)水平垂直居中與三列等高布局
這篇文章給大家介紹了三個小節(jié)的內(nèi)容,其中包括關(guān)于css3中flexbox需要掌握的概念、flexbox實現(xiàn)水平垂直居中對齊和三列等高自適應頁腳區(qū)域黏附底部的布局,有需要的可以參考2016-09-12- 這篇文章主要介紹了基礎的CSS3彈性盒Flexbox布局使用實例,文中最后也提到了解決兼容性問題的基本方法,需要的朋友可以參考下2016-04-08
- 這篇文章主要介紹了CSS3的Flexbox布局的簡明入門指南,Flexbox在"布局界"可謂風光無限,近來Facebook開源的React Native也采用Flexbox來布局,需要的朋友可以參考下2016-04-08
- 今天剛學了css3的彈性盒模型,這是一個可以讓你告別浮動、完美實現(xiàn)垂直水平居中的新特性。本文主要是總結(jié)一下今天所學,有需要的朋友可以參考下2014-10-08
CSS3 Flexbox中flex-shrink屬性的用法示例介紹
當flex items的大小超過了flex container時, 各個flex item的壓縮比例,下面有個不錯的教程,大家可以參考下2013-12-30- 這篇文章主要介紹了10分鐘理解CSS3 FlexBox彈性布局的相關(guān)資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-20