網頁布局基礎

1、CSS的三種定位機制

CSS 規定的定位機制有三種,分別是:

  1. 標準文檔流(Normal flow):

特點:從上到下,從左到右,輸出文檔內容。由塊級元素(塊級元素特點:從左到右撐滿頁面,獨占一行,觸碰到頁面邊緣時,會自動換行)和行級元素(塊級元素特點: 在同一行內顯示,不會改變HTML文檔結構 )組成。

  1. 浮動(Floats)

  2. 絕對定位(Absolute positioning)

言下之意就是網頁布局和元素的定位都離不開這三種機制。

2、什么是W3C標準

W3C標準,是由萬維網聯盟制定的一系列標準,主要包括以下三個方面內容:

  1. 結構化標準語言(HTML和XML)
  2. 表現標準語言(CSS)
  3. 行為標準語言(DOM和ECMAScript)

W3C倡導的是結構、樣式、行為分離

3.盒模型(Box Model)

所有HTML元素可以看作盒子,在CSS中,"box model"這一術語是用來設計和布局時使用。

CSS盒模型本質上是一個盒子,封裝周圍的HTML元素,它包括:外邊距(margin)、邊框(border)、內邊距(padding)、盒子中的內容(content).

盒模型允許我們在其它元素和周圍元素邊框之間的空間放置元素。

元素的寬度和高度:
重要: 當你指定一個CSS元素的寬度和高度屬性時,你只是設置內容區域的寬度和高度。要知道,完全大小的元素,你還必須添加填充(padding),邊框(border)和邊距。.

在三維空間中,盒子模型由上到下分為五層:

  1. 邊框(border)位于第一層;
  2. 內邊距(padding)和盒子中的內容(content)位于第二層;
  3. 背景圖像(background-image)位于第三層;
  4. 背景顏色(background-color)位于第四層;
  5. 外邊距(margin)位于最后一層。
Paste_Image.png

各個層疊加之后也就形成了我們看到的盒子模型的平面結構圖。

盒子模型有兩種,分別是 ie 盒子模型和標準 w3c 盒子模型。

Paste_Image.png
Paste_Image.png

區別:
W3C標準中padding、border所占的空間不在width、height范圍內,大家俗稱的IE的盒模型width、height包括content尺寸+padding+border。

舉個例子:一個盒子的 margin 為 20px,border 為 1px,padding 為 10px,content 的寬為 200px、高為 50px。

假如用標準 w3c 盒子模型解釋,那么這個盒子需要占據的位置為:
????寬: 20?2+1?2+10?2+200=262px
????高: 20?2+1?2+10?2+50=112px

盒子的實際大小為:
????寬: 1?2+10?2+200=222px
????高: 1?2+10?2+50=72px

假如用ie 盒子模型,那么這個盒子需要占據的位置為:
????寬: 20?2+200=240px
????高: 20?2+50=70px

盒子的實際大小為:寬 200px、高 50px。

并不是所有的IE都使用IE盒模型:

  1. 早期IE6、IE7使用“IE盒模型”,后來更新了一次,更新后的IE6、IE7使用標準盒模型IE8及以上版本使用標準盒模型.
  2. 沒有DOCTYPE的情況下使用怪異模式,IE也使用“IE盒模型”。在HTML頁面聲明 <!DOCTYPE html>,瀏覽器就會選擇標準 w3c 盒子模型來呈現內容了。

兼容方案:

使用css3新樣式box-sizing,box-sizing有兩個值:

  1. content-box:w3c標準盒模型
  2. border-box:“IE盒模型”
<div style="height:200px;width:200px;border:solid 10px #333;padding:100px;box-sizing: border-box;">
</div>

4.自動居中一列布局

需要掌握三個技能:

  1. 標準文檔流
  2. 塊級元素
  3. margin屬性:上下外邊距根據需要設置,左右外邊距為auto

自動居中一列布局需要設置 margin 左右值設置為 auto,而且一

般要為包裹層(父層)設置width為一個定值,子層設置width為100%(以父包含塊寬度為準自適應)。

aotu 會根據瀏覽器的寬度自動的設置兩邊的外邊距。

原理:(瀏覽器寬度-外包層寬度)/2 = 外邊距

如果想讓頁面自動居中,當設置margin屬性為auto的時候,不能再設置浮動或絕對定位屬性 。

5.浮動布局

CSS中規定的第二種定位機制,使用浮動布局能夠實現塊級元素的橫向排版,即橫向多列布局。

