三種布局(盒模型,flex,grid)

一、布局方式

1、盒模型

盒模型由外而內(nèi)包括:邊距(margin)、邊框(border)、填充(padding)、內(nèi)容(content)。

盒模型整個在頁面中所占的地方是margin + border + padding + content。

盒模型有標(biāo)準(zhǔn)盒模型和IE的盒模型——通過css3屬性box-sizing設(shè)置

標(biāo)準(zhǔn)盒模型(W3C)content-box width=content;? ? ? ? ? ? ? 默認(rèn)模式

IE盒模型(IE)border-box width=content+padding+border

目前使用此屬性需要前綴如下:

-webkit-box-sizing: content-box;

-moz-box-sizing: content-box;

自己的理解:

.box {

/* box-sizing: border-box; */

float: left;

margin: 20px;

padding: 30px;

border: 10px solid rebeccapurple;

width: 300px;

height: 200px;

}

<div class="box">

這個是標(biāo)準(zhǔn)模型test 300+20+60? 380*280

這個是怪異模型test 300? 300*200

</div>

整個盒模型所占的位置就是content+border+padding+margin

而盒子的寬度對于標(biāo)準(zhǔn)來說,width=content;對于IE盒模型來說,就是width=content+border+padding;

2、flex布局

任何一個容器都可以為flex布局,行內(nèi)元素也可以使用flex布局

display: flex? ? ? ? ? ? ? ? display: inline-flex

webkit內(nèi)核瀏覽器,必須加上-webkit前綴? display:-webkit-flex;? ? float、clear和vertical-align屬性將失效。

flex彈性布局

display: flex | inline-flex

寬高不確定的情況下能夠指定對齊方式

display 屬性用來將父元素定義為 Flex 布局的容器,設(shè)置 display 值為display: flex容器對外表現(xiàn)為塊級元素;display: inline-flex容器對外表現(xiàn)為行內(nèi)元素,對內(nèi)兩者表現(xiàn)是一樣的。

Flex 布局的容器,我們有以下六個屬性可以設(shè)置的容器上:

flex-direction

flex-wrap

flex-flow

justify-content

align-items

align-content

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

row(默認(rèn)值):主軸在水平方向,起點在左側(cè),也就是我們常見的從左到右;

row-reverse:主軸在水平方向,起點在右側(cè);

column:主軸在垂直方向,起點在上沿;

column-reverse: 主軸在垂直方向,起點在下沿。

如圖1,圖2

圖1
圖2

flex-wrap: nowrap | wrap | wrap-reverse;

假設(shè)此時主軸是從左到右的水平方向:

nowrap(默認(rèn)):不換行;不管你有沒有對子元素設(shè)置寬度,都不會換行,只會對子元素的寬度進(jìn)行壓縮

wrap:換行,第一行在上面;會根據(jù)你設(shè)置的子元素寬度展示,如果超過會換行。

wrap-reverse:換行,第一行在下面。

如圖3

圖3

flex-flow: flex-direction | flex-wrap;

默認(rèn):? ? ? flex-flow: row nowrap;

justify-content 定義了項目在主軸上的對齊方式。

.container {

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

}

flex-start(默認(rèn)):與主軸的起點對齊;

flex-end:與主軸的終點對齊;

center:項目居中;

space-between:兩端對齊,項目之間的距離都相等;

space-around:每個項目的兩側(cè)間隔相等,所以項目與項目之間的間隔是項目與邊框之間間隔的兩倍。

如圖4

圖4

align-items 定義了項目在交叉軸上如何對齊。

.container {

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

}

flex-start:與交叉軸的起點對齊;

flex-end:與交叉軸的終點對齊;

center:居中對齊;

baseline:項目第一行文字的基線對齊;

stretch(默認(rèn)值):如果項目未設(shè)置高度或者為 auto,項目將占滿整個容器的高度

如圖5,圖6,圖7

圖5
圖6
圖7

align-content 定義了多根軸線的對齊方式,若此時主軸在水平方向,交叉軸在垂直方向,align-content 就可以理解為多行在垂直方向的對齊方式。項目排列只有一行時,該屬性不起作用。

.container {

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

}

flex-start:與交叉軸的起點對齊;

flex-end: 與交叉軸的終點對齊;

center:居中對齊;

space-between:與交叉軸兩端對齊,軸線之間的距離相等;

space-around:每根軸線兩側(cè)的間隔都相等,所以軸線與軸線之間的間隔是軸線與邊框之間間隔的兩倍;

stretch(默認(rèn)值):如果項目未設(shè)置高度或者為 auto,項目將占滿整個容器的高度。

