一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

響應(yīng)式設(shè)計(jì)的未來(lái)Flexbox

 quasiceo 2016-11-21

響應(yīng)式設(shè)計(jì)的未來(lái)——Flexbox

作者:大漠 日期:2013-04-28 點(diǎn)擊:3690

本文由大漠根據(jù)Ben Gremillion的《Responsive Design of the Future with Flexbox》所譯,整個(gè)譯文帶有我們自己的理解與思想,如果譯得不好或不對(duì)之處還請(qǐng)同行朋友指點(diǎn)。如需轉(zhuǎn)載此譯文,需注明英文出處:http://blog./responsive-design-of-the-future-with-flexbox,以及作者相關(guān)信息

——作者:Ben Gremillion

——譯者:大漠

在CSS中,浮動(dòng)幾乎代替了表格用來(lái)服務(wù)于布局,做為替身,比表格好用得多。但他們?nèi)匀挥邢蕖,F(xiàn)在有一個(gè)建議的解決方案稱(chēng)為CSS Flexible Box布局模塊,一般稱(chēng)為Flexbox。

Flexbox是CSS3推薦方法,用來(lái)幫助設(shè)計(jì)師更好的控制頁(yè)面的元素,在沒(méi)有比較好的解決方案之前,F(xiàn)lexbox要比其他現(xiàn)代布局方案要更強(qiáng)。

真的,我們?nèi)匀粵](méi)有在使用,因?yàn)镕lexbox支持至今還是受到限制的。但當(dāng)Flexbox得到瀏覽器友好支持的時(shí)候,加上媒體查詢(xún)的彈性布局會(huì)使Web設(shè)計(jì)師在Web布局上帶來(lái)革命性的變化。

CSS的痛楚

在寫(xiě)這篇教程時(shí),支持Flexbox的瀏覽器還是有限的。Chrome瀏覽器需要添加其自身的前綴“-webkit-”才能識(shí)別。其他的Webkit內(nèi)核瀏覽器,特別是移動(dòng)端的Safari和Android瀏覽支持都是僅僅有限的。而微軟IE只有IE10。不過(guò)這個(gè)Flexbox規(guī)范本身是在不斷變化,在過(guò)去的幾年里看到有關(guān)于他的許多變化。但隨著規(guī)范的定案和瀏覽器后期的開(kāi)發(fā),F(xiàn)lexbox終將成為一個(gè)很重要的屬性——用于設(shè)計(jì)上的布局。下面主要介紹它在響應(yīng)式設(shè)計(jì)中應(yīng)用。

容器(Containers)

一個(gè)Flexbox布局需要?jiǎng)?chuàng)建一個(gè)包含元素的容器,比如一個(gè)“<div>”,用來(lái)包裹一些項(xiàng)目。最基本的,F(xiàn)lexbox會(huì)讓其伸縮項(xiàng)目放在一個(gè)線(xiàn)上(主線(xiàn)、側(cè)線(xiàn)),不需要修改HTML結(jié)構(gòu)就能實(shí)現(xiàn)其同一基線(xiàn)上的任意擺放。如下面的示例:

<div>
<p>1</p>
<p>2</p>
<p>3</p>
</div>

響應(yīng)式設(shè)計(jì)的未來(lái)——Flexbox

在上面的示例中,三個(gè)伸縮項(xiàng)目可以通過(guò)“flex-direction”屬性使用其在伸縮容器中放置在第一和最后,也可以是水平或垂直擺放。在一個(gè)web頁(yè)面中,這意味著,在不改變HTML結(jié)構(gòu)情況之下整個(gè)布局可能會(huì)重安排。這將是一個(gè)名副其實(shí)的響應(yīng)式設(shè)計(jì)。

當(dāng)使用“display:block”時(shí)元素變成塊形式垂直擺放(在不浮動(dòng)情況之下),“display:inline”會(huì)讓元素包裹文本保持在同一行,而“display:flex”可以讓設(shè)計(jì)師改變方向、順序、對(duì)齊方式和間距。從列表布局角度出處,F(xiàn)lexbox布局適用于任何系列的產(chǎn)品。Flexbox可用的用途包括:

  1. 快速調(diào)整列、頁(yè)眉、頁(yè)腳和側(cè)邊欄位置
  2. 自動(dòng)計(jì)算導(dǎo)航間距
  3. 意味著更少的HTML使用CSS實(shí)現(xiàn)更多的布局
  4. 鑒于隨機(jī)物品在同一個(gè)系列,使用.important在頂部隨意移動(dòng)顯示。

