1. 程式人生 > >這可能是最全面的CSS基礎佈局文章

這可能是最全面的CSS基礎佈局文章

這可能是最全面的CSS基礎佈局文章

 

前言

這是一篇基礎CSS佈局的內容,可能內容比較的簡單。但是很適合查缺補漏的閱讀。

這篇文章來自於網際網路(掘金:Sweet_KK)。我簡單的自己跑了一遍,添加了一些自己的看法,刪了一些個人感覺不重要的,重新排版了一下。

當然,如果原作者感覺不妥,私信就刪。

一、水平居中

1.1、文字/行內元素/行內塊級元素

tips:text-align只控制行內:文字、行內元素、行內塊級元素,相對於它的塊級父元素對齊。

#view{
 text-align: center;
}

只對行內內容有效;屬性會繼承影響到後代行內內容;如果子元素寬度大於父元素寬度則無效,只有後代行內內容中寬度小於設定text-align屬性的元素寬度的時候,才會水平居中。

1.2、單個塊級元素

tips:在margin有剩餘時,並且如果左右margin設定了auto,那麼將會均分剩餘空間。此外,如果上下的margin設定了auto,其計算值則為0。

#view{
 width: 666px; /*必須定寬*/
 margin: 0 auto;
}

必須固定寬度,且不能設定為auto;寬度要小於父元素,否則無效。

1.3、絕對定位

tips:

  • 1、top、right、bottom、left的值是相對於父元素尺寸的
  • 2、margin或者transform是相對於自身尺寸的
  • 二者組合,達到水平居中的目的

這可能是最全面的CSS基礎佈局文章

 

使用margin-left需要先知道寬度;並且在IE9以下,使用transform相容性不好。

1.4、flex

#view{
 display: flex;
 justify-content: center;
}

PC端、移動端的相容性不好

總結

Sweet_KK原話總結:

對於水平居中,我們應該先考慮,哪些元素有自帶的居中效果,最先想到的應該就是 text-align:center 了,但是這個只對行內內容有效,所以我們要使用 text-align:center 就必須將子元素設定為 display: inline; 或者 display: inline-block; ;其次就是考慮能不能用margin: 0 auto; ,因為這都是一兩句程式碼能搞定的事,實在不行就是用絕對定位去實現了。

移動端能用flex就用flex,簡單方便,靈活並且功能強大,無愧為網頁佈局的一大利器!

二、垂直居中

2.1、單行文字/行內元素/行內塊級元素

tips:line-height的最終表現是通過inline box實現的,而無論inline box所佔據的高度是多少(無論比文字大還是比文字小),其佔據的空間都是與文字內容公用水平中垂線的。

#view{
 height: 150px;
 line-height: 150px; /*與height等值*/
}

只能用於單行行內內容;且需要先知道高度

2.2、多行文字/行內元素/行內塊級元素

tips:也可以選擇使用span把所有文字包裹起來,設定display:inline-block 用轉換成圖片的方式解決

#parent{ 
 height: 150px;
 //元素在頁面呈現為5行,則line-height的值為height/5
 line-height: 30px; 
}

只能用於單行行內內容;且需要先知道高度

2.3、圖片

#parent{
 height: 666px;
 line-height: 666px;
 font-size: 0;
}
img#son{vertical-align: middle;} /*預設是基線對齊,改為middle*/

需要新增font-size: 0; 才可以完全的垂直居中

2.4、單個塊級元素

這可能是最全面的CSS基礎佈局文章

 

設定tabl-cell的元素,寬度和高度的值設定百分比無效,需要給它的父元素設定display: table; 才生效。

table-cell不感知margin,在父元素上設定table-row等屬性,也會使其不感知height。

設定float或position會對預設佈局造成破壞,可以考慮為之增加一個父div定義float等屬性;內容溢位時會自動撐開父元素。

2.5、絕對定位

方法1

tips:子絕父相,top、right、bottom、left的值是相對於父元素尺寸的,然後margin或者transform是相對於自身尺寸的,組合使用達到水平居中的目的

這可能是最全面的CSS基礎佈局文章

 

使用margin-left需要先知道寬度;並且在IE9以下,使用transform相容性不好。

方法2

tips:當top、bottom為0時,margin-top&bottom會無限延伸佔滿空間並且平分

#parent{position: relative;}
#son{
 position: absolute;
 margin: auto 0;
 top: 0;
 bottom: 0;
 height: 50px;
}

2.6、flex

這可能是最全面的CSS基礎佈局文章

 

總結

Sweet_KK原話總結:

對於垂直居中,最先想到的應該就是 line-height 了,但是這個只能用於行內內容;

其次就是考慮能不能用vertical-align: middle; ,不過這個一定要熟知原理才能用得順手,建議看下vertical-align和line-height的基友關係 ;

然後便是絕對定位,雖然程式碼多了點,但是勝在適用於不同情況;

移動端相容性允許的情況下能用flex就用flex

最後,如果有想一起學習web前端,HTML5及JavaScript的可以來一下我的前端群733581373,好友都會在裡面交流,分享一些學習的方法和需要注意的小細節,每天也會準時的講一些前端的炫酷特效,及前端直播課程學習

如果想看到更加系統的文章和學習方法經驗可以關注的微訊號:‘web前端技術圈’或者‘webxh6’關注後回覆‘2018’可以領取一套完整的學習視訊