2018-09-02HTML與CSS 第二篇

什么是選擇器

每一條css樣式聲明(定義)由兩部分組成移国,形式如下:

選擇器{
    樣式;
}

在{}之前的部分就是“選擇器”,“選擇器”指明了{(lán)}中的“樣式”的作用對(duì)象,也就是“樣式”作用于網(wǎng)頁中的哪些元素核偿。比如代碼中的“body”就是選擇器。

body{
    font-size:12px;
    color:red;  
}

標(biāo)簽選擇器

標(biāo)簽選擇器其實(shí)就是html代碼中的標(biāo)簽顽染。如右側(cè)代碼編輯器中的<html>漾岳、<body>轰绵、<h1>、<p>尼荆、<img>左腔。

p{font-size:12px;line-height:1.6em;}

類選擇器

.類選器名稱{css樣式代碼;}

注意:

  1. 英文圓點(diǎn)開頭
  2. 其中類選器名稱可以任意起名(但不要起中文噢)

使用方法:
第一步:使用合適的標(biāo)簽把要修飾的內(nèi)容標(biāo)記起來,如下:

<span>膽小如鼠</span>

第二步:使用class="類選擇器名稱"為標(biāo)簽設(shè)置一個(gè)類耀找,如下:

<span class="stress">膽小如鼠</span>

第三步:設(shè)置類選器css樣式翔悠,如下:

.stress{color:red;}/*類前面要加入一個(gè)英文圓點(diǎn)*/

ID選擇器

在很多方面,ID選擇器都類似于類選擇符野芒,但也有一些重要的區(qū)別:

  1. 為標(biāo)簽設(shè)置id="ID名稱"蓄愁,而不是class="類名稱"。
  2. ID選擇符的前面是井號(hào)(#)號(hào)狞悲,而不是英文圓點(diǎn)(.)撮抓。

類和ID選擇器的區(qū)別

相同點(diǎn):可以應(yīng)用于任何元素
不同點(diǎn):
1、ID選擇器只能在文檔中使用一次摇锋。與類選擇器不同丹拯,在一個(gè)HTML文檔中,ID選擇器只能使用一次荸恕,而且僅一次乖酬。而類選擇器可以使用多次。
下面代碼是正確的:

 <p>三年級(jí)時(shí)融求,我還是一個(gè)<span class="stress">膽小如鼠</span>的小女孩咬像,上課從來不敢回答老師提出的問題,生怕回答錯(cuò)了老師會(huì)批評(píng)我生宛。就一直沒有這個(gè)<span class="stress">勇氣</span>來回答老師提出的問題县昂。</p>

而下面代碼是錯(cuò)誤的:

 <p>三年級(jí)時(shí),我還是一個(gè)<span id="stress">膽小如鼠</span>的小女孩陷舅,上課從來不敢回答老師提出的問題倒彰,生怕回答錯(cuò)了老師會(huì)批評(píng)我。就一直沒有這個(gè)<span id="stress">勇氣</span>來回答老師提出的問題莱睁。</p>

2待讳、可以使用類選擇器詞列表方法為一個(gè)元素同時(shí)設(shè)置多個(gè)樣式。我們可以為一個(gè)元素同時(shí)設(shè)多個(gè)樣式仰剿,但只可以用類選擇器的方法實(shí)現(xiàn)耙箍,ID選擇器是不可以的(不能使用 ID 詞列表)。

.stress{
    color:red;
}
.bigsize{
    font-size:25px;
}
<p>到了<span class="stress bigsize">三年級(jí)</span>下學(xué)期時(shí)酥馍,我們班上了一節(jié)公開課...</p>

子選擇器

還有一個(gè)比較有用的選擇器子選擇器辩昆,即大于符號(hào)(>),用于選擇指定標(biāo)簽元素的第一代子元素。如右側(cè)代碼編輯器中的代碼:

.food>li{border:1px solid red;}

這行代碼會(huì)使class名為food下的子元素li(水果旨袒、蔬菜)加入紅色實(shí)線邊框汁针。

包含(后代)選擇器

包含選擇器术辐,即加入空格,用于選擇指定標(biāo)簽元素下的后輩元素。

.first  span{color:red;}

請(qǐng)注意這個(gè)選擇器與子選擇器的區(qū)別施无,子選擇器(child selector)僅是指它的直接后代辉词,或者你可以理解為作用于子元素的第一代后代。而后代選擇器是作用于所有子后代元素猾骡。后代選擇器通過空格來進(jìn)行選擇瑞躺,而子選擇器是通過“>”進(jìn)行選擇。
總結(jié):>作用于元素的第一代后代兴想,空格作用于元素的所有后代幢哨。

通用選擇器

通用選擇器是功能最強(qiáng)大的選擇器,它使用一個(gè)(*)號(hào)指定嫂便,它的作用是匹配html中所有標(biāo)簽元素捞镰,如下使用下面代碼使用html中任意標(biāo)簽元素字體顏色全部設(shè)置為紅色:

* {color:red;}

偽類選擇符

更有趣的是偽類選擇符,為什么叫做偽類選擇符毙替,它允許給html不存在的標(biāo)簽(標(biāo)簽的某種狀態(tài))設(shè)置樣式岸售,比如說我們給html中一個(gè)標(biāo)簽元素的鼠標(biāo)滑過的狀態(tài)來設(shè)置字體顏色:

a:hover{color:red;}

上面一行代碼就是為 a 標(biāo)簽鼠標(biāo)滑過的狀態(tài)設(shè)置字體顏色變紅。這樣就會(huì)使第一段文字內(nèi)容中的“膽小如鼠”文字加入鼠標(biāo)滑過字體顏色變?yōu)榧t色特效厂画。
關(guān)于偽選擇符:

  • 關(guān)于偽類選擇符凸丸,到目前為止,可以兼容所有瀏覽器的“偽類選擇符”就是 a 標(biāo)簽上使用 :hover 了(其實(shí)偽類選擇符還有很多袱院,尤其是 css3 中屎慢,但是因?yàn)椴荒芗嫒菟袨g覽器,本教程只是講了這一種最常用的)坑填。其實(shí) :hover 可以放在任意的標(biāo)簽上抛人,比如說 p:hover弛姜,但是它們的兼容性也是很不好的脐瑰,所以現(xiàn)在比較常用的還是 a:hover 的組合。

分組選擇符

你想為html中多個(gè)標(biāo)簽元素設(shè)置同一個(gè)樣式時(shí)廷臼,可以使用分組選擇符(苍在,),一定要以(荠商;)號(hào)結(jié)尾寂恬,如下代碼為h1、span標(biāo)簽同時(shí)設(shè)置字體顏色為紅色:

h1,span{color:red;}

它相當(dāng)于下面兩行代碼:

h1{color:red;}
span{color:red;}

繼承