最重要的是要注意Flexbox對(duì)設(shè)計(jì)的視覺(jué)風(fēng)格的影響。重新排列元素在屏幕上顯示的次序并不會(huì)影響他們的HTML結(jié)構(gòu)與Javascript的框架或屏幕閱讀器的閱讀。

對(duì)齊(ALIGNMENT)

除了方向,伸縮項(xiàng)目有可能會(huì)推到伸縮容器的開(kāi)始位置(全部靠左)、結(jié)束位置(全部靠右)、居中以及有一個(gè)的間距??梢栽谏炜s容器上添加“justify-content”屬性來(lái)控制伸縮項(xiàng)目之間對(duì)齊方式:開(kāi)始、結(jié)束等。

響應(yīng)式設(shè)計(jì)的未來(lái)——Flexbox

上圖在伸縮項(xiàng)目排列中隱含的線(xiàn)稱(chēng)為“主軸(main axis)”。這里的示例讓導(dǎo)航的鏈接沿著主軸線(xiàn)(顯示的黑線(xiàn)),根據(jù)需要自動(dòng)改變空間。

每個(gè)主軸都有一個(gè)方向(flex-direction)和一個(gè)流(flex-fow):水平方向的有向左或向右(row或row-reverse);垂直方向的有向下和向上(column和column-reverse)。上面例子中的第一個(gè)設(shè)置了flex-row為row,意思是“flex-start”讓伸縮項(xiàng)目向左邊推。當(dāng)flex-row設(shè)置為“row-reverse”時(shí),像最后一個(gè)示例所示,“flex-start”推到伸縮容器最右邊。

包裹(WRAPPING)

當(dāng)一系列的伸縮項(xiàng)目到達(dá)伸縮容器的終點(diǎn)位置時(shí),可以讓伸縮項(xiàng)目在一行顯示或者多行顯示,你就傳統(tǒng)的內(nèi)聯(lián)元素一樣。

響應(yīng)式設(shè)計(jì)的未來(lái)——Flexbox

上面的屬性應(yīng)用到伸縮容器上。其他的適用于每個(gè)伸縮項(xiàng)目。

指序(ORDER)

最后一個(gè)主要屬性(有關(guān)于響應(yīng)式設(shè)計(jì)方面)用來(lái)控制元素出現(xiàn)的精確順序。

響應(yīng)式設(shè)計(jì)的未來(lái)——Flexbox

默認(rèn)情況之下,伸縮容器中的每一個(gè)伸縮項(xiàng)目都有一個(gè)“order:0”屬性。給其中一個(gè)伸縮項(xiàng)目設(shè)置“order:1”,會(huì)讓這個(gè)伸縮項(xiàng)目沿主軸向右(側(cè)軸向下)推動(dòng)。如果設(shè)置一個(gè)伸縮項(xiàng)目的order值小于0,例如:“order:-1”,會(huì)讓這個(gè)伸縮項(xiàng)目沿主軸向左(側(cè)軸向上)推動(dòng)。

Flexbox的側(cè)軸具有和主軸一樣的屬性功能。到目前為止,影響響應(yīng)式設(shè)計(jì)的主要屬性是“flex-direction”、“flexbox-justify”和order。

Flexbox和Media Queries

響應(yīng)式設(shè)計(jì)需要在不同屏幕尺寸具有不同的布局。不幸的是,一些布局要求HTML具有一個(gè)特定的方式,比如說(shuō)圖片在標(biāo)題前,或者圖片在標(biāo)題后。Flexbox可以通過(guò)CSS來(lái)控制更多的移位,這樣網(wǎng)頁(yè)設(shè)計(jì)師就可以通過(guò)媒體查詢(xún)?cè)诓煌钠聊淮笮≈袘?yīng)用不同的配置。

