成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

給萌新的Flexbox簡易入門教程

轉(zhuǎn)載請注明出處:葡萄城官網(wǎng),葡萄城為開發(fā)者提供專業(yè)的開發(fā)工具、解決方案和服務(wù),賦能開發(fā)者。
【年末促銷】葡萄城 2018 歲末福利火熱放送中
原文出處:https://www.sitepoint.com/flexbox-css-flexible-box-layout/

專注于為中小企業(yè)提供網(wǎng)站設(shè)計制作、網(wǎng)站制作服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)和田縣免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

近幾年,CSS領(lǐng)域出現(xiàn)了一些復(fù)雜的專用布局工具,用以代替原有的諸如使用表格、浮動和絕對定位之類的各種變通方案。Flexbox,或者說是彈性盒子布局模塊(Flexible Box Layout Module)是這些新布局工具中的第一個,接著是CSS網(wǎng)格布局模塊(CSS Grid Layout Module)。我們會在本文給出一個易于理解的flexbox入門介紹。

隨著CSS網(wǎng)格布局的引入,你可能會問flexbox布局是否真的還有必要。雖然它們所能做的事情有一些重疊,但其各自在CSS布局中有著非常特別的目的。一般來說,flexbox在一維場景(比如,一串類似的元素)下有最佳應(yīng)用,而網(wǎng)格是二維場景下理想的布局方案(例如整個頁面的元素)。

即便如此,flexbox仍可以用于整個頁面的布局,這樣它能為那些還不支持網(wǎng)格布局的瀏覽器提供合適的兼容處理。(必須承認,網(wǎng)格布局正在大多數(shù)現(xiàn)代瀏覽器中快速得到支持,不過對flexbox的支持仍然更為廣泛,所以如果你想讓你的布局在稍微老舊的瀏覽器中也生效,使用flexbox作為網(wǎng)格布局的降級方案是很容易的)。

使用Flexbox的好處

flexbox的一些好處是:

  • 頁面元素能被任意方向地放置(靠左、靠右、從上往下甚至從下往上)
  • 布局內(nèi)容的可視順序能夠被反轉(zhuǎn)或重排
  • 元素大小能“彈性”適應(yīng)可用空間,并根據(jù)容器或者兄弟元素進行相應(yīng)地對齊
  • 能輕松實現(xiàn)等列寬布局(與每一列里面的內(nèi)容無關(guān))

為了闡述其多樣的屬性和可能性,讓我們假設(shè)下面有這樣的布局用例:

<div class="example">
  <header>
    header content here
  </header>
  <main class="main">
    <nav>
      nav content here
    </nav>
    <div class="content">
      main content here
    </div>
    <aside>
      aside content here
    </aside>
  </main>
  <footer>
    footer content here
  </footer>
</div>

首先,是把元素一起放進.main里,比如,&lt;nav&gt;&lt;aside&gt;。如果沒有flexbox,我們可能會把三個元素全部進行浮動,但想讓它按理想的方式工作顯得并不直觀。而且,按傳統(tǒng)的方式做這件事會出現(xiàn)一個眾所周知的問題:每一列僅僅和它的內(nèi)容一樣高。因此,你可能需要把三個元素都設(shè)置為統(tǒng)一的高度,或者使用某種黑科技。

讓flexbox來救場吧。

讓我們Flex

flexbox的要點是出現(xiàn)在display屬性上的flex值,它需要被設(shè)置在容器元素上。如此設(shè)置會讓它的子元素變成“彈性項目(flex item)”。這些彈性項目擁有一些易于使用的默認屬性。比如,它們被緊挨著放置,那些沒有特別指明寬度的元素自動占滿了剩余的空間。

因此,如果你給.main設(shè)置了display:flex,它的子元素.content就被自動擠在&lt;nav&gt;&lt;aside&gt;之間。不需要再多余的計算,多么方便是吧?作為附加獎賞,所有三個元素神奇地擁有了相同的高度。

.main {
  display: flex;
}

請查看下面的例子,包含了所有的細節(jié):flexbox-demo-1。

項的順序:Flebox的order屬性

另外一個flexbox的能力,是能夠輕松改變元素的顯示順序。讓我們假設(shè)你為一個客戶制作了上面的布局,而她現(xiàn)在想要.content出現(xiàn)在&lt;nav&gt;之前。

