国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入理解CSS之flex精要之 flex-basis flex-grow flex-shrink 實戰(zhàn)講解

這篇具有很好參考價值的文章主要介紹了深入理解CSS之flex精要之 flex-basis flex-grow flex-shrink 實戰(zhàn)講解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這篇文章對flex不熟也可以看。這篇文章只講這三個屬性。為了簡單化,不會提到主軸交叉軸,也不講方向,默認(rèn)方向就是水平方向從左往右。但并不影響對這三個概念的理解。

如果你覺得對flex比較了解,可以直接從第二小節(jié)開始看起。

1.開啟flex

我們正常寫三個div。默認(rèn)情況下是垂直排列的。只要開啟flex,一行代碼就可以實現(xiàn)水平布局。這是flex最有用的一點。

<div id="box">
     <div class="div1 fontCenter">1</div>
     <div class="div2 fontCenter">2</div>
     <div class="div3 fontCenter">3</div>
</div>
        #box {
            /*display: flex;*/
            height: 500px;
            width: 1000px;
            background-color: plum;
        }

        .div1{
            width: 150px;
            height: 150px;
            background-color: lightblue;
        }
        .div2{
            width: 150px;
            height: 150px;
            background-color: lightgreen;
        }
        .div3{
            width: 150px;
            height: 150px;
            background-color: lightsalmon;
        }

        .fontCenter{
            text-align: center;
            line-height: 150px;
            font-size: 50px;
        }

flex-basis,css,前端,javascript

1.1使用flex實現(xiàn)水平排列

我們給容器原始#box加上display: flex;這行。表示開啟flex。這時候就已經(jīng)實現(xiàn)了水平排列功能。非常的簡單,這個功能用浮動來做就麻煩的多。

  #box {
            display: flex;
            height: 500px;
            width: 1000px;
            background-color: plum;
        }

flex-basis,css,前端,javascript

1.1.2 左右分區(qū)

我想實現(xiàn)box1和box2在左邊,box3在右邊。這個功能通過flex非常的好實現(xiàn)。只需要給box3設(shè)置margin-left:auto。box3就會把能margin-left的都margin了。自己也就到了最右邊,也就實現(xiàn)了我們想要的功能。

        .div3{
            width: 150px;
            height: 150px;
            margin-left: auto;
            background-color: lightsalmon;
        }

flex-basis,css,前端,javascript
如果你想要把box2和box3一起移動到最右邊,只需要把margin-left:auto設(shè)置在box2上面就可以了。

        .div2{
            width: 150px;
            height: 150px;
            margin-left: auto;
            background-color: lightgreen;
        }

flex-basis,css,前端,javascript

2.理解flex-basis

flex-basis這個屬性是非常重要的一個屬性,也是最容易混淆的一個屬性。最開始以為和width屬性差不多,也就沒怎么重視。不弄清楚會造成和他相關(guān)屬性的理解混亂。
其實flex-basis非常的好理解,你只需要逐字逐句的把他的定義理解一遍就行。

定義:
它的初始值是 auto,此時瀏覽器會檢查元素是否設(shè)置了 width 屬性值。如果有,則使用 width 的值作為 flex-basis 的值;如果沒有,則用元素內(nèi)容自身的大小。如果 flex-basis 的值不是 auto,width 屬性會被忽略。
分為兩種情況:
1.沒有設(shè)置flex-basis,這時候flex-basis為默認(rèn)值auto。
這種情況很常見,就是只設(shè)置了display:flex的時候。別的flex屬性都沒設(shè)置。此時瀏覽器會檢查元素是否設(shè)置了 width 屬性值。如果有,則使用 width 的值作為 flex-basis 的值;如果沒有,則用元素內(nèi)容自身的大小。 這句話暗含了一個很重要的信息就是在flex里面,flex-basis是優(yōu)先用于處理寬度的。更切確的說,在flex里面,根本不存在width,如果用戶沒設(shè)置flex-basis的值,flex系統(tǒng)會把width的值賦值給flex-basis。flex-basis有了值后,width被忽略,變成了工具人。
2.設(shè)置了flex-basis的值,這時候width會忽略,元素的寬度用flex-basis的值表示。
這點就更加驗證了在flex里面,flex-basis是優(yōu)先于width來處理寬度的。在flex里面只要用戶設(shè)置了flex-basis的值,我flex系統(tǒng)都不正眼瞧你width。
總之,在設(shè)置了display:flex之后,你最好設(shè)置flex-basis的值,并且忽略width。 雖然width也是可以用,但就顯得拖泥帶水。就像你一只腳已經(jīng)踏入我flex這個先進(jìn)的布局系統(tǒng)里面,另一只腳還停留在原始的CSS里面。既然你已經(jīng)用了flex這個系統(tǒng),用就用全套,就用我flex-basis吧。而且我還可以和我另兩個兄弟flex-grow 和 flex-shrink一起配合使用。組成flex三巨頭。
雖然說flex-basis是替換了width,并且他和width起到的作用是差不多的。但他們還是不同的。
當(dāng)width為0的時候,我們是看不到元素的。但當(dāng)flex-basis為0,或者為auto并且width沒有設(shè)置值的時候(默認(rèn)值為0),該元素的大小是由內(nèi)容大小決定的。也就是只要有內(nèi)容,flex-basis是不會看不到元素的。這在后面會從例子中體現(xiàn)。