這里有一個(gè)挑戰(zhàn)性的案例:一個(gè)新聞網(wǎng)站想要展示其最新的文章片段。每個(gè)片段都有一個(gè)縮略圖和不同數(shù)量的文本。需要有三種布局風(fēng)格:桌面寬屏;筆記本的中等大小屏和智能手機(jī)的320px寬。可訪(fǎng)問(wèn)性,它必須保持導(dǎo)航在或者接近網(wǎng)站的標(biāo)題,但出版本商想盡可能的突出大標(biāo)題顯示。

響應(yīng)式設(shè)計(jì)的未來(lái)——Flexbox

HTML結(jié)構(gòu)

為了結(jié)構(gòu)的清晰,這個(gè)示例使用了簡(jiǎn)單的HTML結(jié)構(gòu):

<html>
<body>
<div class="wrapper">
<header>
<img src="images/trendy-logo.png" />
</header>
<nav>
<a href="#">home</a>
<a href="#">about</a>
<a href="#">other</a>
<a href="#">contact</a>
</nav>
<section>
<article>
<figure><img src="images/box.png" /></figure>
<div>
<h2>Sample headline goes here</h2>
<p>Sample text sample text sample text sample text sample text sample text sample text </p>
</div>
</article>
<article></article>
</section>
</div>
</body>
</html>

有一些重要的事項(xiàng):

  1. 一個(gè)<div>容器包裹了整個(gè)頁(yè)面。
  2. 標(biāo)題和導(dǎo)航鏈接在文章列表區(qū)域<section>前面
  3. 每一篇文章都是一個(gè)獨(dú)立的章節(jié)放在<section>里面。

Media Queries條件

我們?cè)O(shè)置了三個(gè)響應(yīng)式斷點(diǎn):窄屏、中屏和寬屏。

@media only screen and (max-width: 480px) {
… /* 窄屏 */
}
@media only screen and (min-width: 481px) and (max-width: 960px) {
… /* 中屏 */
}
@media only screen and (min-width: 961px) {
… /* 寬屏 */
}

窄屏:交替圖標(biāo)和重排結(jié)構(gòu)

1、首先指定每個(gè)“<article>”元素作為伸縮容器。在這些例子中,我們使用“-webkit-”前綴來(lái)支持Chrome。

article {
display: -webkit-flex;
-webkit-align-items: start;
}

2、接下來(lái)為所有的文章列表設(shè)置方向:

article:nth-child(odd) {
-webkit-flex-direction: row;
}
article:nth-child(even) {
-webkit-flex-direction: row-reverse;
}

3、把內(nèi)容優(yōu)先于導(dǎo)航顯示,我們需要把“.wrapper”設(shè)置為伸縮容器,并設(shè)置伸縮流的方向?yàn)椤癱olumn”:

.wrapper {
display: -webkit-flex;
-webkit-flex-direction: column;
}

4、最后,把<nav>元素也設(shè)置成伸縮容器,使用“justify-content”屬性設(shè)置導(dǎo)航鏈接之間的間距工:

nav {
-webkit-order: 999;
display: -webkit-flex;
-webkit-justify-content: space-around;
}

設(shè)置了“order”為999是為了過(guò)度的布局,而沒(méi)有設(shè)置二到八這樣的數(shù)值,其實(shí)任何正數(shù)都可以工作。但設(shè)置999是為了應(yīng)對(duì)未來(lái)order的變化,999是一個(gè)安全的數(shù)值,但有一些網(wǎng)站將會(huì)超過(guò)導(dǎo)航998節(jié)。

中屏:一個(gè)縱列

瀏覽器在480px到800px之間寬,可能有足夠的高度連續(xù)展示文章列表供用戶(hù)閱讀。這個(gè)布局,我們要做到的就是這一點(diǎn):

1、像窄屏的布局一樣,將導(dǎo)航欄變成彈性布局,并給導(dǎo)航鏈接留有一定的空間:

nav {
display: -webkit-flex;
-webkit-flex-direction: row;
-webkit-justify-content: space-between;
}

