CSS(盒模型,布局模型)

盒子模型

如果你看過很多教程依然學不會盒子模型,那么請你耐心看完這篇.

盒子模型3D層次結構:

從第一層到第五層依次為:border、content+padding、background-image、background-color、margin。


內邊距:padding

外邊距:margin


padding:

可以這樣設置 padding :top right bottom left ?(記憶訣竅 ?時鐘的順時針旋轉)

? ?1.規則如果只設置1個值 則默認會將四個方向的值設置為這個值?

? ? 2.如果設置2個值,那么會默認將第一個值設置為上下 ?第二個值設置為左右

? ? 3.如果設置3個值,那么第一個為上 ?,第二個為左右 ?,第三個為下.

? ? 4.如果設置為4個值 ,那么對應上下左右

總結:對稱,順時針,有順序要求

特點:設置padding屬性會撐大容器.?


盒模型寬度和高度和我們平常所說的物體的寬度和高度理解是不一樣的,css內定義的寬(width)和高(height),指的是填充以里的內容范圍。

因此一個元素實際寬度(盒子的寬度)=左邊界+左邊框+左填充+內容寬度+右填充+右邊框+右邊界。

元素的高度也是同理。

比如:

css代碼:

div{

width:200px;

padding:20px;

border:1px solid red;

margin:10px;

}

html代碼:

文本內容

元素的實際長度為:10px+1px+20px+200px+20px+1px+10px=262px。在chrome瀏覽器下可查看元素盒模型,如下圖:


css布局模型

清楚了CSS 盒模型的基本概念、 盒模型類型, 我們就可以深入探討網頁布局的基本模型了。布局模型與盒模型一樣都是 CSS 最基本、 最核心的概念。 但布局模型是建立在盒模型基礎之上,又不同于我們常說的 CSS 布局樣式或 CSS 布局模板。如果說布局模型是本,那么 CSS 布局模板就是末了,是外在的表現形式。

CSS包含3種基本的布局模型,用英文概括為:Flow、Layer 和 Float。

在網頁中,元素有三種布局模型:

1、流動模型(Flow)

流動模型(一)

先來說一說流動模型,流動(Flow)是默認的網頁布局模式。也就是說網頁在默認狀態下的 HTML 網頁元素都是根據流動模型來分布網頁內容的。

流動布局模型具有2個比較典型的特征:

第一點,塊狀元素都會在所處的包含元素內自上而下按順序垂直延伸分布,因為在默認狀態下,塊狀元素的寬度都為100%。實際上,塊狀元素都會以行的形式占據位置。如右側代碼編輯器中三個塊狀元素標簽(div,h1,p)寬度顯示為100%


流動模型(二)

第二點,在流動模型下,內聯元素都會在所處的包含元素內從左到右水平分布顯示。(內聯元素可不像塊狀元素這么霸道獨占一行)

右側代碼編輯器中內聯元素標簽a、span、em、strong都是內聯元素。



2、浮動模型 (Float)


塊狀元素這么霸道都是獨占一行,如果現在我們想讓兩個塊狀元素并排顯示,怎么辦呢?不要著急,設置元素浮動就可以實現這一愿望。

任何元素在默認情況下是不能浮動的,但可以用 CSS 定義為浮動,如 div、p、table、img 等元素都可以被定義為浮動。如下代碼可以實現兩個 div 元素一行顯示。

div{? ? width:200px;? ? height:200px;? ? border:2px red solid;float:left;}

效果圖

當然你也可以同時設置兩個元素右浮動也可以實現一行顯示。

div{? ? width:200px;? ? height:200px;? ? border:2px red solid;float:right;}

效果圖

又有小伙伴問了,設置兩個元素一左一右可以實現一行顯示嗎?當然可以:

div{? ? width:200px;? ? height:200px;? ? border:2px red solid;}#div1{float:left;}#div2{float:right;}

效果圖

浮動會影響相鄰的下一個元素,我們可以使用2種方法去清除浮動

(一) ?給相鄰的下一個元素設置 ?clear屬性 -常用?

? ? ? ? ? ?1.clear:both; ? ?全部清除

? ? ? ? ? ?2.clear:left ; ? ?清除左浮動

? ? ? ? ? ?3. clear:right ? 清除右浮動

(二) ?給相鄰的下一個元素設置 ?width:100%(或者固定寬度) +overflow:hidden;?


3、層模型(Layer)


什么是層布局模型?層布局模型就像是圖像軟件PhotoShop中非常流行的圖層編輯功能一樣,每個圖層能夠精確定位操作,但在網頁設計領域,由于網頁大小的活動性,層布局沒能受到熱捧。但是在網頁上局部使用層布局還是有其方便之處的。下面我們來學習一下html中的層布局。

如何讓html元素在網頁中精確定位,就像圖像軟件PhotoShop中的圖層一樣可以對每個圖層能夠精確定位操作。CSS定義了一組定位(positioning)屬性來支持層布局模型。

層模型有三種形式:

1、絕對定位(position: absolute)

層模型--絕對定位

如果想為元素設置層模型中的絕對定位,需要設置position:absolute(表示絕對定位),這條語句的作用將元素從文檔流中拖出來,然后使用left、right、top、bottom屬性相對于其最接近的一個具有定位屬性的父包含塊進行絕對定位。如果不存在這樣的包含塊,則相對于<html>元素,即相對于瀏覽器窗口。

如下面代碼可以實現div元素相對于瀏覽器窗口向右移動100px,向下移動50px。