設(shè)為auto和0也是有區(qū)別的。一個最明顯的區(qū)別就是為0的時候,如果內(nèi)容文字有空格是自動換行的。
這個可以通過設(shè)置white space:nowrap解決。auto就沒有這個問題。
例一:
div1同時設(shè)置了width和 flex-basis,width的值將會失效。

        .box1{
            width: 150px;
            height: 150px;
            flex-basis: 200px;
            background-color: lightsalmon;
        }

        .box2{
            width: 150px;
            height: 150px;
            background-color: lightgreen;
        }

        .box3{
            width: 150px;
            height: 150px;
            background-color: lightblue;
        }

寬度使用的是flex-basis的值而不是width的。
flex-basis,css,前端,javascript
通常用法:
這里給父元素加了寬高和背景。

        #content {
            display: flex;
            width: 1000px;
            height: 500px;
            background-color: lightpink;
        }
        .box1{
            height: 150px;
            flex-basis: 15%;
            background-color: lightsalmon;
        }

        .box2{
            height: 150px;
            flex-basis: 15%;
            background-color: lightgreen;
        }

        .box3{
            height: 150px;
            flex-basis: 20%;
            background-color: lightblue;
        }

flex-basis,css,前端,javascript

3.理解flex-grow

在設(shè)置了flex-basis后,元素就占用了一定的空間。但還留有一些空間。這些空間可以通過flex-grow來占領(lǐng)。
以上面的這種情況為例,box1,box2,box3分別占據(jù)了父元素的15%,15%和20%的寬度,一共占據(jù)了50%寬度。還剩下50%的空白空間。
flex-basis,css,前端,javascript
我們可以給box設(shè)置flex-grow屬性。分別給三個box設(shè)置flex-grow:1。表示權(quán)重都是1,那么三個box將會平分剩下的空間。

        .box1{
            height: 150px;
            flex-basis: 15%;
            flex-grow: 1;
            background-color: lightsalmon;
        }

        .box2{
            height: 150px;
            flex-basis: 15%;
            flex-grow: 1;
            background-color: lightgreen;
        }

        .box3{
            height: 150px;
            flex-basis: 20%;
            flex-grow: 1;
            background-color: lightblue;
        }

父元素的寬度是1000px。
以box1為例,box1原來的寬度是1000*15%=150。grow的寬度是1000 * 50% * 1/3=500/3。所以box1最終寬度是150+500/3。大家可以在開發(fā)者工具對比一下前后寬度就明白了。
flex-basis,css,前端,javascript
如果子元素flex-grow的總和超過1,那么就是按照上面的方式,按比例(權(quán)重)瓜分剩下的空間。
還存在一種情況是flex-grow的總和沒有超過1的,比如出現(xiàn)小數(shù)的情況。

        .box1{
            height: 150px;
            flex-basis: 15%;
            flex-grow: 0.3;
            background-color: lightsalmon;
        }

        .box2{
            height: 150px;
            flex-basis: 15%;
            flex-grow: 0.3;
            background-color: lightgreen;
        }

        .box3{
            height: 150px;
            flex-basis: 20%;
            flex-grow: 0.1;
            background-color: lightblue;
        }