CSS的某些樣式是具有繼承性的莱没,那么什么是繼承呢初肉?繼承是一種規(guī)則,它允許樣式不僅應(yīng)用于某個(gè)特定html標(biāo)簽元素饰躲,而且應(yīng)用于其后代牙咏。比如下面代碼:如某種顏色應(yīng)用于p標(biāo)簽臼隔,這個(gè)顏色設(shè)置不僅應(yīng)用p標(biāo)簽,還應(yīng)用于p標(biāo)簽中的所有子元素文本妄壶,這里子元素為span標(biāo)簽摔握。

p{color:red;}

<p>三年級(jí)時(shí),我還是一個(gè)<span>膽小如鼠</span>的小女孩丁寄。</p>

p中的文本與span中的文本都設(shè)置為了紅色氨淌。但注意有一些css樣式是不具有繼承性的。如border:1px solid red;

p{border:1px solid red;}

<p>三年級(jí)時(shí)伊磺,我還是一個(gè)<span>膽小如鼠</span>的小女孩盛正。</p>

在上面例子中它代碼的作用只是給p標(biāo)簽設(shè)置了邊框?yàn)?像素、紅色奢浑、實(shí)心邊框線蛮艰,而對(duì)于子元素span是沒用起到作用的。

特殊性

有的時(shí)候我們?yōu)橥粋€(gè)元素設(shè)置了不同的CSS樣式代碼雀彼,那么元素會(huì)啟用哪一個(gè)CSS樣式呢?我們來看一下面的代碼:

p{color:red;}
.first{color:green;}
<p class="first">三年級(jí)時(shí)壤蚜,我還是一個(gè)<span>膽小如鼠</span>的小女孩。</p>

p和.first都匹配到了p這個(gè)標(biāo)簽上徊哑,那么會(huì)顯示哪種顏色呢袜刷?green是正確的顏色,那么為什么呢莺丑?是因?yàn)闉g覽器是根據(jù)權(quán)值來判斷使用哪種css樣式的著蟹,權(quán)值高的就使用哪種css樣式。
下面是權(quán)值的規(guī)則:
標(biāo)簽的權(quán)值為1梢莽,類選擇符的權(quán)值為10萧豆,ID選擇符的權(quán)值最高為100。例如下面的代碼:

p{color:red;} /*權(quán)值為1*/
p span{color:green;} /*權(quán)值為1+1=2*/
.warning{color:white;} /*權(quán)值為10*/
p span.warning{color:purple;} /*權(quán)值為1+1+10=12*/
#footer .note p{color:yellow;} /*權(quán)值為100+10+1=111*/

注意:還有一個(gè)權(quán)值比較特殊--繼承也有權(quán)值但很低昏名,有的文獻(xiàn)提出它只有0.1涮雷,所以可以理解為繼承的權(quán)值最低。

層疊

我們來思考一個(gè)問題:如果在html文件中對(duì)于同一個(gè)元素可以有多個(gè)css樣式存在并且這多個(gè)css樣式具有相同權(quán)重值怎么辦轻局?好洪鸭,這一小節(jié)中的層疊幫你解決這個(gè)問題。
層疊就是在html文件中對(duì)于同一個(gè)元素可以有多個(gè)css樣式存在仑扑,當(dāng)有相同權(quán)重的樣式存在時(shí)览爵,會(huì)根據(jù)這些css樣式的前后順序來決定,處于最后面的css樣式會(huì)被應(yīng)用镇饮。

p{color:red;}
p{color:green;}
<p class="first">三年級(jí)時(shí)蜓竹,我還是一個(gè)<span>膽小如鼠</span>的小女孩。</p>

最后 p 中的文本會(huì)設(shè)置為green,這個(gè)層疊很好理解俱济,理解為后面的樣式會(huì)覆蓋前面的樣式司蔬。
內(nèi)聯(lián)樣式表(標(biāo)簽內(nèi)部)> 嵌入樣式表(當(dāng)前文件中)> 外部樣式表(外部文件中)。

重要性

我們?cè)谧鼍W(wǎng)頁代碼的時(shí)姨蝴,有些特殊的情況需要為某些樣式設(shè)置具有最高權(quán)值俊啼,怎么辦?這時(shí)候我們可以使用!important來解決左医。

p{color:red!important;}
p{color:green;}
<p class="first">三年級(jí)時(shí)授帕,我還是一個(gè)<span>膽小如鼠</span>的小女孩。</p>

這時(shí) p 段落中的文本會(huì)顯示的red紅色浮梢。
注意:!important要寫在分號(hào)的前面

這里注意當(dāng)網(wǎng)頁制作者不設(shè)置css樣式時(shí)跛十,瀏覽器會(huì)按照自己的一套樣式來顯示網(wǎng)頁。并且用戶也可以在瀏覽器中設(shè)置自己習(xí)慣的樣式秕硝,比如有的用戶習(xí)慣把字號(hào)設(shè)置為大一些芥映,使其查看網(wǎng)頁的文本更加清楚。這時(shí)注意樣式優(yōu)先級(jí)為:瀏覽器默認(rèn)的樣式 < 網(wǎng)頁制作者樣式 < 用戶自己設(shè)置的樣式远豺,但記住!important優(yōu)先級(jí)樣式是個(gè)例外奈偏,權(quán)值高于用戶自己設(shè)置的樣式。

文字排版--字體

我們可以使用css樣式為網(wǎng)頁中的文字設(shè)置字體躯护、字號(hào)惊来、顏色等樣式屬性。下面我們來看一個(gè)例子棺滞,下面代碼實(shí)現(xiàn):為網(wǎng)頁中的文字設(shè)置字體為宋體裁蚁。

body{font-family:"宋體";}

這里注意不要設(shè)置不常用的字體,因?yàn)槿绻脩舯镜仉娔X上如果沒有安裝你設(shè)置的字體继准,就會(huì)顯示瀏覽器默認(rèn)的字體枉证。(因?yàn)橛脩羰欠窨梢钥吹侥阍O(shè)置的字體樣式取決于用戶本地電腦上是否安裝你設(shè)置的字體。)
現(xiàn)在一般網(wǎng)頁喜歡設(shè)置“微軟雅黑”移必,如下代碼:

body{font-family:"Microsoft Yahei";}
或
body{font-family:"微軟雅黑";}

注意:第一種方法比第二種方法兼容性更好一些室谚。

因?yàn)檫@種字體即美觀又可以在客戶端安全的顯示出來(用戶本地一般都是默認(rèn)安裝的)。

文字排版--字號(hào)避凝、顏色

可以使用下面代碼設(shè)置網(wǎng)頁中文字的字號(hào)為12像素舞萄,并把字體顏色設(shè)置為#666(灰色):