浮動的框可以左右移動(根據float屬性值而定),直到它的外邊緣
碰到包含框或者另一個浮動元素的框的邊緣。

浮動元素不在文檔的普通流中,文檔的普通流中的元素表現的就像浮動元素不存在一樣。

當元素沒有設置寬度值,而設置了浮動屬性,元素的寬度會隨內容的變化而變化(若沒有內容,則寬度為0)。

當元素設置浮動屬性后,會對相鄰的元素產生影響,相鄰元素特指緊鄰它后面的元素,對它前面的元素沒影響。

demo 1:

<div style="border: solid 5px #0e0; width:300px;">
    <div style="height: 100px; width: 100px; background-color: Red;  ">
    </div>
    <div style="height: 100px; width: 100px; background-color: Green;float:left;">
    </div>
    <div style="height: 100px; width: 100px; background-color: Yellow;">
    </div>
</div>
Paste_Image.png

浮動元素覆蓋了緊鄰它后面的元素,而不會覆蓋前面的。

6.清除浮動的常用方法

1.為受到浮動影響的元素設置clear屬性 - clear:both;

2.為受到浮動影響的元素同時設置width:100%(或固定寬度)+overflow:hidden;

3、給包裹層(父層)設置:

.clearfix:after{
  content:'';
  display:block;
  clear:both;
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        .outer{
            border: 1px solid black;
            width: 300px;
        }
        .inner{
            width: 50px;
            height: 50px;
            background-color: #ff4400;
            margin-right: 20px;
            float: left;
        }
        .footer{
            background-color: #005FC3;
            width: 200px;
            height: 100px;
        }
        .clearfix:after{  /*最簡方式*/
            content: '';
            display: block;
            clear: both;
        }
        /* 新浪使用方式
        .clearfix:after{ 
            content: '';
            display: block;
            clear: both;
            height: 0;
            visibility: hidden;
        }
        */
        .clearfix{ /*兼容 IE*/
            zoom: 1;
        }
    </style>
</head>
<body>
    <div class="outer clearfix">
        <div class="inner"></div>
        <div class="inner"></div>
        <div class="inner"></div>
    </div>
    <div class="footer"></div>
</body>
</html>

7.橫向兩列布局

主要應用技能:

  1. float 屬性 - 使縱向排列的塊級元素,橫向排列
  2. margin屬性 - 設置兩列之間的間距
<style type="text/css">
* {
    margin:0;
    padding:0;
}
#wrap {
    background:#00C;
    margin:0 auto;
    width:960px;
}
#header {
    background:#FF3300;
    width:100%;
}
#mainbody {
        background:#FC0;
}
.clearfix:after{
            content:'';
            display:block;
            clear:both;
}
.left {
    width:800px;
    height:200px;
    background:#000;
    float:left;
}
.right {
width:140px;
height:500px;
background:#690;
float:right;
}
#footer {
    background:#639;
    width:100%;
}
</style>
</head>

<body>
<div id="wrap">
  <div id="header">頭部</div>
  <div id="mainbody" class='clearfix'>
    <div class="left"></div>
    <div class="right"></div>
  </div>
  <div id="footer">版權部分</div>
</div>
</body>

8.一切皆為框

div、h1 或 p 元素常常被稱為塊級元素。這意味著這些元素顯示為一塊內容,即“塊框”。與之相反,span 和 strong 等元素稱為“行內元素”,這是因為它們的內容顯示在行中,即“行內框”。

你可以使用 display 屬性、改變生成的框的類型。這意味著,通過將 display 屬性設置為 block,可以讓行內元素(比如<a>元素)表現得像塊級元素一樣。還可以通過把 display 設置為 none,讓生成的元素根本沒有框。這樣的話,該框及其所有內容就不再顯示,不占用文檔中的空間。

但是在一種情況下,即使沒有進行顯式定義,也會創建塊級元素。這種情況發生在把一些文本添加到一個塊級元素(比如 div)的開頭。即使沒有把這些文本定義為段落,它也會被當作段落對待:

<div>
some text
<p>Some more text.</p>
</div>
Paste_Image.png

9.CSS定位機制

CSS 有三種基本的定位機制:普通流、浮動和絕對定位。

除非專門指定,否則所有框都在普通流中定位。也就是說,普通流中的元素的位置由元素在 (X)HTML 中的位置決定。

塊級框從上到下一個接一個地排列,框之間的垂直距離是由框的垂直外邊距計算出來。

