css常用布局總結(jié)

一揣苏、左右布局

1.table:table的li實現(xiàn)

實現(xiàn)原理:

  table標簽是能夠具有實現(xiàn)左右布局的屬性,也是我們項目中使用最多的峻呕。table布局也是頁面布局中使用的最早的布局方式拴驮,隨著前端技術(shù)的發(fā)展,table布局由于自身的局限性逐漸被div布局取代凳寺。

查看代碼(主要代碼):


代碼說明:

tr表示一行鸭津,td表示一列,先實現(xiàn)行再實現(xiàn)列肠缨,所以tr中可以添加td實現(xiàn)盒子的左右布局逆趋。另:由于table布局由于性能問題已經(jīng)逐漸被放棄使用,所以提供了table的li標簽實現(xiàn)晒奕,供參考闻书。

2.inline-block

實現(xiàn)原理:

display:inline-block屬性是介于行級元素(display:inline)和塊級元素(display:block)之間的屬性名斟,它可以像行級元素一樣水平布局,也可以像塊級元素設(shè)置寬高屬性魄眉,所以使用它可以進行左右布局砰盐。另:它不支持ie6、7瀏覽器坑律,請注意岩梳,但是可以使用inline進行hack處理。

查看代碼:


3.float實現(xiàn)左右布局


實現(xiàn)原理:

float屬性是css中關(guān)于布局的一個關(guān)鍵屬性晃择,其意為將該塊狀區(qū)域脫離父級標簽的文檔流冀值,left屬性值使該區(qū)域向父級標簽區(qū)域的左側(cè)邊界放置,right屬性值使該區(qū)域塊向父級標簽的右側(cè)邊界放置宫屠,如是利用該屬性可以實現(xiàn)左右布局列疗。 float屬性屬于布局屬性,其中有著很多重要應(yīng)用浪蹂。

float屬性的三個特性為:

a抵栈、包裹性:可以按照區(qū)域塊中子元素的實際寬度進行包裹;

b坤次、破壞性:float區(qū)域塊不會被父級區(qū)域塊包裹古劲,造成前端常見的高度塌陷問題,解決辦法是清除浮動浙踢;

c绢慢、占位性(個人稱呼),浮動區(qū)域塊雖然是脫離了父級區(qū)域洛波,但是它是要占用一定的正常流區(qū)域的胰舆,即如果不清除浮動,我們會看到它會占用它后面的同級元素(如果沒有會占用它父級后面的同級元素蹬挤,如果還是沒有則向上追溯)的區(qū)域缚窿,影響同級元素,所以常見清浮動焰扳。

查看代碼:


代碼說明:

float布局部分和inline-block布局部分比較相似倦零,但是其中最主要的區(qū)別是:將

.c1{height:60px}

以后就會發(fā)現(xiàn)float布局對于后面節(jié)點的布局采用交錯式的布局,inline-block采用正常式的布局吨悍。

二扫茅、左中右布局

1.?float+margin


注意:中間的middle元素是content的最后一個元素

2.?float+absolute


三、水平居中

1. text-align:center

