前端布局初(有待完善)

1. 文檔流(normal flow)


即默認布局,將窗體自上而下分成一行行, 并在每行中按從左至右的順序排放元素,即為文檔流。每個非浮動塊級元素都獨占一行, 浮動元素則按規定浮在行的一端. 若當前行容不下, 則另起新行再浮動。

2. 顯示框類型

每一個元素都有display值,這個屬性用于定義建立布局時元素生成的顯示框類型,我們可以按需求重寫,以達到我們想要的效果。比如 li 是塊級元素,但是可以在具體寫水平菜單時修改為inline更方便。

display

這些都是最基本的幾個,還有更多設置。

3. 盒子模型


盒子模型

這里是一般的盒子模型,基本所有的塊級元素都會有,大小由外邊距(margin)、邊框(border)、內邊距(padding)、高(height)、寬(width)組成,所以你若是需要高為多少的盒子,可能需要減去要設置的一定的邊寬和內邊距。

  • 但是,現在有了box-sizing屬性(>= IE8),
 -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;

你可以這樣設置,使高寬包含內邊距和邊框寬。

4. 定位布局


position

基于文檔流, 我們可以這樣理解以下的定位模式:

  • 相對定位: 即相對于元素在文檔流中位置進行偏移, 但保留原占位。
  • 絕對定位:即完全脫離文檔流,相對于position屬性非static值的最近父級元素進行偏移。
  • 固定定位:即完全脫離文檔流, 相對于視區進行偏移。

5. 浮動布局


可設計流動布局。(float浮動、絕對定位、固定定位都會使得元素脫離文檔流而存在,但是在IE中浮動元素也存在于文檔流中)

.float-right {
    float: right;
}
.float-left{
    float: left;
}

浮動元素不占任何正常文檔流空間,而浮動元素的定位還是基于正常的文檔流,它從文檔流中抽出并盡可能移動至最左側或者最右側。文字內容會圍繞在浮動元素周圍。當一個元素從正常文檔流中抽出后,仍然在文檔流中的其他元素將忽略該元素并填補他原先的空間。因為浮動會對下一個非float元素產生影響,所以我們需要按需求清除浮動使用:

.clear-right {
    clear: right;
}
.clear-left{
    clear: left;
}
.clear-both{
    clear: both;
}

有時清除float會發生溢出,即內部較大元素撐出包含它的元素。可以使用clearfix hack,即對外容器使用overflow: auto;即對溢出部分自適應。然后對于IE6還要加一行zoom: 1;這個zoom就是IE私有屬性了,表示縮放倍數。當然,清除浮動對于不同瀏覽器還有可能有不同,比較麻煩。

.clearfix-hack {
    overflow: auto;
}
/* for IE */
.clearfix-hack {
    overflow: auto;
    zoom: 1;
}

6. 基于百分比的柵格布局


將width、height設置為以%為單位,這是比較常用的布局技巧,響應式的柵格布局方法很多也就是這樣來設置的。同時輔以流動特性和媒體查詢,就可以很好地做到跨屏適應。

.width-12 {
  width: 100%;
}
.width-11 {
  width: 91.66666667%;
}

......

.width-2 {
  width: 16.66666667%;
}
.width-1 {
  width: 8.33333333%;
}

7. 媒體查詢


這是實現響應式多屏適應的一種很重要的手段:

@media screen and (min-width: 768px) {
    .container {
        width: 1170px;
    }
} 
@media screen and (max-width: 767px) {
    .container {
        width: 750px;
    }
}

即在不同寬度的窗口上渲染不同的CSS。

7. column多欄布局


CSS新屬性,用于實現文字的多列布局,是的,就像報刊那樣。

/* >= IE9 */
.three-column {
    padding: 1em;
    -webkit-column-count: 3;
       -moz-column-count: 3;
            column-count: 3;
    -webkit-column-gap: 1em;
       -moz-column-gap: 1em;
            column-gap: 1em;
}

這就會將這個內部的文本顯示成三列。

9. Flexbox彈性布局