div{? ? width:200px;? ? height:200px;? ? border:2px red solid;position:absolute;

left:100px;

top:50px;}

效果如下:

絕對定位容易弄混的地方:

1.完全脫離標準文檔流

2.建立了以包含塊為基準的定位

3.隨即擁有偏移屬性和z-index屬性


第一種沒有:

偏移的參照基準(沒有設置偏移量的情況) ?

?特點:

1.無論是否存在已定位祖先元素,都保持在初識位置

2.脫離了標準的文檔流

3,寬度如果不設置,那么隨著內容變化而變化

第二種設置了偏移量:

? ? ? 分二種情況:

? ? ? ? ? ? 1.無已定位祖先元素 ?,會以根節點為偏移參照基準<html>,并不是body


? ? ? ? ? ? 2.有已定位祖先元素 ? ,以距離最近的已定位祖先元素為偏移參照基準


? ? ? ? ? ? 3.有多個定位祖先,距離最近的定位元素為準.

2、相對定位(position: relative)


如果想為元素設置層模型中的相對定位,需要設置position:relative(表示相對定位),它通過left、right、top、bottom屬性確定元素在正常文檔流中的偏移位置。相對定位完成的過程是首先按static(float)方式生成一個元素(并且元素像層一樣浮動了起來),然后相對于以前的位置移動,移動的方向和幅度由left、right、top、bottom屬性確定,偏移前的位置保留不動。

如下代碼實現相對于以前位置向下移動50px,向右移動100px;

#div1{

width:200px;

height:200px;

border:2px red solid;

position:relative;

left:100px;

top:50px;

}

效果圖:

什么叫做“偏移前的位置保留不動”呢?

大家可以做一個實驗,在右側代碼編輯器的19行div標簽的后面加入一個span標簽,在標并在span標簽中寫入一些文字。如下代碼:


偏移前的位置還保留不動,覆蓋不了前面的div沒有偏移前的位置

效果圖:

從效果圖中可以明顯的看出,雖然div元素相對于以前的位置產生了偏移,但是div元素以前的位置還是保留著,所以后面的span元素是顯示在了div元素以前位置的后面。

relative; 他的意思是絕對相對定位,他是參照父級的原始點為原始點,無父級則以body的原始點為原始點,當父級內有padding等CSS屬性時,當前級的原始點則參照父級內容區的原始點進行定位.

relative和absolute的一個很重要的區別就是當被定義成absolute的對象被移出了,那么他原來的位置也就不存在了,

如果被定義成relative的對象被移出了 他原來的位置還在,別的元素就不能替代這個位置.

3、固定定位(position: fixed)

fixed:表示固定定位,與absolute定位類型類似,但它的相對移動的坐標是視圖(屏幕內的網頁窗口)本身。由于視圖本身是固定的,它不會隨瀏覽器窗口的滾動條滾動而變化,除非你在屏幕中移動瀏覽器窗口的屏幕位置,或改變瀏覽器窗口的顯示大小,因此固定定位的元素會始終位于瀏覽器窗口內視圖的某個位置,不會受文檔流動影響,這與background-attachment:fixed?屬性功能相同。以下代碼可以實現相對于瀏覽器視圖向右移動100px,向下移動50px。并且拖動滾動條時位置固定不變。

#div1{

width:200px;

height:200px;

border:2px red solid;

position:fixed;

left:100px;

top:50px;

}

文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。

....

任務

我也來試試,實現瀏覽器視圖右下角定位div層。

1、在右側代碼編輯器中的第11行輸入:

position:fixed;

bottom:0;

right:0;



Relative與Absolute組合使用

小伙伴們學習了12-6小節的絕對定位的方法:使用position:absolute可以實現被設置元素相對于瀏覽器(body)設置定位以后,大家有沒有想過可不可以相對于其它元素進行定位呢?答案是肯定的,當然可以。使用position:relative來幫忙,但是必須遵守下面規范:

1、參照定位的元素必須是相對定位元素的前輩元素:

相對參照元素進行定位

從上面代碼可以看出box1是box2的父元素(父元素當然也是前輩元素了)。

2、參照定位的元素必須加入position:relative;

#box1{? ? width:200px;? ? height:200px;position:relative;}

3、定位元素加入position:absolute,便可以使用top、bottom、left、right來進行偏移定位了。

#box2{position:absolute;

top:20px;

left:30px;}

這樣box2就可以相對于父元素box1定位了(這里注意參照物就可以不是瀏覽器了,而可以自由設置了)。

任務

我也來試一試:我們把右側任務區中的box4當做是圖片的講解文本。

具體要求:

1、把box4定位到圖片(box3)的底部。

效果圖如下:


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

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,778評論 1 92
  • 慕課網: HTML+CSS基礎課程 一、元素分類 在講解CSS布局之前,我們需要提前知道一些知識,在CSS中,ht...
    CAICL閱讀 503評論 0 2
  • 一 外部式css樣式 (也可稱為外聯式)就是把css代碼寫一個單獨的外部文件中,這個css樣式文件以“.css...
    KunMitnic閱讀 952評論 0 1
  • 本課來自http://www.imooc.com/learn/9請不要用作商業用途。 HTML5 HTML介紹 H...
    PYLON閱讀 3,285評論 0 5
  • 我不知道我生意好用嗎寶寶哈倫褲男寶寶哈倫褲男寶寶哈倫褲男寶寶哈倫褲男寶寶哈倫褲男寶寶哈倫褲男寶寶哈倫褲男寶寶哈倫褲男寶寶
    諾諾宸閱讀 182評論 0 0