網易微專業之《前端工程師》學習筆記(5)-CSS布局屬性(草稿)

網頁的布局其實在我理解起來,就類似于排版的問題。有點像平面設計中的內容排版。只不過平面設計中的排版是在photoshop里做的,而網頁的排版卻要通過寫代碼來實現。排版的意思,把這塊東西放在網頁的哪個地方,和別的東西怎么協調起來排版。布局要搞明白的意思大概就是這個。

布局會涉及到的幾個CSS屬性大致有這么一些。display,主要是用來設置元素的顯示方式,position主要是用來給元素定位的,你可以用這個屬性任意給元素定位到網頁的任何一個地方。float也是用來定位的,只不過它的定位方式跟position有點不同,他只有兩個方向,就是讓元素左浮動或者又浮動。flex是很新鮮的一種流式布局方法,可以用它來做一些不是很復雜的響應式布局。下面我們來詳細介紹下這幾個屬性。

01.display:設置元素的顯示方式

它的值有很多,看下面我收集到的表格。
(1)display的值有哪些?

描述
none 此元素不會被顯示
block 此元素將顯示為塊級元素。
inline 默認,此元素會被顯示為內聯元素。
inline-block 行內塊元素
list-item 此元素會作為列表顯示
table 此元素會作為塊級表格來顯示(類似<table>)
inline-table 此元素會作為內聯表格來顯示(類似<table>)
table-row-group 此元素會作為一個或多個行的分組來顯示(類似<tbody>)
table-header-group 此元素會作為一個或多個行的分組來顯示(類似<thead>)
table-footer-group 此元素會作為一個或多個行的分組來顯示(類似<tfoot>)
table-row 此元素會作為一個表格行顯示(類似<tr>)
table-column-group 此元素會會作為一個或多個列的分組來顯示(類似<colgroup>
table-column 此元素會作為一個單元格列顯示(類似<col>
table-cell 此元素會作為一個表格單元格顯示(類似<td>和<th>)
table-caption 此元素會作為一個表格標題顯示(類似<caption>

其中display最主要的三個值我下面再簡單介紹下,其他的值不是很常用,不過我上面列出來的display的值只是其中的大部分,還算比較常用,如果有能力都要嘗試下,當然除了我下面重點介紹的三個最常用的值之外,其他的值瀏覽器支持的不是很好。

(2)display最常用的三個值介紹

display 默認寬度 可設置寬高 起始位置 代表元素有哪些
block 父元素寬度 換行 div\p\h1~h6\ol\ul\dl\table\address\blockquot\form
inline 內容寬度 同行 a\span\br\i\em\strong\label\q\var\cite\code
inline-block 內容寬度 同行 input\textarea\select\button
  • block:默認寬度為父元素的寬度,可設置寬高,換行顯示。

  • inline:默認寬度為內容寬度,也就是說,如果給這個元素設置了display:inline;元素的寬度就會變成它里面內容的寬度。不可以設置寬高,與別的前后元素之間同行顯示。如果遇到寬度不夠一行要換行的話,inline的元素是會內容拆開來換行的,相對來說,inline-block的元素反而是個整體,不拆開來換行,是整塊換行的。

  • inline-block:默認寬度為內容寬度,可設置寬高,同行顯示。如何遇到內容不夠一行,是會整塊作為一個整體,整塊換行。inline-block和block的區別是inline-block對內是block屬性,對外顯示是inline屬性,所以block的話,居中可以用margin:auto,但是inline-block用margin:auto就沒用了,不能做到居中,inline-block和block的時候margin:auto的瀏覽器計算方法是不一樣的。

display:inline-block;在ie6、ie7下只有設置在默認顯示方式為inline的元素上才會生效,那么在IE6、IE7下,怎么實現塊級元素的inline-block屬性值設置呢?

E6、IE7支持對html行內元素設置inline-block。實際上只是看起來支持而已,IE6、IE7并不識別inline-block這個屬性值,只是觸發了layout,讓行內元素有了inline-block的表征,比如說:行內顯示且可設置寬高等等。

而對html塊級元素設置inline-block,也只是觸發了layout,對塊級元素設置行內塊級屬性的目的沒有達到。那么在IE6、IE7下,怎么實現塊級元素的inline-block屬性值設置呢?

常見有2種方法:
1.先使用display:inline-block屬性觸發塊元素,然后再定義display:inline,讓塊元素呈遞為行內對象(兩個display 要先后放在兩個CSS聲明中才有效果,這是IE的一個經典bug,如果先定義了display:inline-block,然后再將display設回 inline或block,layout不會消失),代碼如下:

div {display:inline-block;}
div {display:inline;}

2.直接讓塊元素設置為行內對象呈遞(設置屬性display:inline),然后觸發塊元素的layout(如:zoom:1 或float屬性等),代碼如下:

div { display:inline-block; _zoom:1;_display:inline;}/*推薦IE6*/
div { display:inline-block; *zoom:1;*display:inline;}/*推薦IE6或IE7*/

(3)display:none與visibility:hidden的區別

給元素設置了display:none以后,元素就消失了,在元素下面的元素會取代那個消失的元素的位置,而visibility:hidden設置的元素,是顯示隱藏,但是在文檔流中,它原先的位置還在,只是那個位置是空白的,在該元素下面的元素不會竄上來取代它的位置。

02.position:設置定位方式

設置定位方式最重要的是設置參照物。且要配合別的屬性一起使用,有這些屬性:top、right、bottom、left、z-index。

left等方向值代表的意思

position定位工作原理是先通過設定position:absolute/relative/fixed來確定要定位的參照物。然后通過left\right\top\bottom來設置元素與參照物之間的距離可以從圖中看出,left\right\top\bottom表示元素邊緣與參照物之間的距離。

然后再來講講position:absolute/relative/fixed的意思。relative相對定位,absolute絕對定位,fixed固定定位。三個定位各有自己的特色。

相對定位relative

如果給中間的那個橘黃小塊設置了相對定位,它的位置是不會有變化的。仍然在文檔流中。而且它的參照物是元素自己本身。所以一旦給這個元素再追加設置方向值topleft,意思就是相對于元素本身這個參照物原來的位置,左邊距偏移了20px,上邊距偏移了10px。

這個相對定位的屬性,由于是以元素本身作為參照物的,而且如果單純只是給元素設置相對定位的話,元素本身的位置是不發生變化的,因此,它常常用來作為下面要講的絕對定位元素的參照物來設置。


絕對定位absolute

如果給圖片中位于中間的那個深橘色的小塊設置了絕對定位。那么按照絕對定位的特點,這個小塊會脫離文檔流,這樣一來,位于下面的淺色橘黃小塊就會竄上來,取代原先那個深色橘黃小塊的位置。而且由于設置了絕對定位的關系,深色橘黃小塊的寬度會縮小,變成內容寬度。

如果再給這個深色橘黃小塊追加方向值top\left,絕對定位的小塊的參照物如果不設置的話就是html的根元素,如果設置了的話,一般要看它祖先元素是不是設置了相對定位的,設置了的話,就按照那個相對定位的元素為參照物進行位置的偏移。

fixed固定定位

如果給位于中間的深橘色小塊設置了position:fixed;那么這個小塊會根據固定定位的特色,寬度會收縮成內容寬度,并且脫離文檔流,而位于它下方的淺橘色小塊會竄上來取代它的位置。而固定定位的參照物是瀏覽器視窗,所以一旦給這個深橘色小塊追加方向值left\bottom,那么它位置的偏移就會按照瀏覽器的視窗作為參照物。偏移的結果就看上圖的樣子了。position:fixed 在ie6及以下不支持

03.float

float浮動

如果給這個深橘色的小塊添加float:right;那么這個小塊的寬度會收縮成內容寬度,并且脫離文檔流,設置了右浮動,就會向右邊一直移動,直到碰到邊界。左浮動就向左邊。

另外,值得注意的是,float對于元素來說是脫離文檔流的,但是對于元素的內容來說是占據文檔流的。這句話怎么理解呢,看下面的圖:

float半脫離文檔流

其實對于上圖中的那個淺橘色的小塊來說,它的大小是包括了那個深橘色的小塊的,只不過它左邊的地方被深橘色小塊覆蓋掉了,所以對于淺橘色小塊這個元素來說,深橘色這個float元素是脫離文檔流的。但是奇怪的是淺橘色小塊的內容,確實如圖中這樣顯示的,說明,對內容來說,float元素還是在文檔流占據位置的。

關于清除浮動的方法有兩個,一個是在浮動元素后面加一個空白的元素,給這個空白的元素添加樣式{clear:both;}就好了。比如在浮動元素后面加一個

<br class="cb"/>

.cb{clear:both;height:0;overflow:hidden;visibility:hidden;}

另一種辦法就是clearfix。給浮動元素的父元素添加一個clearfix的類。

.clearfix:after{content:".";display:block;clear:both;height:0;overflow:hidden;visibility:hidden;}
.clearfix{zoom:1;}

另外關于為什么要加zoom:1的原因,zoom的作用可以看看這篇文章《CSS中zoom:1的作用 ,小標簽大作用》

04.flex

從缺,有空補~~

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

推薦閱讀更多精彩內容