.parent {width: 500px;height: 100px;border: 1px solid #ddd;text-align: center;}.child {display: inline-block;width: 100px;}<div class="parent"><span class="child">123</span></div>

該方法可以水平居中塊級元素中的行內(nèi)元素育瓜,如`inline`葫隙,`inline-block`;

對于塊級元素中的塊級元素躏仇,只會讓子元素中的內(nèi)容居中恋脚,子元素仍然是左對齊腺办,如上述例子中span改成`display:block`,則child會左對齊糟描,其中的文字會相對于span居中怀喉。

2. margin:0 auto

.parent {width: 500px;height: 100px;border: 1px solid #ddd;}.child {display: block;margin:0 auto;width: 100px;}<div class="parent"><span class="child">123</span></div>

對于已知width的塊級元素,可以用`margin:0 auto`來設(shè)置水平居中船响。


四躬拢、垂直居中

1. line-height

對于已知height的單行文本,設(shè)置line-height=height的值灿意,即可實現(xiàn)垂直居中估灿。

2. vertical-align: middle

模擬成表格屬性來實現(xiàn)居中崇呵。

.parent {display: table-cell; //模擬表格屬性vertical-align: middle;text-align: center;width: 500px;height: 100px;border: 1px solid #ddd;}.child {display: inline-block;width: 100px;}<div class="parent"><span class="child">123</span></div>

3. position:absolute + translate

對于height和width未知的元素可以采用該方法

.parent {position: relative;width: 500px;height: 100px;border: 1px solid #ddd;}.child {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);background: #ddd;}<div class="parent"><span class="child">123<br>123<br>123</span></div>

4. flex布局

對于多個元素可以采用該布局方案缤剧,這應(yīng)該是目前為止用的最省心順手的方案了吧,這個可以參考阮一峰老師的文章(http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool)域慷,上面寫得很詳細了荒辕,這里簡單舉個例子:

.parent {display: flex;// 左右對齊 flex-start | flex-end | center | space-between | space-aroundjustify-content: center;// 上下對齊 flex-start | flex-end | center | baseline | stretchalign-items: center;width: 500px;height: 100px;border: 1px solid #ddd;}.child {width: 30px;height: 30px;background: #ddd;}<div class="parent"><div class="child">1</div><div class="child">2</div><div class="child">3</div></div>

五、布局技巧


position屬性

1.說明

position屬性和float一樣犹褒,也是一種使元素脫離文檔流的屬性

position: static | relative | absolute | fixed |inherit

absolute?:絕對定位抵窒;脫離文檔流的布局,遺留下來的空間由后面的元素填充叠骑。定位的起始位置為最近的父元素(postion不為static)李皇,否則為Body文檔本身。

relative?:相對定位宙枷;文檔流的布局不變掉房,只改變自身的位置,在文檔流原先的位置遺留空白區(qū)域慰丛。定位的起始位置為此元素原先在文檔流的位置卓囚。

fixed?:固定定位;類似于absolute诅病,但不隨著滾動條的移動而改變位置哪亿。

static?:默認值;默認布局贤笆。

輔助屬性:

position屬性只是使元素脫離文檔流蝇棉,要想此元素能按照希望的位置顯示,就需要使用下面的屬性(position:static不支持這些):

①left : 表示向元素的左邊插入多少像素芥永,使元素向右移動多少像素篡殷。

②right :表示向元素的右邊插入多少像素,使元素向左移動多少像素恤左。

③top :表示向元素的上方插入多少像素贴唇,使元素向下移動多少像素搀绣。

④bottom :表示向元素的下方插入多少像素,使元素向上移動多少像素戳气。

上面屬性的值可以為負链患,單位:px

2.對于四種定位屬性的解釋

對于以下代碼

<div? style="border: solid 5px #333; width:300px;"><div? id="redBox" style="height: 100px; width: 100px; background-color: Red;float:right; "></div><div id="greenBox" style="height: 120px; width: 100px; background-color: Green;"></div><div id="yellowBox" style="height: 100px; width: 100px; background-color: Yellow;"></div></div>

(static作為默認布局,不作解釋)

2.1使用relative屬性

相對定位瓶您;文檔流的布局不變麻捻,只改變自身位置,在文檔流原先的位置遺留空白區(qū)域呀袱。定位的起始位置為此元素原先在文檔流的位置贸毕,可以覆蓋其他元素。

然后將greenBox設(shè)置為position:relative; left:180px ;top:10px;會出現(xiàn)圖二


? ? ? ? ? ? ? ? ?   圖一

        圖二??

        圖三


2.2使用absolute屬性

絕對定位夜赵;脫離文檔流的布局明棍,遺留下來的空間由后面的元素填充。定位的起始位置為最近的父元素(postion不為static)寇僧,否則為Body文檔本身摊腋。

然后將greenBox設(shè)置為position:absolute; left:180px ;top:10px;會出現(xiàn)圖3


這里可能會發(fā)現(xiàn),圖三top和relative間距是不同的嘁傀,然而top都是10px兴蒸,這是為什么呢?

重新回到對絕對定位的理解

絕對定位细办;脫離文檔流的布局橙凳,遺留下來的空間由后面的元素填充。定位的起始位置為最近的父元素(postion不為static)笑撞,否則為Body文檔本身岛啸。

看標紅的那句話,這也就是說娃殖,position的位置是相對于body而言的值戳,然而最外面的box和body距離10px,所以他們頂部才會重合


將父元素的position設(shè)置為relative或者absolute? 則會出現(xiàn)圖四

?????????????????? 圖四

絕對定位上的垂直居中問題

對于盒子模型炉爆,應(yīng)該有很深的理解堕虹,盒子模型可以對定寬元素使用margin:0? auto;來做到水平居中;

但是對于垂直居中芬首,使用類似的方法margin: auto 0;卻做不到赴捞,這是因為垂直方向上的外邊距等于零css會自動解讀為margin-top:0;


然而在absolute屬性中郁稍,垂直居中得到了一種很好的解決方式

使用{left:0; right : 0; margin:0 auto;}可以得到水平居中赦政,

使用{top:0; bottom:0;margin: auto 0; }可以得到垂直居中,

同樣的,使用{left:0; right : 0;top:0; bottom:0; margin: auto ;}可以得到垂直水平同時居中恢着。

<div style="border: solid 5px #333;position:absolute;height:300px; width:300px;"><div id="greenBox" style="height: 120px; width: 100px; background-color: Green;position:absolute;? ; left:0; right:0;top:0;bottom:0; margin: auto;"> absolute? ? ?

? ? ? ? </div></div>

2.3使用fixed屬性

固定定位桐愉;類似于absolute,但不隨著滾動條的移動而改變位置掰派。

fixed是相對與瀏覽器窗口的从诲,也就是固定在屏幕的某個位置,不能隨著滾動條移動靡羡。



3.相關(guān)屬性overflow系洛,z-index

overflow: scroll | hidden

scroll,超出元素塊的內(nèi)容以滾動條顯示,

hidden:超出部分隱藏

z-index:<integer>

因為position屬性的元素可以相互遮蓋略步,所以需要z-index屬性來改變默認的覆蓋先后順序描扯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市趟薄,隨后出現(xiàn)的幾起案子绽诚,更是在濱河造成了極大的恐慌,老刑警劉巖竟趾,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憔购,死亡現(xiàn)場離奇詭異宫峦,居然都是意外死亡岔帽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門导绷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來犀勒,“玉大人,你說我怎么就攤上這事妥曲〖址眩” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵檐盟,是天一觀的道長褂萧。 經(jīng)常有香客問我,道長葵萎,這世上最難降的妖魔是什么导犹? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮羡忘,結(jié)果婚禮上谎痢,老公的妹妹穿的比我還像新娘。我一直安慰自己卷雕,他們只是感情好节猿,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漫雕,像睡著了一般滨嘱。 火紅的嫁衣襯著肌膚如雪峰鄙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天太雨,我揣著相機與錄音先馆,去河邊找鬼。 笑死躺彬,一個胖子當著我的面吹牛煤墙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宪拥,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼仿野,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了她君?” 一聲冷哼從身側(cè)響起脚作,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缔刹,沒想到半個月后球涛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡校镐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年亿扁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸟廓。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡从祝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出引谜,到底是詐尸還是另有隱情牍陌,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布员咽,位于F島的核電站毒涧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贝室。R本人自食惡果不足惜契讲,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望档玻。 院中可真熱鬧怀泊,春花似錦、人聲如沸误趴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至枣申,卻和暖如春售葡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忠藤。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工挟伙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人模孩。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓尖阔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親榨咐。 傳聞我的和親對象是個殘疾皇子介却,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

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