通常,你需要深入到HTML源碼中去,在那里改變元素的順序。而有了Flexbox,你可以完全使用CSS完成這項任務(wù)。只需把.contentorder屬性設(shè)置為-1,那么這一列就會出現(xiàn)在前面,這本例就是最左邊。

.main {
  display: flex;
}

.content {
  order: -1;
}

本例中,你不需要改變其他列的order。例子在flexbox-demo-2。

如果你傾向于顯式地為每一列指定order,你可以將.contentorder設(shè)為1,把&lt;nav&gt;order設(shè)為2,把&lt;aside&gt;的設(shè)為3。

HTML源碼獨立于CSS的Flexbox樣式

但你的客戶并不滿足。她想讓&lt;footer&gt;成為頁面的第一個元素,顯示在&lt;header&gt;之前。那好,同樣的,flexbox是你的朋友(雖然像在此例中,可能你得跟你的客戶好好談?wù)?,而不是跟隨指示)。因為你不僅要重排列內(nèi)部元素,還要重排外部的,display:flex規(guī)則將被設(shè)置在&lt;div class="example"&gt;之上。注意這里是如何在頁面中嵌套使用flex容器來達到你想要的效果的。

因為&lt;header&gt;,&lt;main class="main"&gt;&lt;footer&gt;相互堆疊著,你需要首先設(shè)置一個垂直上下文,它能夠通過設(shè)置flex-direction:column來快速完成。還有,&lt;footer&gt;order被設(shè)置為-1,如此一來它就出現(xiàn)在頁面的最上頭。就這么簡單。

.example {
  display: flex;
  flex-direction: column;
}

footer {
  order: -1;
}

所以,如果你想把一行元素修改為一列,或者相反,你可以使用flex-direction屬性,并設(shè)置它相應(yīng)地為columnrowrow是默認值)。

完整的例子在flexbox-demo-3。

然而,強大的能力也到來了更多的責任:謹記,一些用戶可能會使用鍵盤來導(dǎo)航你的基于flexbox的網(wǎng)站,如果你HTML源碼中元素的順序和屏幕上顯示的有所出入,那么無障礙訪問的能力就成為需要認真對待的問題。如果想了解得更多,請不要錯過HTML源碼順序 vs CSS顯示順序,網(wǎng)站無障礙訪問和易用性的專家Adrian Roselli針對這個問題給出了深入討論。

如何在Flexbox中對齊子項

Flexbox能非常直觀地處理子項的水平對齊和垂直對齊。

你可以使用align-items對flex容器中的所有子項設(shè)置統(tǒng)一的對齊。如果你想給個別元素設(shè)置不同的對齊方式,使用align-self。元素的對齊方式跟它所在父容器的flex-direction有關(guān)。如果它的值是row(意味著元素水平排列),對齊方式是指在垂直軸上。如果flex-direction被設(shè)置為column(意味著元素垂直排列),對齊方式就是指在水平軸上。

例如,你讓一些元素在容器中分別有不同的對齊方式,你需要:

  • 設(shè)置每個元素的align-self屬性為合適的值??赡艿闹涤校?code>center,stretch(元素撐滿它的容器),flex-startflex-endbaseline(元素被放置在父容器的baseline上)
  • 把容器元素設(shè)置為display:flex
  • 最后,注意父容器的flex-direction屬性,因為它關(guān)系到子元素的對齊方式。
.example {
  display: flex;
  flex-direction: column;
}

.red {
  align-self: center;
}

.blue {
  align-self: flex-start;
}

.pink {
  align-self: flex-end;
}

試試在下面的例子中,把父容器的flex-directionrowcolumn之間切換,看看它們引起的實時變化。

例子flexbox-demo-4.html。

如果想要容器中所有的元素有統(tǒng)一的對齊方式,你可以在容器上使用align-items。可以的值有center,flex-start,flex-end,stretch(默認值:子項被拉伸以適應(yīng)它們的容器)和baseline(子項被放置在父容器的baseline上)。

.example {
  display: flex;
  align-items: center;
}

像往常一樣,試著把父容器的flex-directionrowcolumn之間切換,看看它們?nèi)绾斡绊懼阍O(shè)置align-items值時所發(fā)生的作用。

