網頁的布局方式

網頁端的布局方式比起iOS客戶端比較靈活,iOS從最初的絕對定位,逐步發展到現在的autolayout,可以通過約束設置控件相對于其他控件的邊距。但是比起網頁端,很多需求實現起來還是很難實現,所以學習下網頁的CSS布局方式,長長見識,記錄下知識,希望以后自己用到的時候不會完全沒有思路。

CSS布局方式比較靈活多樣,根據排版方式不同可以分為標準流,浮動流,定位流。

1.標準流

標準流時瀏覽器的默認排版方式,在標準流中CSS元素分為以下三類元素

  • 塊級元素
    獨占一行(所以垂直排版),可以設置寬度和高度,如p,div,h,ul,ol,ul
  • 行內元素
    在同一行顯示(所以水平排版),不能設置寬度和高度 a,img,select,input
  • 行內塊級元素
    在同一行顯示(水平排版),可以設置寬度和高度。
常見塊級標簽.png

標準流里面主要是根據設置元素的display為inline,block,inline-block來改變元素的顯示模式??梢院芊奖愕目刂圃氐乃胶痛怪迸虐娴模材軌蚩刂圃氐拇笮?。但是僅僅依靠標準流,許多網頁布局效果無法實現。

2. 浮動流排版

浮動流只有水平排版,只能設置某個元素左對齊或者右對齊,是一種半脫離標準流的排版方式,可以通過設置元素的float屬性設置浮動方向,當某一個元素浮動之后, 那么這個元素看上去就像被從標準流中刪除了一樣,如果前面一個元素浮動了, 而后面一個元素沒有浮動 , 那么這個時候前面一個元就會蓋住后面一個元素。

1.浮動流中沒有居中對齊, 也就是沒有center這個取值
2.在浮動流中是不可以使用margin: 0 auto;

  • 特點:
    1.在浮動流中是不區分塊級元素/行內元素/行內塊級元素的無論是級元素/行內元素/行內塊級元素都可以水平排版
    2.在浮動流中無論是塊級元素/行內元素/行內塊級元素都可以設置寬高
    3.綜上所述, 浮動流中的元素和標準流中的行內塊級元素很像

實現案例

2.1 浮動元素貼靠現象

規則


  • 如果父元素的寬度能夠顯示所有浮動元素, 那么浮動的元素會并排顯示
  • 如果父元素的寬度不能顯示所有浮動元素, 那么會從最后一個元開始往前貼靠
  • 如果貼靠了前面所有浮動元素之后都不能顯示, 最終會貼靠到父元素的左邊或者右邊

 <style>
        .father{
            width: 400px;
            height: 400px;
            border: 1px solid #000;
        }
        .box1{
            float: left;
            width: 50px;
            height: 300px;
            background-color: red;
        }
        .box2{
            float: left;
            width: 50px;
            height: 100px;
            background-color: green;
        }
        .box3{
            float: left;
            width: 250px;
            height: 100px;
            background-color: blue;
        }
    </style>
<div class="father">
    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
</div>
浮動元素的貼靠.png

2.2 文字環繞現象

浮動元素不會擋住沒有浮動元素中的文字, 沒有浮動的文字會自動給浮動的元素讓位置,這個就是浮動元素字圍現象。

<style>
       .c1 {
           float: left;
           
           background-color: green;
       }
        .c2{

            background-color: red;
            width: 200px;
        }
    </style>
浮動元素文字環繞.png

2.3 浮動元素的高度

在標準流中內容的高度可以撐起父元素的高度,在浮動流中浮動的元素是不可以撐起父元素的高度的。

<head>
    <meta charset="UTF-8">
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        div{
            border: 1px solid #000;
        }
        p{
            float: left;
            width: 50px;
            height: 50px;
            background-color: red;
        }
    </style>
</head>
<body>
<div>
    <p></p>
</div>
</body>
浮動流高度不能撐起來.png

清除浮動影響

浮動的元素在標準流中默認不占位置,但是有點時候確實需要浮動的元素占據位置,否則頁面會塌陷,有以下幾種方式解決浮動帶來的問題。

  1. 給浮動元素的一個父標簽設置高度,比如給上段代碼的div設置個高度。這個方法不常用,盡量不寫高度。

  2. clear屬性
    可以給浮動元素的后面的盒子添加clear屬性。
    none: 默認取值, 按照浮動元素的排序規則來排序(左浮動找左浮動, 右浮動找右浮動)
    left: 不要找前面的左浮動元素
    right: 不要找前面的右浮動元素
    both: 不要找前面的左浮動元素和右浮動元素

<head>
    <meta charset="UTF-8">
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        p{
            background-color: red;
            float: left;
        }
        div{
            background-color: green;
            float: left;
            clear: left;
        }
    </style>
</head>
<body>
    <p>段落段落浮動了</p>
    <div>div也浮動了但是沒有出現在p的右邊</div>
</body>
clear屬性清除浮動.png