這種情況就不會完全瓜分剩下的全部空間。而是子元素將自己的flex-grow值和剩余空間相乘,計算出的值就是增加的值。以box1為例,剩余空間是100050%=500,原來的寬度是10000.2=200,500*0.3=150這是增加的值,最后寬度是200+150=350。
和總和超過一的區(qū)別就是,不是按照各個子元素直接的權(quán)重比例來分配了,而是直接用flex-grow這個值乘以剩余空間來獲取增長的值。
flex-basis,css,前端,javascript

3.1 flex-grow的實際用途

其實上面提到的兩種用法在實際開發(fā)中基本是用不上的。誰會給已經(jīng)設(shè)置好寬度的元素又增加點寬度呢?實際上,下面這種用法才是最常見的。
下面這個效果在網(wǎng)頁里面是經(jīng)常用到的。左邊是主要內(nèi)容區(qū),右邊是一些小模塊。使用flex-grow可以快速實現(xiàn)這樣的功能。
我們想實現(xiàn)的效果是box1:box2=3,也就是box1寬度是box2寬度的3倍。
flex-basis,css,前端,javascript

         #content{
             display: flex;
             height: 700px;
             font-size: 50px;
         }
         .box1{
             height: 100%;
             flex-grow: 3;
             background-color: lightgreen;
         }
         .box2{
             height: 100%;
             flex-grow: 1;
             background-color: lightblue;
         }
<div id="content">
    <div class="box1">box1</div>
    <div class="box2">box2</div>
</div>

但實際上,如果你打開開發(fā)者工具,測量一下,box1和box2的寬度,你會發(fā)現(xiàn)兩者比例根本不是3:1。這是為什么?
也許你一開始就看出我這樣寫是有問題的,那么恭喜你,你對flex理解的很深刻。原因出在你沒有設(shè)置flex-basis=0上。注意,一定要設(shè)置為0,不寫flex-basis默認(rèn)值是auto。為什么設(shè)置flex-basis為0就可以了呢?

我們來分析一下上面的代碼的執(zhí)行邏輯:
上面的代碼我們沒有設(shè)置flex-basis,也沒有設(shè)置width。flex-basis等于auto,width沒有值。所以使用內(nèi)容的寬度。 不信你把flex-grow屬性都去掉,就會看到下面的效果。
這里引出flex-basis和width一個重要的區(qū)別。flex-basis默認(rèn)值是auto,并且沒有設(shè)置width的時候,flex-basis的值等于內(nèi)容的寬度,值并不是為0的。這就是導(dǎo)致上面代碼box1和box2不能實現(xiàn)3:1比例的原因。要想實現(xiàn)box1和box2比例是3:1,box1和box2的起始寬度必須是0。這樣flex-grow就可以按比例平分父元素空間了。
flex-basis,css,前端,javascript
只需要給兩個box都加上flex-basis:0就可以實現(xiàn)按比例平分的效果了。

         .box1{
             height: 100%;
             flex-grow: 3;
             flex-basis: 0;
             background-color: lightgreen;
         }
         .box2{
             height: 100%;
             flex-grow: 1;
             flex-basis: 0;
             background-color: lightblue;
         }

4.理解flex-shrink

在《深入理解CSS》這本書里面,有下面這樣一個圖。給三個元素設(shè)置flex-basis都等于40%。將會溢出一部分。
flex-basis,css,前端,javascript
我也照著做了一遍。

<div id="content">
    <div class="box1">1</div>
    <div class="box2">2</div>
    <div class="box3">3</div>
</div>
        #content{
            display: flex;
            height: 500px;
            width: 1000px;
            background-color: lightpink;
            font-size: 50px;
        }
        .box1{
            height: 200px;
            flex-basis: 40%;
            background-color: lightgreen;
        }
        .box2{
            height: 200px;
            flex-basis: 40%;
            background-color: lightblue;
        }
        .box3{
            height: 200px;
            flex-basis: 40%;
            background-color: lightsalmon;
        }

發(fā)現(xiàn)和想象中的不一樣。box3并沒有溢出。但三個flex-basis加起來確實是超出父元素寬度了。
但我心想,大牛寫的書,應(yīng)該不會騙我。一定是我寫錯了。但我沒有寫錯,書里面說的也沒錯。
flex-basis,css,前端,javascript
問題就出在flex-shrink身上。可是我也沒寫flex-shrink啊。你沒寫flex會自動給你添加上,而且默認(rèn)值還不是0,而是1。
實際上,你上面的代碼等價于下面的代碼。

        .box1{
            height: 200px;
            flex-basis: 40%;
            flex-shrink: 1;
            background-color: lightgreen;
        }
        .box2{
            height: 200px;
            flex-basis: 40%;
            flex-shrink: 1;
            background-color: lightblue;
        }
        .box3{
            height: 200px;
            flex-basis: 40%;
            flex-shrink: 1;
            background-color: lightsalmon;
        }