行內框在一行中水平布置。可以使用水平內邊距、邊框和外邊距調整它們的間距。但是,垂直內邊距、邊框和外邊距不影響行內框的高度。由一行形成的水平框稱為行框(Line Box),行框的高度總是足以容納它包含的所有行內框。不過,設置行高可以增加這個框的高度。

10.絕對定位布局

絕對定位布局就是使用position屬性實現的網頁布局,是CSS中規定的第三種定位機制。它除了能實現橫向多列布局以外,還可以實現許多復雜的定位,例如:

  1. 帶有遮罩層效果的提示框
Paste_Image.png

2.固定層效果

Paste_Image.png
  1. 全屏廣告
Paste_Image.png

position屬性擁有三種定位形式:

  1. 靜態定位
  2. 相對定位
  3. 絕對定位

要使元素進行絕對定位可以使用position屬性來設置,它可以設置四個屬性值,即四種定位,分別是:

  1. static(靜態定位):

元素框正常生成。塊級元素生成一個矩形框,作為文檔流的一部分,行內元素則會創建一個或多個行框,置于其父元素中。

  1. relative(相對定位):

特點:
1.相對于自身原有位置進行偏移。
2.元素仍處于文檔流中,這也就意味著它會占據標準文檔流的空間。
3.一旦設置相對定位,元素隨即擁有偏移屬性和z-index屬性(設置偏移屬性之后可能會產生空間的層堆疊,對后面的元素形成遮蓋,如下圖所示。這時可以通過設置 [z-index 屬性]來控制這些框的堆放次序)。


Paste_Image.png
  1. absolute(絕對定位):

特點:
1.建立了以包含塊為基準的定位。
2.完全脫離了標準文檔流,元素原先在正常文檔流中所占的空間會關閉,就好像元素原來不存在一樣。當一個元素設置絕對定位,沒有設置寬度時,元素的寬度根據內容進行調節。
3.當元素設置為絕對定位后,元素也會 多出兩類屬性:偏移量屬性 和 Z-index屬性,與相對定位不同的是:

  1. 該元素已經脫離了標準文檔流(不占位)
  2. 建立的定位基準不是該元素的原來位置,而是分兩種情況:
    2.1:沒有設置偏移量,特點:無論是否存在已定位的祖先元素,都保持在元素初始位置;脫離文檔流;寬度塌陷(隨內容變化而變化)
    2.2:設置了偏移量:又分兩種情況(A.無已定位的祖先元素 B.有已定位的祖先元素)
    A.無已定位的祖先元素:它會以根節點(<html>)為偏移參照基準
    B.有已定位的祖先元素:它會以距其最近的已定位祖先元素為偏移參照基準 (通過為元素賦予position:relative、position:absolute或者position:fixed對其進行定位,已定位的祖先元素意思就是通過這三種方式已經定位完成了)

絕對定位不在文檔流中(不會占位置,寬度及長度顯示隨內容增減而增減

  1. fixed(固定定位):

元素框的表現類似于將 position 設置為 absolute,不過其包含塊是視窗本身。

相對定位實際上被看作普通流定位模型的一部分,因為元素的位置相對于它在普通流中的位置。

absolute(絕對定位)和fixed(固定定位)都屬于絕對定位形式

使用絕對定位ablolute實現橫向兩列布局 — 常用于一列固定寬度,另一列寬度自適應的情況

主要應用技能:

  1. relative—父元素相對定位
  2. absolute—自適應寬度的元素絕對定位

注意:固定寬度列的高度>自適應寬度的列(因為絕對定位的元素會導致父元素高度塌陷,所以一定要保證固定寬度列的高度>自適應寬度的列,才能讓絕對定位元素放進父容器里)

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

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,783評論 1 92
  • 網頁布局基礎 什么是網頁布局?網頁布局是網頁制作的基礎(DIV+CSS網頁布局) 分類:流式布局,浮動布局,絕對定...
    單純的土豆閱讀 1,851評論 0 6
  • 基本網頁布局一般分為三種:1)流式布局2)浮動布局3)絕對定位布局 css中的定位機制:1)標準文檔流特點:a.從...
    c05436bafae5閱讀 634評論 0 0
  • W3C標準 結構化標準語言HTML/XML 表現標準語言CSS 行為標準語言DOM/JavaScript 盒子模型...
    GRID_JS閱讀 369評論 0 0
  • http://www.w3cplus.com/css/advanced-html-css-lesson2-deta...
    小天工作閱讀 762評論 0 0