例子flexbox-demo-5.html

在Flexbox里兩端對齊

另一個控制對齊的屬性是justify-content,當你想讓多個元素等分空間時非常有用。

可接受的值有:centerflex-start,flex-end, space-between(元素利用主軸之間的空間而排布)和space-around(元素利用主軸之前、之間和之后的空間而排布)。

例如,在之前你一直使用的簡單HTML模板里,你可以在&lt;main&gt;里找到三個元素:&lt;nav&gt;,.content&lt;aside&gt;。之前,它們都被擠在頁面的左邊。如果你想讓它們之間有一些空間,但是不讓第一個元素的左邊有空間,也不想讓最后一個元素的右邊有空間,你可以把.main(即它們的父容器)里的justify-content設(shè)置為space-between。

.main {
  display: flex;
  justify-content: space-between;
}

也試一下設(shè)置為space-around,觀察不同的結(jié)果。例子在flexbox-demo-6。

在上面的例子中,我同樣把&lt;header&gt;中的文字水平和垂直對齊了,分別是把justify-content(水平居中)和align-items(垂直居中)都設(shè)置為center。

header {
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

Flexbox中彈性子項的大小

使用flex屬性,你能夠?qū)φ說lex容器中其他元素來控制彈性子項的大小。

這個屬性是以下獨立屬性的簡寫:

  • flex-grow:一個數(shù)字,指明元素如何相對其他flex項來拉伸
  • flex-shrink:一個數(shù)字,指明元素如何相對其他flex項來收縮
  • flex-basis:元素的長度??山邮艿闹涤校?code>auto,inherit或者一個數(shù)字后面緊跟著%,pxem或其他長度單位。

例如,想得到三個等寬的列,只需給每一列設(shè)置flex:1,其他什么都不用做:

nav, aside, .content {
  flex: 1;
}

如果你需要.content占據(jù)&lt;nav&gt;&lt;aside&gt;的兩倍寬,那么就把.content設(shè)為flex:2,讓其他兩個為1。

例子在flexbox-demo-7.html。

那僅僅是對flex屬性最簡單的應(yīng)用。同樣可以設(shè)置flex-grow,flex-shrinkflex-basis這些值,不過那超出本文的話題范圍了。

進一步的資源

如果你準備好繼續(xù)前進,并想學(xué)著精通flexbox的更多東西,請查看下面的資源:

  • Flexbox SitePoint上Guy Routledge制作的一個付費課程
  • Building Mega Menus with Flexbox
  • How 3 Modern Tools are Using Flexbox Grids
  • Make Forms Fun with Flexbox.

總結(jié)

如你所見,如果我們想控制元素在網(wǎng)頁中的布局,flexbox可以讓我們的生活更加輕松。它非常穩(wěn)固和可靠,讓以前那些我們每天使用的諸如使
讓容器坍縮之類的奇技淫巧,成為了過去。

像我們說的,如今,在針對整個頁面進行布局時,CSS網(wǎng)格是更好的方案,但我們?nèi)匀恢档萌チ私鈌lexbox能做的那些事情。flexbox的最佳應(yīng)用場景,體現(xiàn)在對元素的一維排列上,但如果有需要,它也能在稍老舊的瀏覽器中,為CSS網(wǎng)格布局提供方便的替代方案。

新聞標題:給萌新的Flexbox簡易入門教程
瀏覽地址:http://jinyejixie.com/article42/jjjdec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、品牌網(wǎng)站制作微信小程序、網(wǎng)站導(dǎo)航、響應(yīng)式網(wǎng)站全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
泌阳县| 祁东县| 铜山县| 荣成市| 理塘县| 越西县| 鹤山市| 沈丘县| 丹东市| 福海县| 比如县| 永修县| 开鲁县| 平南县| 呼和浩特市| 大名县| 凤冈县| 新乐市| 禹州市| 元阳县| 桦甸市| 宜昌市| 德格县| 岫岩| 洮南市| 花垣县| 神木县| 河东区| 宣化县| 崇礼县| 玛多县| 陇川县| 资阳市| 荥阳市| 高密市| 静安区| 翁牛特旗| 通州市| 时尚| 商南县| 平和县|