flex-shrink的作用和flex-grow相反。當(dāng)合計的flex-basis的總寬度超過父元素的總寬度的時候。flex-shrink會把子元素按比例減少,把溢出的寬度抹沒。
比如前面的例子總寬度是40%*3=120%,也就是溢出了20%的寬度,也就是1000 * 20%=200px的寬度。怎么把這200px給抹沒掉呢?就是從前面三個子元素上面扣寬度。三個子元素的flex-shrink都是1,也就是平均扣除200/3px。
就能實現(xiàn)抹沒的效果。打開開發(fā)者工具,量一下子元素的寬度,確實是減少了這些寬度的。

如果說,我就想有這種溢出的效果,那么就把flex-shrink都設(shè)為0就好了。就可以達(dá)到下面這樣效果。也就是書上提到的效果。
flex-basis,css,前端,javascript

5.flex屬性的使用

介紹完了flex-basis,flex-grow和flex-shrink后,我們可以用他們的一種精簡寫法flex。

例如:
我們給三個子元素都寫上flex:1,就可以實現(xiàn)三等分的效果。

        .box1{
            height: 200px;
            flex: 1;
            background-color: lightgreen;
        }
        .box2{
            height: 200px;
            flex: 1;
            background-color: lightblue;
        }
        .box3{
            height: 200px;
            flex: 1;
            background-color: lightsalmon;
        }

這個效果是真正三等分的。
flex-basis,css,前端,javascript
這里的flex:1相當(dāng)于下面的寫法。三個值分別表示flex-grow,flex-shrink,flex-basis。
注意,flex:1和只寫一個flex-grow:1是不一樣的。
寫成flex:1,flex-shrink,flex-basis的默認(rèn)值是1和0%。
而寫成flex-grow:1,flex-shrink,flex-basis的默認(rèn)值是1和auto。也就是flex-basis是不同的。
而flex-basis值為0和auto的不同前面已經(jīng)驗證過了,就是auto在沒有width的情況下寬度是內(nèi)容的寬度。這會導(dǎo)致flex-grow不能整體平均分。具體見flex-grow小節(jié)。

flex:1 1 0%

或者

flex-grow:1
flex-shrink:1
flex-basis:0%

除了flex-basis會單獨(dú)當(dāng)類似width使用外。flex-grow,flex-shrink基本是很少使用的。
flex-grow也很少單獨(dú)使用,因為使用flex-grow的時候,一般就是為了按比例分配布局。這時候要同時設(shè)置flex-basis:0。
所有一般使用下面的方式來替代單獨(dú)使用flex-grow。因為這種方式可以快速達(dá)到按比例分配布局。

flex:1

至于flex-shrink基本就不會用,也就設(shè)個默認(rèn)值讓子元素不會超出。

使用flex實現(xiàn)常用效果

1.包裹內(nèi)容水平排列
設(shè)置flex后,子元素也不要設(shè)置width,就會出現(xiàn)這種包裹內(nèi)容水平排列的效果。
flex-basis,css,前端,javascript

2.第一個子元素固定,第二個子元素?fù)螡M剩余高度。
flex-shrink的值是無所謂的,因為并沒有超出父容器寬度。
flex-basis,css,前端,javascript

3.三足鼎立型。兩邊固定寬度,中間填滿剩余空間
flex-basis,css,前端,javascript

4.按比例劃分
flex-basis,css,前端,javascript文章來源地址http://www.zghlxwxcb.cn/news/detail-811353.html