body{font-size:12px;color:#666}

文字排版--粗體

我們還可以使用css樣式來改變文字的樣式:粗體眨补、斜體管削、下劃線、刪除線撑螺,可以使用下面代碼實(shí)現(xiàn)設(shè)置文字以粗體樣式顯示出來含思。

p span{font-weight:bold;}

在這里大家可以看到,如果想為文字設(shè)置粗體是有單獨(dú)的css樣式來實(shí)現(xiàn)的,再不用為了實(shí)現(xiàn)粗體樣式而使用h1-h6或strong標(biāo)簽了含潘。

文字排版--斜體

以下代碼可以實(shí)現(xiàn)文字以斜體樣式在瀏覽器中顯示:

p a{font-style:italic;}

<p>三年級(jí)時(shí)饲做,我還是一個(gè)<a>膽小如鼠</a>的小女孩。</p>

文字排版--下劃線

有些情況下想為文字設(shè)置為下劃線樣式遏弱,這樣可以在視覺上強(qiáng)調(diào)文字盆均,可以使用下面代碼來實(shí)現(xiàn):

p a{text-decoration:underline;}

<p>三年級(jí)時(shí),我還是一個(gè)<a>膽小如鼠</a>的小女孩漱逸。</p>

文字排版--刪除線

 .className{text-decoration:line-through;}

段落排版--縮進(jìn)

中文文字中的段前習(xí)慣空兩個(gè)文字的空白泪姨,這個(gè)特殊的樣式可以用下面代碼來實(shí)現(xiàn):

p{text-indent:2em;}
<p>1922年的春天,一個(gè)想要成名名叫尼克卡拉威(托比?馬奎爾Tobey Maguire 飾)的作家饰抒,離開了美國(guó)中西部肮砾,來到了紐約。那是一個(gè)道德感漸失袋坑,爵士樂流行仗处,走私為王,股票飛漲的時(shí)代枣宫。為了追尋他的美國(guó)夢(mèng)婆誓,他搬入紐約附近一海灣居住。</p>

注意:2em的意思就是文字的2倍大小也颤。

段落排版--行間距(行高)

這一小節(jié)我們來學(xué)習(xí)一下另一個(gè)在段落排版中起重要作用的行間距(行高)屬性(line-height)旷档,如下代碼實(shí)現(xiàn)設(shè)置段落行間距為1.5倍。

p{line-height:1.5em;}
<p>菲茨杰拉德歇拆,二十世紀(jì)美國(guó)文學(xué)巨擘之一鞋屈,兼具作家和編劇雙重身份。他以詩人的敏感和戲劇家的想象為"爵士樂時(shí)代"吟唱華麗挽歌故觅,其詩人和夢(mèng)想家的氣質(zhì)亦為那個(gè)奢靡年代的不二注解厂庇。</p>

段落排版--中文字間距、字母間距

中文字間隔输吏、字母間隔設(shè)置:

如果想在網(wǎng)頁排版中設(shè)置文字間隔或者字母間隔就可以使用 letter-spacing 來實(shí)現(xiàn)权旷,如下面代碼:

h1{
    letter-spacing:50px;
}
...
<h1>了不起的蓋茨比</h1>

注意:這個(gè)樣式使用在英文單詞時(shí),是設(shè)置字母與字母之間的間距贯溅。

單詞間距設(shè)置:

如果我想設(shè)置英文單詞之間的間距呢拄氯?可以使用 word-spacing 來實(shí)現(xiàn)。如下代碼:

h1{
    word-spacing:50px;
}
...
<h1>welcome to imooc!</h1>
image.png

段落排版--對(duì)齊

想為塊狀元素中的文本它浅、圖片設(shè)置居中樣式嗎译柏?可以使用text-align樣式代碼,如下代碼可實(shí)現(xiàn)文本居中顯示姐霍。(那么什么是塊狀元素呢鄙麦?在后面的11-1典唇、11-2小節(jié)中會(huì)講到。)

h1{
    text-align:center;
}
<h1>了不起的蓋茨比</h1>

同樣可以設(shè)置居左:

h1{
    text-align:left;
}
<h1>了不起的蓋茨比</h1>

還可以設(shè)置居右:

h1{
    text-align:right;
}
<h1>了不起的蓋茨比</h1>

元素分類

在講解CSS布局之前胯府,我們需要提前知道一些知識(shí)介衔,在CSS中,html中的標(biāo)簽元素大體被分為三種不同的類型:塊狀元素骂因、內(nèi)聯(lián)元素(又叫行內(nèi)元素)和內(nèi)聯(lián)塊狀元素炎咖。
常用的塊狀元素有:

<div>、<p>寒波、<h1>...<h6>塘装、<ol>、<ul>影所、<dl>蹦肴、<table>、<address>猴娩、<blockquote> 阴幌、<form>

常用的內(nèi)聯(lián)元素有:

<a>、<span>卷中、
矛双、<i>、<em>蟆豫、<strong>议忽、<label>、<q>十减、<var>栈幸、<cite>、<code>

常用的內(nèi)聯(lián)塊狀元素有:

<img>帮辟、<input>

元素分類--塊級(jí)元素

什么是塊級(jí)元素速址?在html中<div>、 <p>由驹、<h1>芍锚、<form>、<ul> 和 <li>就是塊級(jí)元素蔓榄。設(shè)置display:block就是將元素顯示為塊級(jí)元素并炮。如下代碼就是將內(nèi)聯(lián)元素a轉(zhuǎn)換為塊狀元素,從而使a元素具有塊狀元素特點(diǎn)甥郑。

a{display:block;}

塊級(jí)元素特點(diǎn):

1局嘁、每個(gè)塊級(jí)元素都從新的一行開始臣淤,并且其后的元素也另起一行沉御。(真霸道,一個(gè)塊級(jí)元素獨(dú)占一行)

2、元素的高度店展、寬度养篓、行高以及頂和底邊距都可設(shè)置。

3赂蕴、元素寬度在不設(shè)置的情況下柳弄,是它本身父容器的100%(和父元素的寬度一致),除非設(shè)定一個(gè)寬度概说。

元素分類--內(nèi)聯(lián)元素

在html中碧注,<span>、<a>糖赔、<label>萍丐、 <strong> 和<em>就是典型的內(nèi)聯(lián)元素(行內(nèi)元素)(inline)元素。當(dāng)然塊狀元素也可以通過代碼display:inline將元素設(shè)置為內(nèi)聯(lián)元素放典。如下代碼就是將塊狀元素div轉(zhuǎn)換為內(nèi)聯(lián)元素逝变,從而使 div 元素具有內(nèi)聯(lián)元素特點(diǎn)。

div{
     display:inline;
 }

......

<div>我要變成內(nèi)聯(lián)元素</div>

內(nèi)聯(lián)元素特點(diǎn):

1奋构、和其他元素都在一行上壳影;

2、元素的高度弥臼、寬度及頂部和底部邊距不可設(shè)置宴咧;

3、元素的寬度就是它包含的文字或圖片的寬度径缅,不可改變掺栅。

小伙伴們你們觀查一下右側(cè)代碼段,有沒有發(fā)現(xiàn)一個(gè)問題纳猪,內(nèi)聯(lián)元素之間有一個(gè)間距問題柿冲,這個(gè)問題在本小節(jié)的 wiki 中有介紹,感興趣的小伙伴可以去查看兆旬。

元素分類--內(nèi)聯(lián)塊狀元素

內(nèi)聯(lián)塊狀元素(inline-block)就是同時(shí)具備內(nèi)聯(lián)元素假抄、塊狀元素的特點(diǎn),代碼display:inline-block就是將元素設(shè)置為內(nèi)聯(lián)塊狀元素丽猬。(css2.1新增)宿饱,<img>、<input>標(biāo)簽就是這種內(nèi)聯(lián)塊狀標(biāo)簽脚祟。

inline-block 元素特點(diǎn):

1谬以、和其他元素都在一行上;

2由桌、元素的高度为黎、寬度邮丰、行高以及頂和底邊距都可設(shè)置。

盒模型--邊框(一)

盒子模型的邊框就是圍繞著內(nèi)容及補(bǔ)白的線铭乾,這條線你可以設(shè)置它的粗細(xì)剪廉、樣式和顏色(邊框三個(gè)屬性)。
如下面代碼為 div 來設(shè)置邊框粗細(xì)為 2px炕檩、樣式為實(shí)心的斗蒋、顏色為紅色的邊框:

div{
    border:2px  solid  red;
}

上面是 border 代碼的縮寫形式,可以分開寫:

div{
    border-width:2px;
    border-style:solid;
    border-color:red;
}

注意:

1笛质、border-style(邊框樣式)常見樣式有:

dashed(虛線)| dotted(點(diǎn)線)| solid(實(shí)線)泉沾。

2、border-color(邊框顏色)中的顏色可設(shè)置為十六進(jìn)制顏色妇押,如:

border-color:#888;//前面的井號(hào)不要忘掉跷究。

3、border-width(邊框?qū)挾龋┲械膶挾纫部梢栽O(shè)置為:

thin | medium | thick(但不是很常用)敲霍,最常還是用象素(px)揭朝。

盒模型--邊框(二)

現(xiàn)在有一個(gè)問題,如果有想為 p 標(biāo)簽單獨(dú)設(shè)置下邊框色冀,而其它三邊都不設(shè)置邊框樣式怎么辦呢潭袱?css 樣式中允許只為一個(gè)方向的邊框設(shè)置樣式:

div{border-bottom:1px solid red;}

同樣可以使用下面代碼實(shí)現(xiàn)其它三邊(上、右锋恬、左)邊框的設(shè)置:

border-top:1px solid red;
border-right:1px solid red; 
border-left:1px solid red;

盒模型--寬度和高度

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

因此一個(gè)元素實(shí)際寬度(盒子的寬度)=左邊界+左邊框+左填充+內(nèi)容寬度+右填充+右邊框+右邊界彤悔。


image.png

元素的高度也是同理。

比如:

css代碼:

div{
    width:200px;
    padding:20px;
    border:1px solid red;
    margin:10px;    
}

html代碼:

<body>
   <div>文本內(nèi)容</div>
</body>

元素的實(shí)際長(zhǎng)度為:10px+1px+20px+200px+20px+1px+10px=262px索守。在chrome瀏覽器下可查看元素盒模型晕窑,如下圖:


image.png

盒模型--填充

元素內(nèi)容與邊框之間是可以設(shè)置距離的,稱之為“填充”卵佛。填充也可分為上杨赤、右、下截汪、左(順時(shí)針)疾牲。如下代碼:

div{padding:20px 10px 15px 30px;}

順序一定不要搞混⊙媒猓可以分開寫上面代碼:

div{
   padding-top:20px;
   padding-right:10px;
   padding-bottom:15px;
   padding-left:30px;
}

如果上阳柔、右、下蚓峦、左的填充都為10px;可以這么寫

div{padding:10px;}

如果上下填充一樣為10px舌剂,左右一樣為20px济锄,可以這么寫:

div{padding:10px 20px;}

盒模型--邊界

元素與其它元素之間的距離可以使用邊界(margin)來設(shè)置。邊界也是可分為上霍转、右荐绝、下、左谴忧。如下代碼:

div{margin:20px 10px 15px 30px;}

也可以分開寫:

div{
   margin-top:20px;
   margin-right:10px;
   margin-bottom:15px;
   margin-left:30px;
}

如果上右下左的邊界都為10px;可以這么寫:

div{ margin:10px;}

如果上下邊界一樣為10px很泊,左右一樣為20px角虫,可以這么寫:

div{ margin:10px 20px;}

總結(jié)一下:padding和margin的區(qū)別沾谓,padding在邊框里,margin在邊框外戳鹅。

css布局模型

清楚了CSS 盒模型的基本概念均驶、 盒模型類型, 我們就可以深入探討網(wǎng)頁布局的基本模型了枫虏。布局模型與盒模型一樣都是 CSS 最基本妇穴、 最核心的概念。 但布局模型是建立在盒模型基礎(chǔ)之上隶债,又不同于我們常說的 CSS 布局樣式或 CSS 布局模板腾它。如果說布局模型是本,那么 CSS 布局模板就是末了死讹,是外在的表現(xiàn)形式瞒滴。
CSS包含3種基本的布局模型,用英文概括為:Flow赞警、Layer 和 Float妓忍。
在網(wǎng)頁中,元素有三種布局模型:
1愧旦、流動(dòng)模型(Flow)
2世剖、浮動(dòng)模型 (Float)
3、層模型(Layer)

流動(dòng)模型(一)

先來說一說流動(dòng)模型笤虫,流動(dòng)(Flow)是默認(rèn)的網(wǎng)頁布局模式旁瘫。也就是說網(wǎng)頁在默認(rèn)狀態(tài)下的 HTML 網(wǎng)頁元素都是根據(jù)流動(dòng)模型來分布網(wǎng)頁內(nèi)容的。

流動(dòng)布局模型具有2個(gè)比較典型的特征:

第一點(diǎn)琼蚯,塊狀元素都會(huì)在所處的包含元素內(nèi)自上而下按順序垂直延伸分布境蜕,因?yàn)樵谀J(rèn)狀態(tài)下,塊狀元素的寬度都為100%凌停。實(shí)際上粱年,塊狀元素都會(huì)以行的形式占據(jù)位置。如右側(cè)代碼編輯器中三個(gè)塊狀元素標(biāo)簽(div罚拟,h1台诗,p)寬度顯示為100%完箩。