----------------------------------------

對項目設(shè)置屬性,可以更靈活地控制 Flex 布局。以下六種屬性可以設(shè)置在項目上:

order

flex-grow

flex-shrink

flex-basis

flex

align-self

order

order 定義了項目的排列順序,默認(rèn)值為 0,數(shù)值越小,排列越靠前。

給哪個order設(shè)置了負(fù)值就排在最前面

flex-grow

flex-grow 定義了項目的放大比例,默認(rèn)為 0,也就是即使存在剩余空間,也不會放大。

如果所有項目的 flex-grow 都為 1,則所有項目平分剩余空間;如果其中某個項目的 flex-grow 為 2,其余項目的 flex-grow 為 1,則前者占據(jù)的剩余空間比其他項目多一倍。

flex-shrink

flex-shrink 定義了項目的縮小比例,默認(rèn)為 1,即當(dāng)空間不足時,項目會自動縮小。

如果所有項目的 flex-shrink 都為 1,當(dāng)空間不足時,所有項目都將等比縮小;如果其中一個項目的 flex-shrink 為 0,其余都為 1,當(dāng)空間不足時,flex-shrink 為 0 的不縮小。

負(fù)值對該屬性無效。

flex-basis

flex-basis 定義了在分配多余的空間之前,項目占據(jù)的主軸空間,默認(rèn)值為 auto,即項目原來的大小。瀏覽器會根據(jù)這個屬性來計算主軸是否有多余的空間。

flex-basis 的設(shè)置跟 width 或 height 一樣,可以是像素,也可以是百分比。設(shè)置了 flex-basis 之后,它的優(yōu)先級比 width 或 height 高。

flex

flex 屬性是 flex-grow、flex-shrink、flex-basis 的縮寫,默認(rèn)值是 0 1 auto,后兩個屬性可選。

該屬性有兩個快捷值:auto(1 1 auto)和 none(0 0 auto)。auto 代表在需要的時候可以拉伸也可以收縮,none 表示既不能拉伸也不能收縮。

.item {

? ? flex: auto | none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]

}

align-self 用來定義單個項目與其他項目不一樣的對齊方式,可以覆蓋 align-items 屬性。默認(rèn)屬性值是 auto,即繼承父元素的 align-items 屬性值。當(dāng)沒有父元素時,它的表現(xiàn)等同于 stretch。

align-self 的六個可能屬性值,除了 auto 之外,其他的表現(xiàn)和 align-items 一樣。

3、grid布局

它將網(wǎng)頁劃分成一個個網(wǎng)格,可以任意組合不同的網(wǎng)格,做出各種各樣的布局。

Grid 布局與?Flex 布局有一定的相似性,都可以指定容器內(nèi)部多個項目的位置。 。

Flex 布局是軸線布局,只能指定"項目"針對軸線的位置,可以看作是一維布局。

Grid 布局則是將容器劃分成"行"和"列",產(chǎn)生單元格,然后指定"項目所在"的單元格,可以看作是二維布局。

注意:項目只能是容器的頂層子元素,不包含項目的子元素,比如上面代碼的<p>元素就不是項目。Grid 布局只對項目生效。

設(shè)為網(wǎng)格布局以后,容器子元素(項目)的float、display: inline-block、display: table-cell、vertical-align和column-*等設(shè)置都將失效。

.container {

? ? width: 500px;

? ? height: 500px;

? ? display: grid;

? ? grid-template-columns: 40px 50px auto 50px 40px;

? ? grid-template-rows: 25% 100px auto;

}

.container div {

? ? border: 1px solid #000;

}

通過grid-template-columns和grid-template-rows兩個屬性可以看出布局是三行五列

如下圖


grid內(nèi)容太多,不怎么好理解,后續(xù)再更新!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內(nèi)容

  • H5移動端知識點總結(jié) 閱讀目錄 移動開發(fā)基本知識點 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,601評論 0 26
  • 移動開發(fā)基本知識點 一.使用rem作為單位 html { font-size: 100px; } @media(m...
    橫沖直撞666閱讀 3,504評論 0 6
  • 一、Flex 布局是什么? CSS3引入了一種新的布局模式——Flexbox布局,即伸縮盒模型布局(Flexibl...
    俠客有情劍無情QAQ閱讀 5,777評論 7 94
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 13,783評論 1 92
  • 一、什么是Flex布局? Flex是Flexible Box的縮寫,意為"彈性布局",用來為盒狀模型提供最大的靈活...
    shadow123閱讀 791評論 0 2