其實(shí)魂奥,CSS就三個(gè)大模塊: 盒子模型 、 浮動(dòng) 易猫、 定位耻煤,其余的都是細(xì)節(jié)。要求這三部分准颓,無論如何也要學(xué)的非常精通厕妖。?
所謂盒子模型就是把HTML頁面中的元素看作是一個(gè)矩形的盒子答憔,也就是一個(gè)盛裝內(nèi)容的容器且改。每個(gè)矩形都由元素的內(nèi)容澜共、內(nèi)邊距(padding)、邊框(border)和外邊距(margin)組成样勃。
盒子模型(Box Model)
所有的文檔元素(標(biāo)簽)都會(huì)生成一個(gè)矩形框吠勘,我們成為元素框(element box),它描述了一個(gè)文檔元素再網(wǎng)頁布局匯總所占的位置大小峡眶。因此剧防,每個(gè)盒子除了有自己大小和位置外,還影響著其他盒子的大小和位置辫樱。
盒子邊框(border)
邊框就是那層皮峭拘。 橘子皮。狮暑。柚子皮鸡挠。。橙子皮心例。宵凌。鞋囊。
語法:
border : border-width || border-style || border-color
邊框?qū)傩浴O(shè)置邊框樣式(border-style)
邊框樣式用于定義頁面中邊框的風(fēng)格止后,常用屬性值如下:
????none:沒有邊框即忽略所有邊框的寬度(默認(rèn)值)
????solid:邊框?yàn)閱螌?shí)線(最為常用的)
????dashed:邊框?yàn)樘摼€
????dotted:邊框?yàn)辄c(diǎn)線
????double:邊框?yàn)殡p實(shí)線
表格的細(xì)線邊框
以前學(xué)過的html表格邊框很粗,這里只需要CSS一句話就可以美觀起來。 讓我們真的相信译株,CSS就是我們的白馬王子(白雪公主)瓜喇。
table{ border-collapse:collapse; }
border-collapse:collapse; 表示邊框合并在一起。
盒子邊框總結(jié)表
設(shè)置內(nèi)容? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?樣式屬性? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????? ?常用屬性值
上邊框????border-top-style:? ? ? ? ? ? ? ? 樣式; border-top-width:寬度;border-top-color:顏色;border-top:? ? ? ? ? ? ? ? ? ? ? ?寬度 樣式 顏色;
下邊框????border-bottom-style:? ? ? ? ? 樣式;border- bottom-width:寬度;border- bottom-color:顏色;border-bottom:????寬度 樣式 顏色;
左邊框????border-left-style? ? ? ? ? ? ? ? ?:樣式; border-left-width:寬度;border-left-color:顏色;border-left:? ? ? ? ? ? ? ? ? ? ? ?寬度 樣式 顏色;
右邊框????border-right-style:? ? ? ? ? ? ? ?樣式;border-right-width:寬度;border-right-color:顏色;border-right:? ? ? ? ? ? ? ? ? ?寬度 樣式 顏色;
樣式綜合設(shè)置????border-style:上邊 [右邊 下邊 左邊];none無(默認(rèn))歉糜、solid單實(shí)線乘寒、dashed虛線、dotted點(diǎn)線匪补、double雙實(shí)線
寬度綜合設(shè)置????border-width:上邊 [右邊 下邊 左邊];像素值
顏色綜合設(shè)置????border-color:上邊 [右邊 下邊 左邊];顏色值伞辛、#十六進(jìn)制、rgb(r,g,b)夯缺、rgb(r%,g%,b%)
邊框綜合設(shè)置????border:四邊寬度 四邊樣式 四邊顏色;
圓角邊框(CSS3)
從此以后蚤氏,我們的世界不只有矩形。
語法格式:
Border-radius: 水平半徑/垂直半徑踊兜;
一般我們垂直半徑都是省略的默認(rèn)和水平半徑一樣竿滨。
border-radius: 左上角? 右上角? 右下角? 左下角;
代碼案例:
<style>
? div {
? ? width:200px;
? ? height:200px;
? ? border:1px solid red;
? ? margin:10px 40px;
? ? text-align: center;
? ? line-height: 200px;
? }
? div:first-child {
? ? border:10px solid red;
? ? border-radius: 20px/50px;
? }
? div:nth-child(2) {
? ? border-radius: 20px;
? }
? div:nth-child(3) {
? ? border-radius: 15px 0;
? }
? div:nth-child(4) {
? ? border-radius:100px;
? }
? div:nth-child(5) {
? ? border-radius: 50%;
? }
? div:nth-child(6) {
? ? border-radius: 100px 0;
? }
? div:nth-child(7) {
? ? border-radius: 200px 0 0 0;
? }
? div:nth-child(8) {
? ? border-radius: 100px 100px 0 0;
? ? height:100px;? /*高度減半*/
? }
? div:nth-child(9) {
? ? border-radius: 100px;
? ? height:100px;
? }
? div:nth-child(10) {
? ? border-radius: 100%;
? ? height:100px;
? }
</style>
內(nèi)邊距(padding)
padding屬性用于設(shè)置內(nèi)邊距。 是指 邊框與內(nèi)容之間的距離捏境。
????padding-top:上內(nèi)邊距
????padding-right:右內(nèi)邊距
????padding-bottom:下內(nèi)邊距
????padding-left:左內(nèi)邊距
注意: 后面跟幾個(gè)數(shù)值表示的意思是不一樣的于游。
值的個(gè)數(shù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 表達(dá)意思
1個(gè)值? ? ? ? ? ? padding:上下左右邊距 比如padding: 3px;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?表示上下左右都是3像素
2個(gè)值? ? ? ? ? ? padding: 上下邊距 左右邊距 比如 padding: 3px 5px;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?表示 上下3像素 左右 5像素
3個(gè)值? ? ? ? ? ? padding:上邊距 左右邊距 下邊距 比如 padding: 3px 5px 10px;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 表示 上是3像素 左右是5像素 下是10像素
4個(gè)值????????????padding:上內(nèi)邊距 右內(nèi)邊距 下內(nèi)邊距 左內(nèi)邊距 比如: padding: 3px 5px 10px 15px; 表示 上3px 右是5px 下 10px 左15px 順時(shí)針
外邊距(margin)
margin屬性用于設(shè)置外邊距。 設(shè)置外邊距會(huì)在元素之間創(chuàng)建“空白”垫言, 這段空白通常不能放置其他內(nèi)容贰剥。
margin-top:上外邊距
margin-right:右外邊距
margin-bottom:下外邊距
margin-left:左外邊距
margin:上外邊距 右外邊距? 下外邊距? 左外邊
取值順序跟內(nèi)邊距相同。
外邊距實(shí)現(xiàn)盒子居中
可以讓一個(gè)盒子實(shí)現(xiàn)水平居中筷频,需要滿足一下兩個(gè)條件:
必須是塊級(jí)元素鸠澈。? ?
盒子必須指定了寬度(width)
然后就給左右的外邊距都設(shè)置為auto,就可使塊級(jí)元素水平居中截驮。
實(shí)際工作中常用這種方式進(jìn)行網(wǎng)頁布局笑陈,示例代碼如下:
.header{ width:960px; margin:0 auto;}
清除元素的默認(rèn)內(nèi)外邊距
為了更方便地控制網(wǎng)頁中的元素,制作網(wǎng)頁時(shí)葵袭,可使用如下代碼清除元素的默認(rèn)內(nèi)外邊距:
* {
????padding:0;/* 清除內(nèi)邊距 */
????margin:0;/* 清除外邊距 */
}
注意:? 行內(nèi)元素是只有左右內(nèi)外邊距的涵妥,是沒有上下內(nèi)外邊距的。
外邊距合并
使用margin定義塊元素的垂直外邊距時(shí)坡锡,可能會(huì)出現(xiàn)外邊距的合并蓬网。
相鄰塊元素垂直外邊距的合并:
當(dāng)上下相鄰的兩個(gè)塊元素相遇時(shí),如果上面的元素有下外邊距margin-bottom鹉勒,下面的元素有上外邊距margin-top帆锋,則他們之間的垂直間距不是margin-bottom與margin-top之和,而是兩者中的較大者禽额。這種現(xiàn)象被稱為相鄰塊元素垂直外邊距的合并(也稱外邊距塌陷)锯厢。
解決方案: 避免就好了皮官。
嵌套塊元素垂直外邊距的合并:
對(duì)于兩個(gè)嵌套關(guān)系的塊元素,如果父元素沒有上內(nèi)邊距及邊框实辑,則父元素的上外邊距會(huì)與子元素的上外邊距發(fā)生合并捺氢,合并后的外邊距為兩者中的較大者,即使父元素的上外邊距為0剪撬,也會(huì)發(fā)生合并摄乒。
解決方案:
可以為父元素定義1像素的上邊框或上內(nèi)邊距。
可以為父元素添加overflow:hidden残黑。
content寬度和高度
使用寬度屬性width和高度屬性height可以對(duì)盒子的大小進(jìn)行控制馍佑。
????width和height的屬性值可以為不同單位的數(shù)值或相對(duì)于父元素的百分比%,實(shí)際工作中最常用的是像素值梨水。
????大多數(shù)瀏覽器挤茄,如Firefox、IE6及以上版本都采用了W3C規(guī)范冰木,符合CSS規(guī)范的盒子模型的總寬度和總高度的計(jì)算原則是:
????盒子的總寬度= width+左右內(nèi)邊距之和+左右邊框?qū)挾戎?左右外邊距之和
????盒子的總高度= height+上下內(nèi)邊距之和+上下邊框?qū)挾戎?上下外邊距之和
注意:
1穷劈、寬度屬性width和高度屬性height僅適用于塊級(jí)元素,對(duì)行內(nèi)元素?zé)o效( img 標(biāo)簽和 input除外)踊沸。
2歇终、計(jì)算盒子模型的總高度時(shí),還應(yīng)考慮上下兩個(gè)盒子垂直外邊距合并的情況逼龟。
三個(gè)計(jì)算題
1. .demo{width:200px;height:200px;border:1px solid red; padding:20px;}评凝, 盒子最終占有的空間是多大?
2. 一個(gè)盒子需要占用的空間是 400像素腺律, 但是盒子又有 padding:25px, border: 1px solid red; 問奕短,我們需要改動(dòng)盒子寬度為多少?
3. 如何讓一個(gè)200 * 200像素的盒子匀钧, 在一個(gè)400 * 400的盒子里面水平居中翎碑,垂直居中。
盒子模型布局穩(wěn)定性
盒子模型之斯,最大的困惑就是日杈, 分不清內(nèi)外邊距的使用,什么情況下使用內(nèi)邊距佑刷,什么情況下使用外邊距莉擒?
答案是:? 其實(shí)他們大部分情況下是可以混用的。? 就是說瘫絮,你用內(nèi)邊距也可以涨冀,用外邊距也可以。 你覺得哪個(gè)方便麦萤,就用哪個(gè)鹿鳖。
但是扁眯,總有一個(gè)最好用的吧,我們根據(jù)穩(wěn)定性來分栓辜,建議如下:
按照 優(yōu)先使用? 寬度 (width)? 其次 使用內(nèi)邊距(padding)? ? 再次? 外邊距(margin)。?
? width >? padding? > ? margin ?
原因:
margin 會(huì)有外邊距合并 還有 ie6下面margin 加倍的bug(討厭)所以最后使用垛孔。
padding? 會(huì)影響盒子大小藕甩, 需要進(jìn)行加減計(jì)算(麻煩) 其次使用。
width? 沒有問題(嗨皮)我們經(jīng)常使用寬度剩余法 高度剩余法來做周荐。
CSS3盒模型
CSS3中可以通過box-sizing 來指定盒模型狭莱,即可指定為content-box、border-box概作,這樣我們計(jì)算盒子大小的方式就發(fā)生了改變腋妙。
可以分成兩種情況:
1、box-sizing: border-box? 盒子大小為 width
2讯榕、box-sizing: content-box? 盒子大小為 width + padding + border
注:上面的標(biāo)注的width指的是CSS屬性里設(shè)置的width: length骤素,content的值是會(huì)自動(dòng)調(diào)整的。
div {
? width: 100px;
? height: 100px;
? background: skyblue;
? margin: 0 auto;
? border: 1px solid gray;
? /*
? 默認(rèn)的設(shè)置 如果我們添加了 border屬性 該容器的大小會(huì)發(fā)生改變
? 因?yàn)樗獌?yōu)先保證內(nèi)部的內(nèi)容所占區(qū)域 不變
? */
? /*?
? box-sizing? 如果不設(shè)置 默認(rèn)的值 就是
? content-box: 優(yōu)先保證內(nèi)容的大小 對(duì)盒子進(jìn)行縮放;
? border-box: 讓 盒子 優(yōu)先保證自己所占區(qū)域的大小,對(duì)內(nèi)容進(jìn)行壓縮;
? */
? box-sizing: border-box;
}
盒子陰影
語法格式:
box-shadow:水平陰影 垂直陰影 模糊距離 陰影尺寸 陰影顏色 內(nèi)/外陰影愚屁;
1. 前兩個(gè)屬性是必須寫的济竹。其余的可以省略。
2. 外陰影 (outset) 但是不能寫? ? 默認(rèn)? ? ? 想要內(nèi)陰影? inset
img {
? border:10px solid orange;
? box-shadow:3px 3px 5px 4px rgba(0,0,0,1);
}