學習要點
- 盒子模型
- 標准文檔流
- 網頁布局
- 浮動
- 清除浮動
- 溢出處理
- 定位在網頁中的應用
- position屬性
- z-index屬性
盒子模型
定義
https://www.cnblogs.com/rask/p/9913070.html
盒子模型的三維立體層次結構圖
在網頁中看到的網頁內容,都是盒子模型的三維立體結構多層疊加的最終效果。從這里可以看出,如果對某個頁面元素同時設置背景圖像和背景顏色,則背景圖像將在背景顏色的上方顯示(實際設計時候可以考慮背景色和背景圖片顏色相近,避免背景圖片丟失導致體驗感下降)。
盒子模型屬性介紹
1、邊框
邊框共有三個屬性:color,width,style
border-color
屬性 |
說明 |
示例 |
border-top-color |
邊框顏色 |
border-top-color:#369; |
border-right-color |
邊框顏色 |
border-right-color:#369; |
border-bottom-color |
邊框顏色 |
border-bottom-color:#fae45b; |
border-left-color |
左邊框顏色 |
border-left-color:#efcd56; |
border-color |
四個邊框為同一顏色 |
border-color:#eeff34; |
上、下邊框顏色:#369 左、右邊框顏色:#000 |
border-color:#369 #000; |
|
上邊框顏色:#369 左、右邊框顏色:#000 下邊框顏色:#f00 |
border-color:#369 #000 #f00; |
|
上、右、下、左邊框顏色:#369、#000、#f00、#00f |
border-color:#369 #000 #f00 #00f; |
border-width
值:thin,medium,thick,像素值
設置方式與border-color設置方式類似。
示例:
border-style
值:none,solid,dotted……
設置方式與border-color設置方式類似。
示例:
border屬性簡寫
border-bottom: 9px #F00 dashed ; border: 9px #F00 dashed ;
參數順序沒有強制要求,建議順序:粗細、顏色、樣式
2、外邊距
margin-top、margin-right
margin-bottom、margin-left
margin
示例:
外邊距的重要應用,網頁居中對齊:(元素要先設置寬度,否則無效)
margin:0px auto;
3、內邊距
padding-left、padding-right
padding-top、padding-bottom
padding
示例:
盒子模型尺寸計算
盒子模型總尺寸=border-width+padding+margin+內容寬度
注意:默認情況下,在樣式表中設置的width和height屬性是指內容的寬度和高度。
box-sizing
1、語法
box-sizing: content-box | border-box | inherit:
2、解釋
盒子模型的總尺寸是是按照默認方式還是按照內容尺寸計算。
3、參數說明
4、示例代碼
<head lang="en"> <meta charset="UTF-8"> <title>box-sizing</title> <style> #div1{ width: 100px; height: 100px; padding: 5px; margin: 10px; border: 1px solid #000000; box-sizing: border-box; /*box-sizing: content-box; /!* 默認值*!/*/ } #div2{ width: 100px; height: 100px; padding: 5px; margin: 10px; border: 1px solid #000000; /*box-sizing: border-box;*/ box-sizing: content-box; } </style> </head> <body> <div id="div1"></div> <br> <div id="div2"></div> </body>
圓角邊框
1、語法
border-radius;
2、示例代碼
border-radius: 20px 10px 50px 30px;
3、效果
4、使用border-radius制作特殊圖形
4.1 圓形
利用border-radius屬性制作圓形的兩個要點:元素的寬度和高度必須相同;圓角的半徑為元素寬度的一半,或者直接設置圓角半徑值為50%。
div{ width: 100px; height: 100px; border: 4px solid red; border-radius: 50%; }
效果:
4.2 半圓形
利用border-radius屬性制作半圓形的兩個要點:制作上半圓或下半圓時,元素的寬度是高度的2倍,而且圓角半徑為元素的高度值;制作左半圓或右半圓時,元素的高度是寬度的2倍,而且圓角半徑為元素的寬度值。
<head lang="en"> <meta charset="UTF-8"> <title>border-radius制作半圓形</title> <style> div{ background: red; margin: 30px; } div:nth-of-type(1){ width: 100px; height: 50px; border-radius: 50px 50px 0 0; } div:nth-of-type(2){ width: 100px; height: 50px; border-radius:0 0 50px 50px; } div:nth-of-type(3){ width: 50px; height: 100px; border-radius:0 50px 50px 0; } div:nth-of-type(4){ width: 50px; height: 100px; border-radius: 50px 0 0 50px; } </style> </head> <body> <div></div><div></div> <div></div><div></div> </body>
效果圖:
4.3 扇形
利用border-radius屬性制作扇形遵循“三同,一不同”原則:“三同”是元素寬度、高度、圓角半徑相同;“一不同”是圓角取值位置不同。
<head lang="en"> <meta charset="UTF-8"> <title>border-radius制作扇形</title> <style> div{ background: red; margin: 30px; } div:nth-of-type(1){ width: 50px; height: 50px; border-radius: 50px 0 0 0; } div:nth-of-type(2){ width: 50px; height: 50px; border-radius:0 50px 0 0; } div:nth-of-type(3){ width: 50px; height: 50px; border-radius:0 0 50px 0; } div:nth-of-type(4){ width: 50px; height: 50px; border-radius: 0 0 0 50px; } </style> </head> <body> <div></div> <div></div> <div></div> <div></div> </body>
效果圖:
盒子陰影
1、語法
box-shadow:inset x-offset y-offset blur-radius color;
2、參數說明
inset:陰影類型——內陰影。不指定則為外陰影。
x-offset:X軸位移,指定陰影水平位移量
y-offset:Y軸位移,用來指定陰影垂直位移量
blur-radius:陰影模糊半徑陰影向外模糊的模糊范圍
color:陰影顏色,定義繪制陰影時所使用的顏色
3、瀏覽器兼容性
4、示例代碼
<head lang="en"> <meta charset="UTF-8"> <title>box-shadow的使用</title> <style> div{ width: 100px; height: 100px; border: 1px solid red; border-radius: 8px; margin: 20px; /*box-shadow: 20px 10px 10px #06c;*/ /*外陰影*/ /*box-shadow: 0px 0px 20px #06c;*/ /*只設置模糊半徑的外陰影*/ box-shadow: inset 3px 3px 10px #06c; /*內陰影*/ } </style> </head> <body> <div></div></body>
5、效果圖
網頁布局
常見布局
網頁常見構成部分:網站導航、網頁主題內容、網站版權3個部分。
網頁布局類型有:“國”字形,拐角形,標題正文型,左右框架型,綜合框架型,封面型,Flash型,變化型。
最常見類型:“國字型”,也稱為1-3-1型;“拐角型”,1-2-1型。
1-3-1型網頁:京東、天貓超市、當當、鐵路客服中心、廈門人才網、鳳凰網……
1-2-1型網頁:孔夫子舊書網、科學公園……
塊元素排一行方法
可以使用什么屬性使塊元素排在一行?
- inline-block
- float
浮動
1、問題:如何網頁布局?
在標准文檔流中,一個塊級元素在水平方向上回自動伸展,直到包含它的元素的邊界,在豎直方向和其他塊級元素依次排列。
2、浮動在網頁中的應用
橫向導航
商品列表
3、float屬性
示例代碼html
<body> <div id="father"> <div class="layer01"><img src="image/photo-1.jpg" alt="日用品" /></div> <div class="layer02"><img src="image/photo-2.jpg" alt="圖書" /></div> <div class="layer03"><img src="image/photo-3.jpg" alt="鞋子" /></div> <div class="layer04">浮動的盒子可以向左浮動,也可以向右浮動,直到它的外邊緣碰到包含框或另一個浮動盒子為止。本網頁中共有三個圖片,分別代表日用品圖片、圖書圖片和鞋子圖片。這里使用這三個圖片和本段文字來演示講解浮動在網頁中的應用,根據需要圖片所在的div分別向左浮動、向右浮動,或者不浮動。</div> </div> </body>
示例代碼css:
@charset "gb2312"; /* CSS Document */ div { margin:10px; padding:5px; } #father { border:1px #000 solid; /*overflow: hidden;*/ } .layer01 { border:1px #F00 dashed; float: left; } .layer02 { border:1px #00F dashed; float: left; } .layer03 { border:1px #060 dashed; float: right; } .layer04 { border:1px #666 dashed; font-size:12px; line-height:23px; /* float: left; clear: both;*/ }
示例步驟
1) 設置layer01左浮動
2) 設置layer02左浮動
3) 設置layer03左浮動
4) 設置layer01右浮動
5) 設置layer02右浮動
邊框塌陷
layer04設置寬度和右浮動后,father邊框塌陷了,如何解決?
原因:浮動元素脫離標准文檔流
解決方案:清除浮動
清除浮動
1、清除浮動影響-clear屬性
2、清除兩側浮動:
.layer04 {clear:both;}
3、示例
浮動演示示例繼續演示,文本div的clear屬性設置
1) 清除左側浮動
2) 清除右側浮動
3) 清除兩側浮動
擴展盒子高度(解決父級元素邊框塌陷)
1、父級元素邊框塌陷
網頁中的浮動元素脫離了標准流,導致影響父層高度。
示例中的文本div左浮動,導致id為father的div高度縮成條狀。換句話說,一個div的范圍是由它里面的標准文檔流的內容決定的,與里面的浮動內容更無關。
那么,如何在視覺上讓father包圍浮動元素呢?
2、解決方案一:添加div
在所有浮動的div之后添加一個div,這個div的css的clear屬性設置為:both。
特點:簡單,空div會造成HTML代碼冗余。
3、解決方案二:設定父級元素高度
#father {height: 400px; border:1px #000 solid; }
特點:簡單,元素固定高會降低擴展性。
4、解決方案三:父級元素添加overflow屬性
overflow屬性下一小節詳細講解
#father {overflow: hidden;border:1px #000 solid; }
特點:簡單,下拉列表框的場景不能用。
5、解決方案四:父級添加偽類after(推薦方案)
示例代碼:
<div id="father" class="clear"> <div class="layer01"><img src="image/photo-1.jpg" alt="日用品" /></div> <div class="layer02"><img src="image/photo-2.jpg" alt="圖書" /></div> <div class="layer03"><img src="image/photo-3.jpg" alt="鞋子" /></div> <div class="layer04">浮動的盒子……</div> </div> .clear:after{ content: ''; /*在clear類后面添加內容為空*/ display: block; /*把添加的內容轉化為塊元素*/ clear: both; /*清除這個元素兩邊的浮動*/ }
特點:寫法稍微復雜一點,但是沒有副作用,推薦使用
溢出處理
擴展盒子高度可以使用添加div來處理,但是增加了html代碼。實際上有比添加代碼更優雅的處理方式,css的overflow屬性。
1、overflow屬性
2、擴展父元素的高度
3、注意
但是如果頁面中有絕對定位元素,並且絕對定位的元素超出了父級的范圍,這里使用overflow屬性就不合適了,而需要使用clear屬性來清除浮動。
inline-block和float的區別
display:inline-block
可以讓元素排在一行,並且支持寬度和高度,代碼實現起來方便;位置方向不可控制,會解析空格;IE 6、IE 7上不支持。
float
可以讓元素排在一行並且支持寬度和高度,可以決定排列方向;float 浮動以后元素脫離文檔流,會對周圍元素產生影響,必須在它的父級上添加清除浮動的樣式。
定位網頁元素
絕對定位
在CSS中有三種基本的網頁定位機制:標准流、浮動和絕對定位。
什么是絕對定位?
1、下拉菜單
2、浮動圖片
3、選擇窗口
這些效果需要使用position屬性或者position屬性與z-index屬性結合來實現。
position屬性
static
制作一個static的demo:沒有定位,以標准流方式顯示。
relative
1、說明
相對自身原來位置進行偏移
偏移設置:top、left、right、bottom
2、偏移量方向:
3、相對定位元素規律:
- 設置相對定位的盒子會相對它原來的位置,通過指定偏移,到達新的位置。
- 設置相對定位的盒子仍在標准流中,它對父級盒子和相鄰的盒子都沒有任何影響。
- 設置相對定位的盒子原來的位置會被保留下來。
浮動元素相對定位
設置第二個盒子右浮動,再設置第一、第二盒子相對定位。
結論:設置了position屬性值為relative的網頁元素,無論是在標准流中還是在浮動流中,都不會對它的父級元素和相鄰元素有任何影響,它只針對自身原來的位置進行偏移。
absolute
偏移設置: left、right、top、botto
結論:
- 使用了絕對定位的元素以它最近的一個“已經定位”的“祖先元素” 為基准進行偏移。
- 如果沒有已經定位的祖先元素,那么會以瀏覽器窗口為基准進行定位。
- 絕對定位的元素從標准文檔流中脫離,這意味着它們對其他元素的定位不會造成影響。
- 元素位置發生偏移后,它原來的位置不會被保留下來。
絕對定位不設置偏移量
1、示例代碼
2、結論
- 設置了絕對定位但沒有設置偏移量的元素將保持在原來的位置。
- 在網頁制作中可以用於需要使某個元素脫離標准流,而仍然希望它保持在原來的位置的情況。
定位總結
1、相對定位
相對定位的特性
- 相對於自己的初始位置來定位。
- 元素位置發生偏移后,它原來的位置會被保留下來。
- 層級提高,可以把標准文檔流中的元素及浮動元素蓋在下邊。
相對定位的使用場景
- 相對定位一般情況下很少自己單獨使用,都是配合絕對定位使用,為絕對定位創造定位父級而又不設置偏移量。
2、絕對定位
絕對定位的特性
- 絕對定位是相對於它的定位父級的位置來定位,如果沒有設置定位父級,則相對瀏覽器窗口來定位。
- 元素位置發生偏移后,原來的位置不會被保留。
- 層級提高,可以把標准文檔流中的元素及浮動元素蓋在下邊。
- 設置絕對定位的元素脫離文檔流。
絕對定位的使用場景
- 一般情況下,絕對定位用在下拉菜單、焦點圖輪播、彈出數字氣泡、特別花邊等場景。
3、固定定位
固定定位的特性
- 相對瀏覽器窗口來定位。
- 偏移量不會隨滾動條的移動而移動。
固定定位的使用場景
- 一般在網頁中被用在窗口左右兩邊的固定廣告、返回頂部圖標、吸頂導航欄等。
z-index屬性
1、定義
- 調整元素定位時重疊層的上下位置。屬性值:整數,默認值為0。
- 設置了positon屬性時,z-index屬性可以設置各元素之間的重疊高低關系。
- z-index值大的層位於其值小的層上方。
2、透明度設置
備注:早期版本瀏覽器支持filter,新版本瀏覽器支持opacity。實際項目中,為了兼容所有瀏覽器,通常兩種屬性都設置。
演示示例:z-index屬性。文本不清晰,可以調整文本的z-index值。
結論:
- 網頁中的元素都含有兩個堆疊層級:
a、一個是未設置絕對定位時所處的環境,此時z-index是0;
b、另一個是設置絕對定位時所處的堆疊環境,此時層的位置由z-index的值確定。
- 改變設置絕對定位和沒有設置絕對定位的層的上下堆疊順序,只需調整絕對定位層的z-index值即可。