這是最新的一種布局方式,也可能將成為未來布局的首選方式

.flexbox {
        display: flex;
}
.flexbox2 {
        display: inline-flex;
}

設置flex屬性后,子元素的float、clear、vertical-align屬性會失效。

flex使布局更方便
<!-- HTML -->
<div class="container">
    <div class="noflex1">這里是固定的200px</div>
    <div class="noflex2">這里是固定不變的300px</div>
    <div class="flex1">
        <div class="flex-center">
            flex-item居中
        </div>
    </div>
    <div class="flex2">左邊一格占剩下的1/3,這里占有剩下的2/3</div>
</div>
/* CSS */
div {
    height: 300px;
    font-size: 30px;
}
.container {
    /*width: 100%;*/
    width: 100%;

    display: -webkit-flex;
    display: flex;

    background-color: #233333;
}
.noflex1 {
    -webkit-flex: initial;
            flex: initial;
    width: 100px;

    background-color: #666666;
}
.noflex2 {
    -webkit-flex: none;
            flex: none;
    width: 200px;

    background-color: #765432;
}
.flex-center {
    width: 100px;
    height: 100px;

        background-color: #8080FF;
}
.flex1 {
    -webkit-flex: 1;
            flex: 1;

    /* flex使得CSS終于有一種比較好的居中方式了! */
    display: -webkit-flex;
    display: flex;

    /* 讓內容(flex item)在交叉軸(cross axis)上(垂直)居中 */
    -webkit-align-items: center;
            align-items: center;

    /* 讓內容在主軸(main axis)上(水平)居中 */
    -webkit-justify-content: center;
            justify-content: center;

    background-color: #FCFCFC;
}
.flex2 {
    -webkit-flex: 2;
            flex: 2;

    background-color: #AAAAAA;
}

flex還有跟多概念,具體可參考手冊

10. Grid網格布局模型(CSS Grid Layout Module


前端的世界真是瞬息萬變,這里的grid是CSS的一個最新特性,新到W3C組織幾天前才宣布規范已穩定,但是因為太新了,各瀏覽器并沒有很好的支持這個特性,在一些瀏覽器里甚至是實驗功能,需要手動開啟。
所以寫完后,放在瀏覽器里是不會有效果的,這是因為瀏覽器并沒有默認開啟網格功能,只有IE10默認開啟了(實際我使用IE11和Edge時并沒有效果,然后我開啟了Chrome的實驗性網絡平臺功能才看到了grid布局的效果,但效果不是很好)。
網格布局更像是曾經的table布局,先設置一個網格容器,并設置其行列數,然后設置子項目行列......但它又有更多創新且更為復雜、更多浮夸的功能,是的非常浮夸,想要了解更多,還是多多關注grid布局的最新動態。但是我勸大家暫時不要在這個沒有瀏覽器能夠很好支持、還默認關閉的特性上浪費時間了。

11.使用rem單位進行響應式布局


rem是CSS3一個新增加的單位,但是已經得到了現在大多瀏覽器的很好的支持。
(等待更新中……)

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

推薦閱讀更多精彩內容

  • 前言 溫馨提示:本文較長,圖片較多,本來是想寫一篇 CSS 布局方式的,但是奈何 CSS 布局方式種類太多并且實現...
    sunshine小小倩閱讀 3,155評論 0 59
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,779評論 1 92
  • 簡介CSS網格布局(又稱“網格”),是一種二維網格布局系統。CSS在處理網頁布局方面一直做的不是很好。一開始我們用...
    _leonlee閱讀 65,140評論 25 173
  • 簡介 CSS Grid布局 (又名"網格"),是一個基于二維網格布局的系統,旨在改變我們基于網格設計的用戶界面方式...
    咕咚咚bells閱讀 2,538評論 0 4
  • 看完《童心無歸處》,我不禁想到,如果我有一個6歲的女兒,我要怎樣才能保護她不受傷害呢? 21年前的圣誕節,一起悲劇...
    大觀家庭閱讀 437評論 0 1