2、Flexbox布局不需要花哨,這個(gè)例子演示的了如何讓Flexbox制作一個(gè)等寬列,可用來(lái)代替以前那種依靠浮動(dòng)和清除浮動(dòng)的布局:

article {
display: -webkit-flex;
-webkit-justify-content: start;
-webkit-flex-direction: row;
}

寬屏:使用額外的空間

寬屏的布局主要利用“.wrapper”伸縮容器的空間,把文章列表像tiling一樣的鋪置。

1、把“.wrapper”變成伸縮容器,將把導(dǎo)航放在左邊:

.wrapper {
display: -webkit-flex;
-webkit-flex-direction: row;
}

如果想把導(dǎo)航放在右邊,可以使用“row-reverse”來(lái)替代“row”。

2、標(biāo)題和導(dǎo)航疊加是個(gè)很棘手的事情,因?yàn)槲覀儼?.wrapper"變成了伸縮容器,同時(shí)也使標(biāo)題、導(dǎo)航和section的文章列表變成了水平展示。意思就是標(biāo)題、logo和左邊的導(dǎo)航疊加在一列中。

解決這樣的問(wèn)題,我們要有一點(diǎn)手法:使用一個(gè)負(fù)的margin-left和padding-top,將導(dǎo)航拉到logo的下面。

nav {
width: 25%;
margin-left: -50px;
}
nav a {
display: block;
padding: 10px 0;
}
nav a:first-child {
padding-top: 120px;
}

3、文章列表要像Tile一樣展示,需要給section設(shè)置成伸縮容器,然后縮小讓其放置在同一行

section {
display: -webkit-flex;
-webkit-flex-wrap: wrap;
-webkit-align-items: flex-start;
}
article {
width: 180px;
margin: 10px;
}

結(jié)果:三種不同的布局,利用空間來(lái)實(shí)現(xiàn)響應(yīng)式布局是最好的。

下一步

雖然Flexbox布局還不能得到廣泛的支持,但后結(jié)隨著規(guī)范的落定和各大瀏覽器廠(chǎng)商的支持力度提高,F(xiàn)lexbox將會(huì)成為CSS布局的好工具。

譯者手語(yǔ):整個(gè)翻譯依照原文線(xiàn)路進(jìn)行,并在翻譯過(guò)程略加了個(gè)人對(duì)技術(shù)的理解。如果翻譯有不對(duì)之處,還煩請(qǐng)同行朋友指點(diǎn)。謝謝!

如需轉(zhuǎn)載煩請(qǐng)注明出處:

英文原文:http://blog./responsive-design-of-the-future-with-flexbox

中文譯文:http://www./css3/responsive-design-of-the-future-with-flexbox.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    欧美日韩国产午夜福利| 亚洲欧洲一区二区综合精品| 色婷婷久久五月中文字幕| 亚洲av专区在线观看| 久久热中文字幕在线视频| 人妻熟女欲求不满一区二区| 好吊日视频这里都是精品| 好吊视频一区二区在线| 欧美老太太性生活大片| 99视频精品免费视频播放| 五月婷婷六月丁香狠狠| 国内胖女人做爰视频有没有| 色一情一乱一区二区三区码| 麻豆一区二区三区精品视频| 国产精品视频一级香蕉| 久久婷婷综合色拍亚洲| 国产又粗又猛又黄又爽视频免费| 男人和女人黄 色大片| 在线免费不卡亚洲国产| 亚洲熟妇熟女久久精品 | av在线免费播放一区二区| 免费高清欧美一区二区视频| 欧美日韩国产黑人一区| 日韩精品一区二区三区含羞含羞草| 大尺度剧情国产在线视频| 久热这里只有精品九九| 好吊视频一区二区在线| 麻豆视传媒短视频免费观看| 日本高清不卡在线一区| 精品久久少妇激情视频| 日韩精品一级一区二区| 国产精品福利精品福利| 视频在线观看色一区二区| 白白操白白在线免费观看| 日韩高清一区二区三区四区| 色综合久久中文综合网| 日韩精品一区二区一牛| 欧美黄色成人真人视频| 日韩免费av一区二区三区| 日韩18一区二区三区| 激情图日韩精品中文字幕|