到了這里,關(guān)于深入理解CSS之flex精要之 flex-basis flex-grow flex-shrink 實戰(zhàn)講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 深入淺出理解CSS中的3D變換:踏上立體視覺之旅

    在現(xiàn)代Web設(shè)計中,CSS 3D變換已經(jīng)成為增強(qiáng)用戶體驗、打造沉浸式界面的重要手段。借助CSS的3D變換屬性,我們可以輕松實現(xiàn)元素在三維空間中的旋轉(zhuǎn)、移動、縮放等操作,從而創(chuàng)造出生動活潑、富有立體感的網(wǎng)頁效果。本文將從基礎(chǔ)知識出發(fā),通過易于理解的概念解析和實戰(zhàn)

    2024年04月22日
    瀏覽(27)
  • CSS Flex布局

    CSS Flex布局

    Flex布局(彈性盒子布局) 是一種用于在容器中進(jìn)行靈活和自適應(yīng)布局的CSS布局模型。通過使用Flex布局,可以更方便地實現(xiàn)各種不同尺寸和比例的布局,使元素在容器內(nèi)自動調(diào)整空間分配。 目錄 容器屬性 ??display屬性 ??flex-direction屬性 ??flex-wrap屬性 ??flex-flow屬性 ??jus

    2024年02月10日
    瀏覽(25)
  • CSS---flex布局

    CSS---flex布局

    主要記錄flex布局的要點以及實例 flex包含6個屬性,分別為:flex-direction、flex-wrap、flex-flow、justify-content、align-items、align-content。 row表示按照行正序排列 row-reverse表示按照行反序排列 column表示按照列正序排列 column-reverse表示按照列反序排列 nowrap為默認(rèn)值,默認(rèn)不換行 wrap表示

    2024年02月09日
    瀏覽(26)
  • 【css】flex彈性盒子

    flex 彈性盒子 在 CSS 中, display: flex 是一種布局模型,用于創(chuàng)建彈性盒子(flexbox)。它定義了一個容器元素及其子元素的布局方式,使其能夠更靈活地調(diào)整和排列內(nèi)容。 使用 display: flex 可以將一個容器元素轉(zhuǎn)換為彈性盒子,并控制其中子元素的排列方式、對齊方式以及伸縮行

    2024年02月10日
    瀏覽(36)
  • css-flex使用

    彈性盒,伸縮盒,一種新的布局方法, 主要是用來代替浮動來完成頁面的布局 。 flex可以使元素具有彈性,讓元素可以跟隨頁面的大小改變而改變 要使用彈性盒,必須要先將一個元素設(shè)置為彈性容器: display: flex 設(shè)置為塊級彈性容器 display: inline-flex 設(shè)置為行級彈性容器 屬性

    2024年02月12日
    瀏覽(25)
  • CSS-Flex布局

    Flex布局是一種彈性盒子布局,適用于構(gòu)建響應(yīng)式的頁面布局 Flex布局是一種彈性盒子布局,適用于構(gòu)建響應(yīng)式的頁面布局。以下是一些Flex布局的技巧: 使用flex屬性設(shè)置彈性容器的布局方式,常見的取值有row(水平排列)、column(垂直排列)、row-reverse和column-reverse等。 例如

    2024年01月16日
    瀏覽(18)
  • 前端知識——css 之 flex 布局

    前端知識——css 之 flex 布局

    ??????更多知識,歡迎訪問我的個人博客:Nan-ying’s Blog 長久以來,CSS 布局中唯一可靠且跨瀏覽器兼容的布局工具只有 floats 和 positioning 。 但是這兩種方法本身存在很大的局限性, 并且他們用于布局實在是無奈之舉。 一些布局上的痛點無法解決: 比如在父內(nèi)容里面垂直居

    2024年02月07日
    瀏覽(39)
  • CSS 用 flex 布局繪制骰子

    CSS 用 flex 布局繪制骰子

    ? ? ?

    2024年03月10日
    瀏覽(25)
  • 瀑布流布局(CSS flex實現(xiàn))

    關(guān)鍵點 使用了 vw 進(jìn)行自適應(yīng)縮放 html:

    2024年02月07日
    瀏覽(27)
  • CSS3盒模型+flex

    CSS3盒模型+flex

    1.盒模型 標(biāo)準(zhǔn)盒模型: w=width+padding+border h=height+padding+border 怪異盒模型(ie盒模型) w=width包含了(padding+border) h=height包含了(padding+border) 2.CSS3彈性盒(重點新版彈性盒) 彈性盒: 設(shè)置為彈性盒后,父元素為容器,子元素為項目 彈性盒中存在兩根軸,默認(rèn)水平為主軸,垂直為側(cè)軸 項目默認(rèn)沿

    2024年02月11日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包