日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

一起从头学习Flex

發(fā)布時(shí)間:2025/6/15 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一起从头学习Flex 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

“其實(shí)我覺(jué)得flex很像現(xiàn)在的人——是適應(yīng)性很好的生物,在家秋衣秋褲在外香肩外露。flex container看作一個(gè)環(huán)境或者大佬,flex-item是其中個(gè)體或者馬仔。個(gè)體如何存在很大程度上取決環(huán)境的設(shè)定,當(dāng)然也會(huì)有一些出世的人 比如position: absolute; 存在感就有比較酷” —— 燉燉

背景:布局模式

頁(yè)面拆開(kāi)了看,無(wú)非是由眾多尺寸各異的box以不同層疊水平和順序組合而成。

CSS2.1定義了下面前4種布局模式,不同的布局模式下box內(nèi)的渲染規(guī)則不同。

布局特性
block layout塊級(jí)布局獨(dú)立的渲染區(qū)域,與外界無(wú)關(guān)
inline layout行內(nèi)布局為布局文本設(shè)計(jì)
table layout表格布局在表格格子布局二維數(shù)據(jù)
positioned layout定位布局不考慮文件流中其他元素,布局有非常明確的位置
flex layout彈性布局呈現(xiàn)復(fù)雜的應(yīng)用與頁(yè)面

flex-layout和block-layout非常相似。

塊級(jí)布局中一些比較復(fù)雜的屬性,比如浮動(dòng)、多列,在彈性布局中是沒(méi)有的;

反過(guò)來(lái)彈性布局有一些很簡(jiǎn)單但厲害的屬性去實(shí)現(xiàn)復(fù)雜的網(wǎng)頁(yè)布局中常見(jiàn)的需求。