流動(dòng)模型(二)

第二點(diǎn),在流動(dòng)模型下拉队,內(nèi)聯(lián)元素都會(huì)在所處的包含元素內(nèi)從左到右水平分布顯示弊知。(內(nèi)聯(lián)元素可不像塊狀元素這么霸道獨(dú)占一行)

右側(cè)代碼編輯器中內(nèi)聯(lián)元素標(biāo)簽a、span粱快、em秩彤、strong都是內(nèi)聯(lián)元素。

浮動(dòng)模型

塊狀元素這么霸道都是獨(dú)占一行事哭,如果現(xiàn)在我們想讓兩個(gè)塊狀元素并排顯示漫雷,怎么辦呢?不要著急鳍咱,設(shè)置元素浮動(dòng)就可以實(shí)現(xiàn)這一愿望降盹。

任何元素在默認(rèn)情況下是不能浮動(dòng)的,但可以用 CSS 定義為浮動(dòng)谤辜,如 div蓄坏、p、table丑念、img 等元素都可以被定義為浮動(dòng)涡戳。如下代碼可以實(shí)現(xiàn)兩個(gè) div 元素一行顯示。

div{
    width:200px;
    height:200px;
    border:2px red solid;
    float:left;
}
<div id="div1"></div>
<div id="div2"></div>
image.png