3.設置overflow屬性
1overflow: hidden的作用很多不局限于解決浮動的元素在標準流中不占位置的問題。

  • 可以將超出標簽范圍的內容裁剪掉
  • 清除浮動
  • 可以通過overflow: hidden;讓里面的盒子設置margin-top之后, 外面的盒子不被頂下來


    overflow.png

3.定位流排版

3.1 相對定位

相對定位就是相對于自己以前在標準流中的位置來移動,4用于對元素進行微調或者配合絕對定位來使用。

  • 相對定位是不脫離標準流的, 會繼續在標準流中占用一份空間
  • 在相對定位中同一個方向上的定位屬性只能使用一個,
  • 由于相對定位是不脫離標準流的, 所以在相對定位中是區分塊級元素/行內元素/行內塊級元素
  • 由于相對定位是不脫離標準流的, 并且相對定位的元素會占用標準流中的位置, 所以當給相對定位的元素設置margin/padding等屬性的時會影響到標準流的布局。
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            width: 50px;
            height: 50px;
        }
        .d1{
            background-color: red;
        }
        .d2{
            background-color: green;
            position: relative;
            left: 10px;
            top: 10px;
            /*同一個方向只能有一個*/
            right: 10px;
            margin-bottom: 20px;
        }
        .d3{
            background-color:yellow;
        }
        span{
            position: relative;
            left: 10px;
            top: 10px;
            width: 1000px;
            background-color: red;
        }
    </style>
</head>
<body>
<div class="d1"></div>
<div class="d2"></div>
<div class="d3"></div>
<span>這是span標簽</span>
</body>
</html>

相對定位.png

3.2絕對定位

絕對定位的元素脫離標準流,不區分塊級元素/行內元素/行內塊級元素。

3.2.1 參考點選取規則

  • 默認情況下所有的絕對定位的元素, 無論有沒有祖先元素, 都會以body作為參考點

  • 如果一個絕對定位的元素有祖先元素, 并且祖先元素也是定位流, 那么這個絕對定位的元素就會以定位流的那個祖先元素作為參考點

  • 只要是這個絕對定位元素的祖先元素都可以

  • 指的定位流是指絕對定位/相對定位/固定定位

  • 定位流中只有靜態定位不行

  • 如果一個絕對定位的元素有祖先元素, 并且祖先元素也是定位流, 而且祖先元素中有多個元素都是定位流, 那么這個絕對定位的元素會以離它最近的那個定位流的祖先元素為參考點

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            width: 50px;
            height: 50px;
        }
        .d1{
            background-color: red;
        }
        .d2{
            background-color: green;
            position: absolute;
            left: 30px;
            width: 100px;
            top: 10px;
            font-size: 12px;
        }
        .d3{
            width: 100px;
            height: 100px;
            background-color:cyan;
            /*祖先元素的有定位*/
            position: relative;
        }
        .d4{
            position: absolute;
            width: 50px;
            height: 50px;
            bottom: 0px;
            right: 0px;
            background-color: blue;
        }
    </style>
</head>
<body>
<div class="d1"></div>
<div style="background-color: deeppink"><span class="d2">這是span標簽</span></div>
<div class="d3">
    <div class="d4"></div>
</div>
</body>
絕對定位.png

3.3固定定位

固定定位和前面學習的背景關聯方式很像, 背景定位可以讓背景圖片不隨著滾動條的滾動而滾動, 而固定定位可以讓某個盒子不隨著滾動條的滾動而滾動

1.固定定位的元素是脫離標準流的, 不會占用標準流中的空間
2.固定定位和絕對定位一樣不區分行內/塊級/行內塊級

<head>
    <meta charset="UTF-8">
    <title>83-定位流-固定定位</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        div{
            width: 100px;
            height: 100px;
        }
        .box1{
            background-color: red;
        }
        .box2{
            background-color: green;
            position: fixed;
        }
        .box3{
            background-color: blue;
        }

        .box4{
            height: 2000px;
            background-color: yellow;
        }
    </style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
<div class="box4"></div>
<!--<span>我是span</span>-->
</body>
固定定位.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,774評論 1 92
  • # 網頁的布局方式(標準流/浮動流/定位流) # 浮動元素的脫標 # 浮動元素排列規則 # 貼靠現象 # 清除浮動...
    KsKison閱讀 1,602評論 0 1
  • 網頁布局方式其實就是瀏覽器是如何對網頁中的元素進行排版的1.標準流(文檔流、普通流)排版方式 浮動流的排版方式 注...
    Coder東閱讀 726評論 0 3
  • 暗雨把窗子分割得七零八亂,房間閉塞得尋不出一絲縫隙,空氣裹挾著壓迫令人窒息,想述說心緒卻又只得扔下紙筆。 天空突來...
    雕花樓里曬白衣閱讀 215評論 0 1
  • 蠻橫宣言: “保守”未必是褒義,“蠻橫”是一種積極向上,奮力拼搏的精神 我們年輕氣盛,我們敢于挑戰,我們有新想法,...
    懿木智庫閱讀 270評論 0 0