握CSS盒子模型:一站式指南-CSDN博客
作用:根據元素的結構關系查找元素。
選擇器 | 說明 |
E:first-child | 匹配父元素的第一個子元素E |
E:last-child | 匹配父元素的最后一個子元素E |
E:nth-child(n) | 匹配父元素的第n個子元素E |
E:nth-last-child(n) | 匹配父元素的倒數第n個子元素E |
E:first-of-type | 匹配父元素下同類型元素中的第一個E |
E:last-of-type | 匹配父元素下同類型元素中的最后一個E |
E:nth-of-type(n) | 匹配父元素下同類型元素中的第n個E |
E:nth-last-of-type(n) | 匹配父元素下同類型元素中的倒數第n個E |
以下是針對:nth-child()偽類中公式的說明表格:
功能 | 公式 |
匹配第n個子元素 | :nth-child(n) |
匹配偶數位置的子元素 | :nth-child(2n) |
匹配奇數位置的子元素 | :nth-child(2n+1) |
匹配前n個子元素 | :nth-child(-n+3) |
匹配后n個子元素 | :nth-last-child(n) |
匹配倒數第n個子元素 | :nth-last-child(-n) |
匹配從第n個開始的子元素 | :nth-child(n+x) |
匹配從第n個結束的子元素 | :nth-last-child(n+x) |
這些公式可以用于選擇符合特定條件的子元素,并為它們應用樣式。
作用:創(chuàng)建虛擬元素(偽元素),用來擺放裝飾性的內容。
div::before {
content: "before 偽元素";
}
div::after {
content: "after 偽元素";
}
注意點:
擴展:PxCook(像素大廚) 是一款切圖設計工具軟件。
作用:布局網頁,擺放盒子和內容。
div {
margin: 50px;
border: 5px solid brown;
padding: 20px;
width: 200px;
height: 200px;
background-color: pink;
}
屬性名:border(bd)
屬性值:邊框線粗細 線條樣式 顏色(不區(qū)分順序)
以下是關于表框線屬性的表格:
屬性值 | 線條樣式 |
none | 無 |
hidden | 隱藏 |
dotted | 點線 |
dashed | 虛線 |
solid | 實線 |
double | 雙實線 |
groove | 凹槽效果 |
ridge | 凸起效果 |
inset | 內陰影效果 |
outset | 外陰影效果 |
這些屬性值可用于控制表框線的樣式,從而實現不同的外觀效果。
div {
border: 5px solid brown;
width: 200px;
height: 200px;
background-color: pink;
}
嘗試一下>>>菜鳥教程在線編輯器
屬性名:border-方位名詞(bd+方位名詞首字母,例如,bdl)
屬性值:邊框線粗細 線條樣式 顏色(不區(qū)分順序)
div {
border-top: 2px solid red;
border-right: 3px dashed green;
border-bottom: 4px dotted blue;
border-left: 5px solid orange;
width: 200px;
height: 200px;
background-color: pink;
}
作用:設置 內容 與 盒子邊緣 之間的距離。
div {
/* 四個方向 內邊距相同 */
padding: 30px;
/* 單獨設置一個方向內邊距 */
padding-top: 10px;
padding-right: 20px;
padding-bottom: 40px;
padding-left: 80px;
width: 200px;
height: 200px;
background-color: pink;
}
提示:添加 padding 會撐大盒子。
取值個數 | 示例 | 含義 |
1 | padding: 10px; | 設置四個方向的內邊距為10像素 |
2 | padding: 10px 20px; | 設置上下內邊距為10像素,左右內邊距為20像素 |
3 | padding: 10px 20px 15px; | 設置上內邊距為10像素,左右內邊距為20像素,下內邊距為15像素 |
4 | padding: 10px 20px 15px 25px; | 分別設置上、右、下、左內邊距為10、20、15、25像素 |
這些多值寫法可以用于同時設置不同方向的內邊距。
技巧:從上開始順時針賦值,當前方向沒有數值則與對面取值相同。
默認情況:盒子尺寸 = 內容尺寸 + border 尺寸 + 內邊距尺寸
結論:給盒子加 border / padding 會撐大盒子
解決:
作用:拉開兩個盒子之間的距離
屬性名:margin
提示:與 padding 屬性值寫法、含義相同
左右 margin 值 為 auto(盒子要有寬度)
div {
margin: 0 auto;
width: 1000px;
height: 200px;
background-color: pink;
}
清除標簽默認的樣式,比如:默認的內外邊距。
/* 清除默認內外邊距 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* 清除列表項目符號 */
li {
list-style: none;
}
作用:控制溢出元素的內容的顯示方式。
屬性名:overflow
屬性值 | 效果 |
visible | 默認值,溢出內容可見,不會出現滾動條。 |
hidden | 溢出內容被隱藏,不可見。 |
scroll | 溢出內容被隱藏,但會顯示滾動條。 |
auto | 當內容溢出時顯示滾動條,沒有溢出時不顯示滾動條。 |
這些屬性值用于控制元素在內容溢出時的行為,如是否顯示滾動條以及如何處理溢出內容。
場景:垂直排列的兄弟元素,上下 margin 會合并
現象:取兩個 margin 中的較大值生效
.one {
margin-bottom: 50px;
}
.two {
margin-top: 20px;
}
場景:父子級的標簽,子級的添加 上外邊距 會產生塌陷問題
現象:導致父級一起向下移動
.son {
margin-top: 50px;
width: 100px;
height: 100px;
background-color: orange;
}
解決方法:
提示:設置子集 display: inline-block; 也能解決此問題;注意多個子集控件的情況。
嘗試一下>>>菜鳥教程在線編輯器
場景:行內元素添加 margin 和 padding,無法改變元素垂直位置
解決方法:給行內元素添加 line-height 可以改變垂直位置
span {
/* margin 和 padding 屬性,無法改變垂直位置 */
margin: 50px;
padding: 20px;
/* 行高可以改變垂直位置 */
line-height: 100px;
}
作用:設置元素的外邊框為圓角。
屬性名:border-radius
屬性值:數字+px / 百分比
提示:屬性值是圓角半徑盒子陰影(拓展)
取值個數 | 示例 | 含義 |
1 | border-radius: 10px; | 設置四個角的圓角半徑都為10像素 |
2 | border-radius: 10px 20px; | 設置水平方向上的圓角半徑為10像素,垂直方向上的圓角半徑為20像素 |
3 | border-radius: 10px 20px 15px; | 設置左上角和右下角的圓角半徑為10像素,右上角和左下角的圓角半徑為20像素和15像素 |
4 | border-radius: 10px 20px 15px 25px; | 分別設置左上、右上、右下、左下的圓角半徑為10、20、15、25像素 |
技巧:從左上角開始順時針賦值,當前角沒有數值則與對角取值相同。
img {
width: 200px;
height: 200px;
border-radius: 100px;
border-radius: 50%;
}
div {
width: 200px;
height: 80px;
background-color: orange;
border-radius: 40px;
}
作用:給元素設置陰影效果
屬性名:box-shadow
屬性值:X 軸偏移量 Y 軸偏移量 模糊半徑 擴散半徑 顏色 內外陰影
注意:
嘍大家好,我是作者“未來”,本期分享的內容是Web前端系列課程,本系列總共29個階段,堅持學習3個月蛻變?yōu)閃eb前端高手哦!
志同道合的小伙伴跟我一起學習交流哦!
其實,CSS就三個大模塊:盒子模型、浮動、定位,其余的都是細節(jié)。要求這三部分,無論如何也要學的非常精通。
所謂盒子模型就是把HTML頁面中的元素看作是一個矩形的盒子,也就是一個盛裝內容的容器。每個矩形都由元素的內容、內邊距( padding)、邊框( border)和外邊距( margin)組成。
1 看透網頁布局本質
網頁布局中,我們是如何把里面的文字,圖片,按照美工給我們的效果圖排列的整齊有序呢?
我們說過,行內元素比如文字類似牛奶,也需要一個盒子把他們裝起來,我們前面學過的雙標簽都是一個盒子。有了盒子,我們就可以隨意的,自由的,擺放位置了。
網頁布局的本質:把網頁元素 比如文字圖片等等,放入盒子里面,然后利用CSS擺放盒子的過程,就是網頁布局。
CSS其實沒有太多邏輯可言,類似我們小時候玩的積木我們可以自由的,隨意的擺放出我們想要的效果。
2 認識盒子模型組成
盒子模型( Box Model)
首先,我們來看一張圖,來體會下什么是盒子模型
所有的文檔元素(標簽)都會生成一個矩形框,我們稱為元素框( element box),它描述了一個文檔元素在網頁布局匯總所占的位置大小。因此,每個盒子除了有自己大小和位置外,還影響著其他盒子的大小和位置。
3 盒子邊框(border)
語法:
邊框屬性——設置邊框樣式( border-stye)
邊框樣式用于定義頁面中邊框的風格,常用屬性值如下:
none:沒有邊框即忽略所有邊框的寬度(默認值)
solid:邊框為單實線(最為常用的)
dashed:邊框為虛線
dotted:邊框為點線
double:邊框為雙實線
4 邊框綜合寫法(一)
5 邊框綜合寫法(二)
6 合并細線表格
以前學過的html表格邊框很粗,這里只需要CSS一句話就可以美觀起來。讓我們真的相信,CSS就是我們的白馬王子(白雪公主)。
Table{ border- collapse:collapse;} collapse單詞是合并的意思border-collapse:collapse:表示邊框合并在一起。
7 圓角矩形
從此以后,我們的世界不只有矩形。 radius半徑(距離)
語法格式:
8 盒子內邊距
padding屬性用于設置內邊距。是指邊框與內容之間的距離。
padding-top:上內邊距
padding-right:右內邊距
padding-bottom:下內邊距
padding-left:左內邊距
注意:后面跟幾個數值表示的意思是不一樣的。
9 fireworks測量工具
類似ps
滴管用來拾取顏色,切片工具用來測量距離。
10 新浪導航欄(一)
案例:要求做出下面的效果
11 新浪導航欄(二)
12 外邊距以及盒子居中對齊
margin屬性用于設置外邊距。設置外邊距會在元素之間創(chuàng)建“空白”,這段空白通常不能放置其他內容。
margin-top:上外邊距
margin-right:右外邊距
margin-bottom:下外邊距
margin-left:上外邊距
margin:上外邊距 右外邊距 下外邊距 左外邊距。 取值順序跟內邊距相同。
外邊距實現盒子居中
可以讓一個盒子實現水平居中,需要滿足以下兩個條件:
1 必須是塊級元素。
2 盒子必須指定了寬度(width)
然后就給左右的外邊距都設置為auto,就可使塊級元素水平居中。
實際工作中常用這種方式進行網頁布局,示例代碼如下:
13 文字、盒子、圖片和背景水平居中的區(qū)別
14 清除內外邊距
為了更方便地控制網頁中的元素,制作網頁時,可使用如下代碼清除元素的默認內外邊距:
15 行內元素上下內外邊距的問題
注意:行內元素是只有左右外邊距的,是沒有上下外邊距的。內邊距,在ie6等低版本瀏覽器也會有問題。
我們盡量不要給行內元素指定上下的內外邊距就好了。
16 外邊距合并(一)
使用 margin定義塊元素的垂直外邊距時,可能會出現外邊距的合并。
相鄰塊元素垂直外邊距的合并當上下相鄰的兩個塊元素相遇時,如果上面的元素有下外邊距 margin-bottom,下面的元素有上外邊距 margin-top,則他們之間的垂直間距不是margin-bottom與 margin-top之和,而是兩者中的較大者。這種現象被稱為相鄰塊元素垂直外邊距的合并(也稱外邊距塌陷)。
解決方案:避免就好了。
17 外邊距合并(二)
嵌套塊元素垂直外邊距的合并
對于兩個嵌套關系的塊元素,如果父元素沒有上內邊距及邊框,則父元素的上外邊距會與子元素的上外邊距發(fā)生合并,合并后的外邊距為兩者中的較大者,即使父元素的上外邊距為0,也會發(fā)生合并。
解決方案:
1.可以為父元素定義1像素的上邊框或上內邊距。
2.可以為父元素添加 overflow:hidden
18 盒子的計算尺寸
content寬度和高度
使用寬度屬性width和高度屬性 height可以對盒子的大小進行控制。
width和 height的屬性值可以為不同單位的數值或相對于父元素的百分比%,實際工作中最常用的是像素值。
大多數瀏覽器,如 Firefox、lE6及以上版本都采用了W3C規(guī)范,符合CSS規(guī)范的盒子模型的總寬度和總高度的計算原則是:
注意:
1、寬度屬性width和高度屬性 height僅適用于塊級元素,對行內元素無效(img標簽和 input除外)。
2、計算盒子模型的總高度時,還應考慮上下兩個盒子垂直外邊距合并的情況。
19 學會計算盒子尺寸(重點)
Padding-left:15px 會讓盒子向右拉長15像素,所以,寬度weidth要減去15px。
20 padding不影響盒子大小的情況
如果一個盒子沒有給定寬度高度或者繼承父親的寬度高度,則 padding不會影響本盒子大小
21 搜索趣圖(一)案例分析
22 搜索趣圖(二)大盒子
23 搜索趣圖(三)標題
24 搜索趣圖(四)
25 搜索趣圖(五)
26 盒子模型布局穩(wěn)定性
開始學習盒子模型,同學們最大的困惑就是,分不清內外邊距的使用,什么情況下使用內邊距,什么情況下使用外邊距?
答案是:其實他們大部分情況下是可以混用的。就是說,你用內邊距也可以,用外邊距也可以。你覺得哪個方便,就用哪個。
但是,總有一個最好用的吧,我們根據穩(wěn)定性來分,建議如下:
按照優(yōu)先使用寬度(width)其次使用內邊距( padding)再次外邊距( margin)。
原因:
1. margin會有外邊距合并還有ie6下面 margin加倍的bug(討厭)所以最后使用。
2. padding會影響盒子大小,需要進行加減計算(麻煩)其次使用。
3. width沒有問題(嗨皮)我們經常使用寬度剩余法、高度剩余法來做。
第一個盒子不是寬度剩余法,后面就是寬度剩余法,解決間距問題。
27 CSS3盒模型
CS53中可以通過box- sazing來指定盒模型,即可指定為 content-box、 border-box,這樣我們計算盒子大小的方式就發(fā)生了改變。
可以分成兩種情況:
1、box-sizing:content-box盒子大小為width+ padding+ border content-box:此值為其默認值,其讓元素維持W3C的標準 Box Mode
2、 box-sizing:border-box盒子大小為width就是說 padding和 border是包含到width里面的。
注:上面的標注的width指的是CSS屬性里設置的width:length, content的值是會自動調整的。
28 盒子陰影
語法格式:
box- shadow:水平陰影 垂直陰影 模糊距離 陰影尺寸 陰影顏色內/外影;
29 水晶圖片案例?
看不懂的小伙伴不要氣餒,后續(xù)的分享中將持續(xù)解釋,只要你跟著我分享的課程從頭到尾去學習,每篇文章看三遍,一個月后,回過頭來看之前的文章就會感覺簡單極了。
本章已結束,下篇文章將分享《11 浮動及應用》小伙伴們不要錯過喲!
這里是云端源想IT,幫你輕松學IT”
嗨~ 今天的你過得還好嗎?
最具勇氣的行為
仍然是獨立思考
并將你的想法大聲公之于世
- 2024.03.25 -
在網絡設計的世界里,盒子模型是構建網頁布局的基石,只有理解了盒子模型,我們才能更好的進行網頁布局。
HTML中的每一個元素都可以看成是一個盒子,擁有盒子一樣的外形和平面空間,它不可見、不直觀,但無處不在,所以初學者很容易在這上面出問題。今天就讓我們來深入了解一下盒子模型。
首先,我們來理解一下什么是CSS盒子模型。
簡單來說,CSS盒子模型是CSS用來管理和布局頁面上每一個元素的一種機制。每個HTML元素都可以被想象成一個矩形的盒子,這個盒子由內容(content)、內邊距(padding)、邊框(border)和外邊距(margin)四個部分組成。
這四個部分共同作用,決定了元素在頁面上的最終顯示效果。
一個盒子由外到內可以分成四個部分:margin(外邊距)、border(邊框)、padding(內邊距)、content(內容)。其中margin、border、padding是CSS屬性,因此可以通過這三個屬性來控制盒子的這三個部分。而content則是HTML元素的內容。
下面來一一介紹盒子模型的各個組成部分:
2.1 內容(Content)
內容是盒子模型的中心,它包含了實際的文本、圖片等元素。內容區(qū)域是盒子模型中唯一不可或缺的部分,其他三部分都是可選的。
內容區(qū)的尺寸由元素的寬度和高度決定,但可以通過設置box-sizing屬性來改變這一行為。
下面通過代碼例子來了解一下內容區(qū):
<!DOCTYPE html>
<html>
<head>
<style>
.box {
width: 200px;
height: 100px;
background-color: lightblue;
border: 2px solid black;
padding: 10px;
margin: 20px;
box-sizing: content-box; /* 默認值 */
}
</style>
</head>
<body>
<div>這是一個盒子模型的例子。</div>
</body>
</html>
在這個例子中,.box類定義了一個具有特定樣式的<div>元素。這個元素的寬度為200px,高度為100px,背景顏色為淺藍色。邊框為2像素寬的黑色實線,內邊距為10像素,外邊距為20像素。
由于我們設置了box-sizing: content-box;(這是默認值),所以元素的寬度和高度僅包括內容區(qū)的尺寸。換句話說,元素的寬度是200px,高度是100px,不包括內邊距、邊框和外邊距。
如果我們將box-sizing屬性設置為border-box,則元素的寬度和高度將包括內容區(qū)、內邊距和邊框,但不包括外邊距。這意味著元素的總寬度將是234px(200px + 2 * 10px + 2 * 2px),高度將是124px(100px + 2 * 10px + 2 * 2px)。
總之,內容區(qū)是CSS盒子模型中的一個核心概念,它表示元素的實際內容所在的區(qū)域。通過調整box-sizing屬性,您可以控制元素尺寸是否包括內容區(qū)、內邊距和邊框。
2.2 內邊距(Padding)
內邊距是內容的緩沖區(qū),它位于內容和邊框之間。通過設置內邊距,我們可以在內容和邊框之間創(chuàng)建空間,讓頁面看起來不會太過擁擠。
內邊距是內容區(qū)和邊框之間的距離,會影響到整個盒子的大小。
代碼示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title></title>
<style type="text/css">
/*
1、 padding-top: ; 上內邊距
padding-left:; 左內邊距
padding-right:; 右內邊距
padding-bottom:; 下內邊距
2、padding簡寫 可以跟多個值
四個值 上 右 下 左
三個值 上 左右 下
二個值 上下 左右
一個值 上下左右
*/
.box1 {
width: 200px;
height: 200px;
background-color: #bfa;
/* padding-top:30px ;
padding-left: 30px;
padding-right: 30px;
padding-bottom: 30px; */
padding: 40px;
border: 10px transparent solid;
}
.box1:hover {
border: 10px red solid;
}
/*
* 創(chuàng)建一個子元素box2占滿box1,box2把內容區(qū)撐滿了
*/
.box2 {
width: 100%;
height: 100%;
background-color: yellow;
}
</style>
</head>
<body>
<div>
<div></div>
</div>
</body>
</html>
2.3 邊框(Border)
邊框圍繞在內邊距的外圍,它可以是實線、虛線或者其他樣式。邊框用于定義內邊距和外邊距之間的界限,同時也起到了美化元素的作用。
邊框屬于盒子邊緣,邊框里面屬于盒子內部,出了邊框都是盒子的外部,設置邊框必須指定三個樣式 邊框大小、邊框的樣式、邊框的顏色
代碼示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box {
width: 0px;
height: 0px;
/* background-color: rgb(222, 255, 170); */
/* 邊框的大小 如果省略,有默認值,大概1-3px ,不同的瀏覽器默認大小不一樣
border-width 后可跟多個值
四個值 上 右 下 左
三個值 上 左右 下
二個值 上下 左右
一個值 上下左右
單獨設置某一邊的邊框寬度
border-bottom-width
border-top-width
border-left-width
border-right-width
*/
border-width: 20px;
/* border-left-width:40px ; */
/*
邊框的樣式
border-style 可選值
默認值:none
實線 solid
虛線 dashed
雙線 double
點狀虛線 dotted
*/
border-style: solid;
/* 設置邊框的顏色 默認值是黑色
border-color 也可以跟多個值
四個值 上 右 下 左
三個值 上 左右 下
二個值 上下 左右
一個值 上下左右
對應的方式跟border-width是一樣
單獨設置某一邊的邊框顏色
border-XXX-color: ;
*/
border-color: transparent transparent red transparent ;
}
.box1{
width: 200px;
height: 200px;
background-color: turquoise;
/* 簡寫border
1、 同時設置邊框的大小,顏色,樣式,沒有順序要求
2、可以單獨設置一個邊框
border-top:; 設置上邊框
border-right 設置右邊框
border-bottom 設置下邊框
border-left 設置左邊框
3、去除某個邊框
border:none;
*/
border: blue solid 10px;
border-bottom: none;
/* border-top:10px double green ; */
}
</style>
</head>
<body>
<div></div>
<div></div>
</body>
</html>
2.4 外邊距(Margin)
外邊距是元素與外界的間隔,它決定了元素與其他元素之間的距離。通過調整外邊距,我們可以控制元素之間的相互位置關系,從而影響整體布局。
代碼示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title></title>
<style type="text/css">
/* 外邊距 不會影響到盒子的大小
可以控制盒子的位置
margin-top:; 正值 元素向下移動 負值 元素向上移動
margin-left:; 正值 元素向右移動 負值 元素向左移動
margin-bottom:; 正值 元素自己不動,其靠下的元素向下移動,負值 元素自己不動,其靠下的元素向上移動
margin-right: ; 正值負值都不動
簡寫 margin 可以跟多個值
規(guī)則跟padding一樣
*/
.box1 {
width: 200px;
height: 200px;
background-color: #bfa;
border: 10px solid red;
/* margin-top: -100px;
margin-left: -100px;
margin-bottom: -100px;
margin-right: -100px; */
margin: 40px;
}
.box2 {
width: 200px;
height: 200px;
background-color: yellow;
}
</style>
</head>
<body>
<div></div>
<div></div>
</body>
</html>
盒子的大小指的是盒子的寬度和高度。大多數初學者容易將寬度和高度誤解為width和height屬性,然而默認情況下width和height屬性只是設置content(內容)部分的寬和高。
盒子真正的寬和高按下面公式計算
我們還可以用帶屬性的公式表示:
上面說到的是默認情況下的計算方法,另外一種情況下,width和height屬性設置的就是盒子的寬度和高度。盒子的寬度和高度的計算方式由box-sizing屬性控制。
box-sizing屬性值
content-box:默認值,width和height屬性分別應用到元素的內容框。在寬度和高度之外繪制元素的內邊距、邊框、外邊距。
border-box:為元素設定的width和height屬性決定了元素的邊框盒。就是說,為元素指定的任何內邊距和邊框都將在已設定的寬度和高度內進行繪制。通過從已設定的寬度和高度分別減去 邊框 和 內邊距 才能得到內容的寬度和高度。
inherit:規(guī)定應從父元素繼承box-sizing屬性的值
想要快速入門前端開發(fā)嗎?推薦一個前端開發(fā)基礎課程,這個老師講的特別好,零基礎學習無壓力,知識點結合代碼,邊學邊練,可以免費試看試學,還有各種輔助工具和資料,非常適合新手!點這里前往學習哦!云端源想
掌握了盒子模型的基本概念后,我們就可以開始創(chuàng)造性地應用它來設計網頁。以下是一些技巧:
CSS盒子模型是前端開發(fā)的精髓之一,它不僅幫助我們理解和控制頁面布局,還為我們提供了無限的創(chuàng)意空間?,F在,你已經掌握了盒子模型的奧秘,是時候在你的項目中運用這些知識,創(chuàng)造出令人驚嘆的網頁設計了。
記住,每一個細節(jié)都可能是打造卓越用戶體驗的關鍵。開啟你的CSS盒子模型之旅,讓我們一起構建更加精彩、更加互動的網頁世界!
我們下期再見!
END
文案編輯|云端學長
文案配圖|云端學長
內容由:云端源想分享
*請認真填寫需求信息,我們會在24小時內與您取得聯系。