flex-container檔案

  • 元素名:flex container
  • 中文名:彈性容器、彈性盒
  • 身份:大佬
  • 年代:css3,chrome29就已經(jīng)可以不加前綴地支持了
  • 權(quán)力:彈性布局——指定容器中元素的布局方式,子元素在其中是否收縮或伸展
  • 被接受程度:所有的瀏覽器都支持flexbox(caniuse)

    image flex layout is split into three versions: 1. old version display: box;2. transitional version: display:flexbox;3. present standard version: display:flex;Android2.3 began to support old version: display: -webkit-box;4.4 began to support standard version: display: flex;IOS6.1 began to support old version: display: -webkit-box;7.1 began to support standard version: display: flex;復(fù)制代碼
  • 如何成為大佬 flex:display:flex/inline-flex; 分別產(chǎn)生塊級(jí)和行內(nèi)的彈性容器。

  • 社會(huì)關(guān)系:彈性容器中的子元素——flex items
  • 主要參數(shù):主軸、側(cè)軸,主軸長(zhǎng)度、側(cè)軸長(zhǎng)度
    flexbox
  • 速記幾個(gè)屬性:

    • flex-flow 子元素排列的方向和是否換行 flex-flow: [<flex-direction> <flex-wrap>]

    • flex-direction 排列方向和順序(主軸側(cè)軸方向決定)

      flex-direction: row | row-reverse | column | column-reverse

    • flex-wrap 主軸個(gè)數(shù)和排列順序

      flex-wrap: nowrap | wrap | wrap-reverse



      eg. flex-flow: row || column wrap || row-reverse wrap-reverse

    • justify-content 安排(決定)子元素在主軸上如何分配空白空間的方式

      justify-content: flex-start | flex-end | center | space-between | space-around

    • align-items 安排(決定)子元素在縱軸上的伸展方式

      align-items: flex-start | flex-end | center | baseline | stretch

    • align-content 多條主軸如何在縱軸方向上面排布,跟justify-content 在主軸方向?qū)R元素的方式相似,如果只有一行該屬性不生效

      align-content: flex-start | flex-end | center | space-between | space-around | stretch

  • flex-items檔案

  • 元素名:flex item
  • 中文名:彈性子元素
  • 身份:flex container的馬仔
  • 如何成為馬仔 flex-item:在flex container里面的子元素自動(dòng)成為flex item,直接包含在容器中的連續(xù)文本會(huì)被包裹成一個(gè)匿名的flex item,空白的item不會(huì)被渲染出來(lái)
  • 職責(zé):為其內(nèi)容創(chuàng)建新的formatting context,flex item是flex-level的塊,所以使用彈性容器的彈性格式化上下文而不是BFC(比如在BFC中margin會(huì)坍塌在彈性格式化上下文中不會(huì) 戳)
  • 比較酷的絕對(duì)定位的彈性子元素 特性速記
    • 不參與flex布局,脫離文檔流 (戳)
    • align-self: auto/stretch = align:flex-start 默認(rèn)布局從主軸開(kāi)始位置放置
    • align-self: center 垂直方向居中(chrome遵守了這一規(guī)范,IE/FF沒(méi)有,戳)
  • 幾個(gè)重要屬性:

    • marginspaddings:flex item的margins不會(huì)重疊(應(yīng)該盡量避免使用百分比的margins、paddings,在不同瀏覽器下表現(xiàn)不一樣,目前在IE/FF/Chrome還沒(méi)有測(cè)試出來(lái)差別啦) 百分比的基準(zhǔn)是瀏覽器寬度

    • 有order的元素渲染順序會(huì)重置,相當(dāng)于指定特定的子元素出現(xiàn)在什么位置

    • visibility: collapse 看例子

    • flex 子元素的彈性

      flex: [ <flex-grow> <flex-shrink> <flex-basis>] 詳見(jiàn)flex縮寫(xiě)探究

    • margin: auto 會(huì)“貪吃”掉所有空白的區(qū)域 例子

    • align-self 單獨(dú)設(shè)置子元素(包括絕對(duì)定位的子元素)在縱軸上的定位方式,可以覆蓋align-items屬性

      align-self: auto | flex-start | flex-end | center | baseline | stretch (auto是跟container的flex-items屬性一致)

  • flex縮寫(xiě)的探究

    flex: [ <flex-grow> <flex-shrink> <flex-basis>]

    • flex-grow 默認(rèn)1 如何分配container中的空白空間,數(shù)值決定權(quán)重
    • flex-shrink 默認(rèn)1 在空間不夠的時(shí)候如何收縮元素
    • flex-basis 指定flex-item的默認(rèn)尺寸 百分比以父級(jí)容器寬度為基數(shù)計(jì)算(Flexbox Tester可以幫助理解flex item寬度的工具網(wǎng)站)
    縮寫(xiě)flex-growflex-shrinkflex-basis
    no declaration01auto
    auto11auto
    0010%
    1110%
    none00auto

    彈性布局不是塊級(jí)布局

  • float不生效
  • 相鄰子元素的margin不會(huì)發(fā)生重疊
  • 多列布局column-*不起作用
  • 'float'和'clear'對(duì)flex item不產(chǎn)生浮動(dòng)或者清除浮動(dòng)的效果,也不會(huì)讓它脫離文檔流
  • vertical-align對(duì)于flex item沒(méi)效果
  • 偽元素::first-line、::first-letter不適用于彈性容器,彈性容器也不會(huì)成為其父元素的first-line或者first-letter
  • 為什么你的flexbox不管用

    "了解一個(gè)人并不代表什么,人是會(huì)變的"——《重慶森林》。
    放在W3C規(guī)范和瀏覽器實(shí)現(xiàn)就是“了解一個(gè)屬性并不代表什么,瀏覽器實(shí)現(xiàn)都是有差異的”。

    W3C只是制定了規(guī)范,但是遵守程度和實(shí)現(xiàn)效果各個(gè)瀏覽器是有所差異的。當(dāng)你清楚你想實(shí)現(xiàn)什么效果而使用了對(duì)應(yīng)的屬性卻發(fā)現(xiàn)不起作用,那么很可能是瀏覽器的差異造成的。比如上面提到的flex縮寫(xiě),IE10的實(shí)現(xiàn)是不符合規(guī)范的

    DeclarationWhat it should meanWhat it means in IE 10
    (no flex declaration)flex: 0 1 autoflex: 0 0 auto
    flex: 1flex: 1 1 0%flex: 1 0 0px
    flex: autoflex: 1 1 autoflex: 1 0 auto
    flex: initialflex: 0 1 autoflex: 0 0 auto

    另外一個(gè)可能不常見(jiàn)但也能體現(xiàn)瀏覽器差異的是,嵌套的彈性容器的baseline不作為其他彈性子元素的對(duì)齊參考(可以在Firefox戳例子看看)。

    “當(dāng)你在構(gòu)建頁(yè)面的時(shí)候使用了flexbox但是發(fā)現(xiàn)他并沒(méi)有出現(xiàn)你預(yù)想的效果,可以在這里找到答案”——flexbugs

    關(guān)于flex.css

    flex.css就是對(duì)flex布局的一種封裝,通過(guò)簡(jiǎn)潔的屬性設(shè)置就能使得它完美的運(yùn)行在移動(dòng)端的各種瀏覽器,甚至能運(yùn)行在ie10+的各種PC端瀏覽器中。是一種類(lèi)似于標(biāo)簽屬性聲明的方式,指定flex屬性。

    <!-- 設(shè)置主軸方向 --> <div class="flexbox" flex="dir: top"> ... </div>復(fù)制代碼flex.css htmlcss
    dir: topflex-direction: cloumn
    main: centerjustify-content: center
    cross: topalign-items: flex-start

    試驗(yàn)flex布局的工具網(wǎng)站: flexbox playground and code generator

    參考

  • W3C flexbox
  • flex.css快速入門(mén),極速布局
  • flexbugs
  • 使用彈性盒子進(jìn)行高級(jí)布局
  • Flex 布局教程:語(yǔ)法篇
  • by DDun

    總結(jié)

    以上是生活随笔為你收集整理的一起从头学习Flex的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。