當(dāng)然你也可以同時(shí)設(shè)置兩個(gè)元素右浮動(dòng)也可以實(shí)現(xiàn)一行顯示脯倚。

div{
    width:200px;
    height:200px;
    border:2px red solid;
    float:right;
}
image.png

又有小伙伴問了渔彰,設(shè)置兩個(gè)元素一左一右可以實(shí)現(xiàn)一行顯示嗎?當(dāng)然可以:

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

什么是層模型挠将?

什么是層布局模型胳岂?層布局模型就像是圖像軟件PhotoShop中非常流行的圖層編輯功能一樣,每個(gè)圖層能夠精確定位操作舔稀,但在網(wǎng)頁設(shè)計(jì)領(lǐng)域乳丰,由于網(wǎng)頁大小的活動(dòng)性,層布局沒能受到熱捧内贮。但是在網(wǎng)頁上局部使用層布局還是有其方便之處的产园。下面我們來學(xué)習(xí)一下html中的層布局。

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

層模型有三種形式:

  1. 絕對(duì)定位(position: absolute)

  2. 相對(duì)定位(position: relative)

  3. 固定定位(position: fixed)

層模型--絕對(duì)定位

如果想為元素設(shè)置層模型中的絕對(duì)定位竞端,需要設(shè)置position:absolute(表示絕對(duì)定位)屎即,這條語句的作用將元素從文檔流中拖出來,然后使用left、right技俐、top乘陪、bottom屬性相對(duì)于其最接近的一個(gè)具有定位屬性的父包含塊進(jìn)行絕對(duì)定位。如果不存在這樣的包含塊雕擂,則相對(duì)于body元素啡邑,即相對(duì)于瀏覽器窗口。

如下面代碼可以實(shí)現(xiàn)div元素相對(duì)于瀏覽器窗口向右移動(dòng)100px井赌,向下移動(dòng)50px谤逼。

div{
    width:200px;
    height:200px;
    border:2px red solid;
    position:absolute;
    left:100px;
    top:50px;
}
<div id="div1"></div>
image.png

層模型--相對(duì)定位

如果想為元素設(shè)置層模型中的相對(duì)定位,需要設(shè)置position:relative(表示相對(duì)定位)仇穗,它通過left流部、right、top仪缸、bottom屬性確定元素在正常文檔流中的偏移位置贵涵。相對(duì)定位完成的過程是首先按static(float)方式生成一個(gè)元素(并且元素像層一樣浮動(dòng)了起來)列肢,然后相對(duì)于以前的位置移動(dòng)恰画,移動(dòng)的方向和幅度由left、right瓷马、top拴还、bottom屬性確定,偏移前的位置保留不動(dòng)欧聘。
如下代碼實(shí)現(xiàn)相對(duì)于以前位置向下移動(dòng)50px片林,向右移動(dòng)100px;

#div1{
    width:200px;
    height:200px;
    border:2px red solid;
    position:relative;
    left:100px;
    top:50px;
}

<div id="div1"></div>

image.png

什么叫做“偏移前的位置保留不動(dòng)”呢?

大家可以做一個(gè)實(shí)驗(yàn)怀骤,在div標(biāo)簽的后面加入一個(gè)span標(biāo)簽费封,在標(biāo)并在span標(biāo)簽中寫入一些文字。如下代碼:

<body>
    <div id="div1"></div><span>偏移前的位置還保留不動(dòng)蒋伦,覆蓋不了前面的div沒有偏移前的位置</span>
</body>
image.png

從效果圖中可以明顯的看出弓摘,雖然div元素相對(duì)于以前的位置產(chǎn)生了偏移,但是div元素以前的位置還是保留著痕届,所以后面的span元素是顯示在了div元素以前位置的后面韧献。

層模型--固定定位

fixed:表示固定定位,與absolute定位類型類似研叫,但它的相對(duì)移動(dòng)的坐標(biāo)是視圖(屏幕內(nèi)的網(wǎng)頁窗口)本身锤窑。由于視圖本身是固定的,它不會(huì)隨瀏覽器窗口的滾動(dòng)條滾動(dòng)而變化嚷炉,除非你在屏幕中移動(dòng)瀏覽器窗口的屏幕位置渊啰,或改變?yōu)g覽器窗口的顯示大小,因此固定定位的元素會(huì)始終位于瀏覽器窗口內(nèi)視圖的某個(gè)位置申屹,不會(huì)受文檔流動(dòng)影響绘证,這與background-attachment:fixed?屬性功能相同走搁。以下代碼可以實(shí)現(xiàn)相對(duì)于瀏覽器視圖向右移動(dòng)100px,向下移動(dòng)50px迈窟。并且拖動(dòng)滾動(dòng)條時(shí)位置固定不變私植。

#div1{
    width:200px;
    height:200px;
    border:2px red solid;
    position:fixed;
    left:100px;
    top:50px;
}
<p>文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。</p>
....

Relative與Absolute組合使用

小伙伴們學(xué)習(xí)了12-6小節(jié)的絕對(duì)定位的方法:使用position:absolute可以實(shí)現(xiàn)被設(shè)置元素相對(duì)于瀏覽器(body)設(shè)置定位以后车酣,大家有沒有想過可不可以相對(duì)于其它元素進(jìn)行定位呢曲稼?答案是肯定的,當(dāng)然可以湖员。使用position:relative來幫忙贫悄,但是必須遵守下面規(guī)范:
1、參照定位的元素必須是相對(duì)定位元素的前輩元素:

<div id="box1"><!--參照定位的元素-->
    <div id="box2">相對(duì)參照元素進(jìn)行定位</div><!--相對(duì)定位元素-->
</div>

從上面代碼可以看出box1是box2的父元素(父元素當(dāng)然也是前輩元素了)娘摔。
2窄坦、參照定位的元素必須加入position:relative;

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

3、定位元素加入position:absolute凳寺,便可以使用top鸭津、bottom、left肠缨、right來進(jìn)行偏移定位了逆趋。

#box2{
    position:absolute;
    top:20px;
    left:30px;         
}

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

盒模型代碼簡(jiǎn)寫

還記得在講盒模型時(shí)外邊距(margin)闻书、內(nèi)邊距(padding)和邊框(border)設(shè)置上下左右四個(gè)方向的邊距是按照順時(shí)針方向設(shè)置的:上右下左。具體應(yīng)用在margin和padding的例子如下:

margin:10px 15px 12px 14px;/*上設(shè)置為10px脑慧、右設(shè)置為15px魄眉、下設(shè)置為12px、左設(shè)置為14px*/

通常有下面三種縮寫方法:
1闷袒、如果top坑律、right、bottom霜运、left的值相同脾歇,如下面代碼:

margin:10px 10px 10px 10px;
可縮寫為:
margin:10px;

2、如果top和bottom值相同淘捡、left和 right的值相同藕各,如下面代碼:

margin:10px 20px 10px 20px;
可縮寫為:
margin:10px 20px;

3、如果left和right的值相同焦除,如下面代碼:

margin:10px 20px 30px 20px;
可縮寫為:
margin:10px 20px 30px;

注意:padding激况、border的縮寫方法和margin是一致的。

顏色值縮寫

關(guān)于顏色的css樣式也是可以縮寫的,當(dāng)你設(shè)置的顏色是16進(jìn)制的色彩值時(shí)乌逐,如果每?jī)晌坏闹迪嗤呋洌梢钥s寫一半。
例子1:

p{color:#000000;}
可以縮寫為:
p{color: #000;}

例子2:

p{color: #336699;}
可以縮寫為:
p{color: #369;}

字體縮寫

網(wǎng)頁中的字體css樣式代碼也有他自己的縮寫方式浙踢,下面是給網(wǎng)頁設(shè)置字體的代碼:

body{
    font-style:italic;
    font-variant:small-caps; 
    font-weight:bold; 
    font-size:12px; 
    line-height:1.5em; 
    font-family:"宋體",sans-serif;
}
這么多行的代碼其實(shí)可以縮寫為一句:
body{
    font:italic  small-caps  bold  12px/1.5em  "宋體",sans-serif;
}

注意:

1绢慢、使用這一簡(jiǎn)寫方式你至少要指定 font-size 和 font-family 屬性,其他的屬性(如 font-weight洛波、font-style胰舆、font-variant、line-height)如未指定將自動(dòng)使用默認(rèn)值蹬挤。

2缚窿、在縮寫時(shí) font-size 與 line-height 中間要加入“/”斜扛。

一般情況下因?yàn)閷?duì)于中文網(wǎng)站焰扳,英文還是比較少的倦零,所以下面縮寫代碼比較常用:

body{
    font:12px/1.5em  "宋體",sans-serif;
}

顏色值

在網(wǎng)頁中的顏色設(shè)置是非常重要,有字體顏色(color)吨悍、背景顏色(background-color)扫茅、邊框顏色(border)等,設(shè)置顏色的方法也有很多種:

1畜份、英文命令顏色

前面幾個(gè)小節(jié)中經(jīng)常用到的就是這種設(shè)置方法:

p{color:red;}

2诞帐、RGB顏色

這個(gè)與 photoshop 中的 RGB 顏色是一致的欣尼,由 R(red)爆雹、G(green)、B(blue) 三種顏色的比例來配色愕鼓。

p{color:rgb(133,45,200);}

每一項(xiàng)的值可以是 0~255 之間的整數(shù)钙态,也可以是 0%~100% 的百分?jǐn)?shù)。如:

p{color:rgb(20%,33%,25%);}

3菇晃、十六進(jìn)制顏色

這種顏色設(shè)置方法是現(xiàn)在比較普遍使用的方法册倒,其原理其實(shí)也是 RGB 設(shè)置,但是其每一項(xiàng)的值由 0-255 變成了十六進(jìn)制 00-ff.

p{color:#00ffff;}

長(zhǎng)度值

長(zhǎng)度單位總結(jié)一下磺送,目前比較常用到px(像素)驻子、em、% 百分比估灿,要注意其實(shí)這三種單位都是相對(duì)單位崇呵。
1、像素

像素為什么是相對(duì)單位呢馅袁?因?yàn)橄袼刂傅氖秋@示器上的小點(diǎn)(CSS規(guī)范中假設(shè)“90像素=1英寸”)域慷。實(shí)際情況是瀏覽器會(huì)使用顯示器的實(shí)際像素值有關(guān),在目前大多數(shù)的設(shè)計(jì)者都傾向于使用像素(px)作為單位。

2犹褒、em

就是本元素給定字體的 font-size 值抵窒,如果元素的 font-size 為 14px ,那么 1em = 14px叠骑;如果 font-size 為 18px李皇,那么 1em = 18px。如下代碼:

p{font-size:12px;text-indent:2em;}

上面代碼就是可以實(shí)現(xiàn)段落首行縮進(jìn) 24px(也就是兩個(gè)字體大小的距離)宙枷。

下面注意一個(gè)特殊情況:

但當(dāng)給 font-size 設(shè)置單位為 em 時(shí)疙赠,此時(shí)計(jì)算的標(biāo)準(zhǔn)以 p 的父元素的 font-size 為基礎(chǔ)。如下代碼:

html:

<p>以這個(gè)<span>例子</span>為例朦拖。</p>

css:

p{font-size:14px}
span{font-size:0.8em;}

結(jié)果 span 中的字體“例子”字體大小就為 11.2px(14 * 0.8 = 11.2px)圃阳。
3、百分比

p{font-size:12px;line-height:130%}

設(shè)置行高(行間距)為字體的130%(12 * 1.3 = 15.6px)璧帝。

水平居中設(shè)置-行內(nèi)元素

我們?cè)趯?shí)際工作中常會(huì)遇到需要設(shè)置水平居中的場(chǎng)景捍岳,比如為了美觀,文章的標(biāo)題一般都是水平居中顯示的睬隶。

這里我們又得分兩種情況:行內(nèi)元素 還是 塊狀元素 锣夹,塊狀元素里面又分為定寬塊狀元素,以及不定寬塊狀元素苏潜。今天我們先來了解一下行內(nèi)元素怎么進(jìn)行水平居中银萍?

如果被設(shè)置元素為文本、圖片等行內(nèi)元素時(shí)恤左,水平居中是通過給父元素設(shè)置 text-align:center 來實(shí)現(xiàn)的贴唇。(父元素和子元素:如下面的html代碼中,div是“我想要在父容器中水平居中顯示”這個(gè)文本的父元素飞袋。反之這個(gè)文本是div的子元素 )如下代碼:

html代碼:
<body>
  <div class="txtCenter">我想要在父容器中水平居中顯示戳气。</div>
</body>
css代碼:
<style>
  .txtCenter{
    text-align:center;
  }
</style>

水平居中設(shè)置-定寬塊狀元素

當(dāng)被設(shè)置元素為 塊狀元素 時(shí)用 text-align:center 就不起作用了,這時(shí)也分兩種情況:定寬塊狀元素和不定寬塊狀元素巧鸭。

這一小節(jié)我們先來講一講定寬塊狀元素瓶您。(定寬塊狀元素:塊狀元素的寬度width為固定值。)

滿足定寬和塊狀兩個(gè)條件的元素是可以通過設(shè)置“左右margin”值為“auto”來實(shí)現(xiàn)居中的纲仍。我們來看個(gè)例子就是設(shè)置 div 這個(gè)塊狀元素水平居中:

html代碼:

<body>
  <div>我是定寬塊狀元素呀袱,哈哈,我要水平居中顯示郑叠。</div>
</body>
css代碼:

<style>
div{
    border:1px solid red;/*為了顯示居中效果明顯為 div 設(shè)置了邊框*/
    
    width:200px;/*定寬*/
    margin:20px auto;/* margin-left 與 margin-right 設(shè)置為 auto */
}

</style>
也可以寫成:

margin-left:auto;
margin-right:auto;
注意:元素的“上下 margin” 是可以隨意設(shè)置的夜赵。

水平居中總結(jié)-不定寬塊狀元素方法(一)

在實(shí)際工作中我們會(huì)遇到需要為“不定寬度的塊狀元素”設(shè)置居中,比如網(wǎng)頁上的分頁導(dǎo)航锻拘,因?yàn)榉猪摰臄?shù)量是不確定的油吭,所以我們不能通過設(shè)置寬度來限制它的彈性击蹲。(不定寬塊狀元素:塊狀元素的寬度width不固定。)

不定寬度的塊狀元素有三種方法居中(這三種方法目前使用的都很多):

  1. 加入 table 標(biāo)簽
  2. 設(shè)置 display: inline 方法:與第一種類似婉宰,顯示類型設(shè)為 行內(nèi)元素歌豺,進(jìn)行不定寬元素的屬性設(shè)置
  3. 設(shè)置 position:relative 和 left:50%:利用 相對(duì)定位 的方式,將元素向左偏移 50% 心包,即達(dá)到居中的目的

這一小節(jié)我們來講一下第一種方法:

為什么選擇方法一加入table標(biāo)簽? 是利用table標(biāo)簽的長(zhǎng)度自適應(yīng)性---即不定義其長(zhǎng)度也不默認(rèn)父元素body的長(zhǎng)度(table其長(zhǎng)度根據(jù)其內(nèi)文本長(zhǎng)度決定)类咧,因此可以看做一個(gè)定寬度塊元素,然后再利用定寬度塊狀居中的margin的方法蟹腾,使其水平居中痕惋。

第一步:為需要設(shè)置的居中的元素外面加入一個(gè) table 標(biāo)簽 ( 包括 <tbody>、<tr>娃殖、<td> )值戳。

第二步:為這個(gè) table 設(shè)置“左右 margin 居中”(這個(gè)和定寬塊狀元素的方法一樣)。

舉例如下:

html代碼:

<div>
 <table>
  <tbody>
    <tr><td>
    <ul>
        <li>我是第一行文本</li>
        <li>我是第二行文本</li>
        <li>我是第三行文本</li>
    </ul>
    </td></tr>
  </tbody>
 </table>
</div>
css代碼:

<style>
table{
    border:1px solid;
    margin:0 auto;
}
</style>

水平居中總結(jié)-不定寬塊狀元素方法(二)

除了上一節(jié)講到的插入table標(biāo)簽炉爆,可以使不定寬塊狀元素水平居中之外堕虹,本節(jié)介紹第2種實(shí)現(xiàn)這種效果的方法,改變?cè)氐膁isplay類型為行內(nèi)元素芬首,利用其屬性直接設(shè)置赴捞。

第二種方法:改變塊級(jí)元素的 display 為 inline 類型(設(shè)置為 行內(nèi)元素 顯示),然后使用 text-align:center 來實(shí)現(xiàn)居中效果郁稍。如下例子:

html代碼:

<body>
<div class="container">
    <ul>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
    </ul>
</div>
</body>
css代碼:

<style>
.container{
    text-align:center;
}
/* margin:0;padding:0(消除文本與div邊框之間的間隙)*/
.container ul{
    list-style:none;
    margin:0;
    padding:0;
    display:inline;
}
/* margin-right:8px(設(shè)置li文本之間的間隔)*/
.container li{
    margin-right:8px;
    display:inline;
}
</style>

這種方法相比第一種方法的優(yōu)勢(shì)是不用增加無語義標(biāo)簽赦政,但也存在著一些問題:它將塊狀元素的 display 類型改為 inline,變成了行內(nèi)元素耀怜,所以少了一些功能恢着,比如設(shè)定長(zhǎng)度值。

水平居中總結(jié)-不定寬塊狀元素方法(三)

除了前兩節(jié)講到的插入table標(biāo)簽封寞,以及改變?cè)氐膁isplay類型然评,可以使不定寬塊狀元素水平居中之外,本節(jié)介紹第3種實(shí)現(xiàn)這種效果的方法狈究,設(shè)置浮動(dòng)和相對(duì)定位來實(shí)現(xiàn)。

方法三:通過給父元素設(shè)置 float盏求,然后給父元素設(shè)置 position:relative 和 left:50%抖锥,子元素設(shè)置 position:relative 和 left: -50% 來實(shí)現(xiàn)水平居中。

我們可以這樣理解:假想ul層的父層(即下面例子中的div層)中間有條平分線將ul層的父層(div層)平均分為兩份碎罚,ul層的css代碼是將ul層的最左端與ul層的父層(div層)的平分線對(duì)齊磅废;而li層的css代碼則是將li層的平分線與ul層的最左端(也是div層的平分線)對(duì)齊,從而實(shí)現(xiàn)li層的居中荆烈。

代碼如下:

<body>
<div class="container">
    <ul>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
    </ul>
</div>
</body>
css代碼:

<style>
.container{
    float:left;
    position:relative;
    left:50%
}

.container ul{
    list-style:none;
    margin:0;
    padding:0;
    
    position:relative;
    left:-50%;
}
.container li{float:left;display:inline;margin-right:8px;}
</style>

這三種方法使用得都非常廣泛拯勉,各有優(yōu)缺點(diǎn)竟趾,具體選用哪種方法,可以視具體情況而定宫峦。

垂直居中-父元素高度確定的單行文本

我們?cè)趯?shí)際工作中也會(huì)遇到需要設(shè)置垂直居中的場(chǎng)景岔帽,比如好多報(bào)紙的文章標(biāo)題在左右一側(cè)時(shí),常常會(huì)設(shè)置為垂直居中导绷,為了用戶體驗(yàn)性好犀勒。

這里我們又得分兩種情況:父元素高度確定的單行文本,以及父元素高度確定的多行文本妥曲。

本節(jié)我們先來看第一種父元素高度確定的單行文本, 怎么設(shè)置它為垂直居中呢贾费?

父元素高度確定的單行文本的豎直居中的方法是通過設(shè)置父元素的 height 和 line-height 高度一致來實(shí)現(xiàn)的。(height: 該元素的高度檐盟,line-height: 顧名思義褂萧,行高(行間距),指在文本中葵萎,行與行之間的 基線間的距離 )箱玷。

line-height 與 font-size 的計(jì)算值之差,在 CSS 中成為“行間距”陌宿。分為兩半锡足,分別加到一個(gè)文本行內(nèi)容的頂部和底部。

這種文字行高與塊高一致帶來了一個(gè)弊端:當(dāng)文字內(nèi)容的長(zhǎng)度大于塊的寬時(shí)壳坪,就有內(nèi)容脫離了塊舶得。
如下代碼:

<div class="container">
    hi,imooc!
</div>
css代碼:

<style>
.container{
    height:100px;
    line-height:100px;
    background:#999;
}
</style>

垂直居中-父元素高度確定的多行文本(方法一)

父元素高度確定的多行文本、圖片等的豎直居中的方法有兩種:

方法一:使用插入 table (包括tbody爽蝴、tr沐批、td)標(biāo)簽,同時(shí)設(shè)置 vertical-align:middle蝎亚。

css 中有一個(gè)用于豎直居中的屬性 vertical-align九孩,在父元素設(shè)置此樣式時(shí),會(huì)對(duì)inline-block類型的子元素都有用发框。下面看一下例子:

html代碼:

<body>
<table><tbody><tr><td class="wrap">
<div>
    <p>看我是否可以居中躺彬。</p>
</div>
</td></tr></tbody></table>
</body>
css代碼:

table td{height:500px;background:#ccc}

因?yàn)?td 標(biāo)簽?zāi)J(rèn)情況下就默認(rèn)設(shè)置了 vertical-align 為 middle,所以我們不需要顯式地設(shè)置了梅惯。

垂直居中-父元素高度確定的多行文本(方法二)

除了上一節(jié)講到的插入table標(biāo)簽宪拥,可以使父元素高度確定的多行文本垂直居中之外,本節(jié)介紹另外一種實(shí)現(xiàn)這種效果的方法铣减。但這種方法兼容性比較差她君,只是提供大家學(xué)習(xí)參考。

在 chrome葫哗、firefox 及 IE8 以上的瀏覽器下可以設(shè)置塊級(jí)元素的 display 為 table-cell(設(shè)置為表格單元顯示)缔刹,激活 vertical-align 屬性球涛,但注意 IE6、7 并不支持這個(gè)樣式, 兼容性比較差校镐。

html代碼:

<div class="container">
    <div>
        <p>看我是否可以居中亿扁。</p>
        <p>看我是否可以居中。</p>
        <p>看我是否可以居中灭翔。</p>
    </div>
</div>
css代碼:

<style>
.container{
    height:300px;
    background:#ccc;
    display:table-cell;/*IE8以上及Chrome魏烫、Firefox*/
    vertical-align:middle;/*IE8以上及Chrome、Firefox*/
}
</style>

這種方法的好處是不用添加多余的無意義的標(biāo)簽肝箱,但缺點(diǎn)也很明顯哄褒,它的兼容性不是很好,不兼容 IE6煌张、7而且這樣修改display的block變成了table-cell呐赡,破壞了原有的塊狀元素的性質(zhì)。

隱性改變display類型

有一個(gè)有趣的現(xiàn)象就是當(dāng)為元素(不論之前是什么類型元素骏融,display:none 除外)設(shè)置以下 2 個(gè)句之一:

  1. position : absolute

  2. float : left 或 float:right

簡(jiǎn)單來說链嘀,只要html代碼中出現(xiàn)以上兩句之一,元素的display顯示類型就會(huì)自動(dòng)變?yōu)橐?display:inline-block(塊狀元素)的方式顯示档玻,當(dāng)然就可以設(shè)置元素的 width 和 height 了怀泊,且默認(rèn)寬度不占滿父元素。

如下面的代碼误趴,小伙伴們都知道 a 標(biāo)簽是 行內(nèi)元素霹琼,所以設(shè)置它的 width 是 沒有效果的,但是設(shè)置為position:absolute 以后凉当,就可以了枣申。

<pre class="code" style="margin: 0px; padding: 5px 10px; white-space: pre-wrap; font-family: Monaco, Menlo, &quot;Ubuntu Mono&quot;, Consolas, source-code-pro, monospace; background: rgb(238, 238, 238); line-height: 1.6em; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); border-radius: 2px; font-size: 13px; word-break: break-word; display: block; color: rgb(20, 25, 30); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div class="container">
    <a href="#" title="">進(jìn)入課程請(qǐng)單擊這里</a>
</div></pre>

css代碼

<pre class="code" style="margin: 0px; padding: 5px 10px; white-space: pre-wrap; font-family: Monaco, Menlo, &quot;Ubuntu Mono&quot;, Consolas, source-code-pro, monospace; background: rgb(238, 238, 238); line-height: 1.6em; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); border-radius: 2px; font-size: 13px; word-break: break-word; display: block; color: rgb(20, 25, 30); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><style>
.container a{
    position:absolute;
    width:200px;
    background:#ccc;
}
</style></pre>

想不起 display:inline-block 是做什么的小伙伴們,單擊“[元素分類--內(nèi)聯(lián)塊狀元素](http://www.imooc.com/code/2050)”可返回到前面小節(jié)進(jìn)行復(fù)習(xí)看杭。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末忠藤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子楼雹,更是在濱河造成了極大的恐慌模孩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烘豹,死亡現(xiàn)場(chǎng)離奇詭異瓜贾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)携悯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筷笨,“玉大人张遭,你說我怎么就攤上這事∥焦叮” “怎么了盯漂?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)污桦。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么蚕愤? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮饺蚊,結(jié)果婚禮上萍诱,老公的妹妹穿的比我還像新娘。我一直安慰自己污呼,他們只是感情好裕坊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著燕酷,像睡著了一般籍凝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苗缩,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天饵蒂,我揣著相機(jī)與錄音,去河邊找鬼酱讶。 笑死退盯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浴麻。 我是一名探鬼主播得问,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼软免!你這毒婦竟也來了宫纬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤膏萧,失蹤者是張志新(化名)和其女友劉穎漓骚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榛泛,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蝌蹂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了曹锨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孤个。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沛简,靈堂內(nèi)的尸體忽然破棺而出齐鲤,到底是詐尸還是另有隱情斥废,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布给郊,位于F島的核電站牡肉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏淆九。R本人自食惡果不足惜统锤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炭庙。 院中可真熱鬧饲窿,春花似錦、人聲如沸煤搜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擦盾。三九已至嘲驾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間迹卢,已是汗流浹背辽故。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腐碱,地道東北人誊垢。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像症见,于是被迫代替她去往敵國(guó)和親喂走。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案谋作? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,748評(píng)論 1 92
  • 本文主要是起筆記的作用芋肠,內(nèi)容來自慕課網(wǎng). 認(rèn)識(shí)CSS樣式 CSS全稱為“層疊樣式表 (Cascading Styl...
    0o凍僵的企鵝o0閱讀 2,641評(píng)論 0 30
  • CSS格式化排版 1、字體 我們可以使用css樣式為網(wǎng)頁中的文字設(shè)置字體遵蚜、字號(hào)帖池、顏色等樣式屬性。下面我們來看一個(gè)例...
    張文靖同學(xué)閱讀 1,286評(píng)論 0 3
  • 早晨迎著朝陽吭净,呼吸著清新的空氣睡汹;安靜,平和寂殉,瑜伽的舒展讓身體清醒囚巴,微笑面對(duì)新的一天。最近的學(xué)習(xí)又讓我明白...
    yolanda的花花世界閱讀 184評(píng)論 0 0
  • 初始位置 (0, 0) 處有一個(gè)機(jī)器人。給出它的一系列動(dòng)作文兢,判斷這個(gè)機(jī)器人的移動(dòng)路線是否形成一個(gè)圓圈晤斩,換言之就是判...
    SunSeaSky閱讀 218評(píng)論 0 0