本文目標(biāo):
1、掌握CSS中結(jié)構(gòu)性偽類選擇器—nth-child的用法
問(wèn)題:
1、實(shí)現(xiàn)以下效果,且使用純DIV+CSS,必須使用結(jié)構(gòu)性偽類選擇器—nth-child
當(dāng)鼠標(biāo)懸停在某個(gè)單元格上時(shí),背景變成紫色
附加說(shuō)明:
1、每個(gè)單元格寬145,帶1個(gè)像素邊框,左邊padding為5,上下padding為15
2、標(biāo)題字體為20px,加粗
現(xiàn)在來(lái)具體操作
1、準(zhǔn)備素材:無(wú),不需要準(zhǔn)備額外的素材圖片
2、創(chuàng)建好index.html,寫(xiě)好架構(gòu),架構(gòu)如何分析呢
思路分析:
1、目標(biāo)其實(shí)是一張表格,我們可以通過(guò)很多方式實(shí)現(xiàn)它,但是為了更好的顯示出nth-child的作用,我們就用ul,li來(lái)布局
2、每個(gè)li的顏色都是規(guī)律性的變化
好,先按照分析,寫(xiě)好思路,暫時(shí)不管css的實(shí)現(xiàn)
代碼如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>結(jié)構(gòu)性偽類選擇器—nth-child</title> </head> <body> <div class="table"> <div class="caption">項(xiàng)目基本情況</div> <ul> <li>項(xiàng)目名稱</li> <li>xxxxxx</li> <li>地理位置</li> <li>xxxxxx</li> <li>交通狀況</li> <li>xxxxxx</li> <li>開(kāi)發(fā)商</li> <li>xxxxxx</li> <li>銷(xiāo)售代理公司</li> <li>xxxxxx</li> <li>商業(yè)運(yùn)營(yíng)公司</li> <li>xxxxxx</li> <li>項(xiàng)目性質(zhì)</li> <li>xxxxxx</li> <li>功能定位</li> <li>xxxxxx</li> <li>目標(biāo)消費(fèi)群</li> <li>xxxxxx</li> <li>開(kāi)盤(pán)時(shí)間</li> <li>xxxxxx</li> <li>竣工時(shí)間</li> <li>xxxxxx</li> <li>開(kāi)業(yè)時(shí)間</li> <li>xxxxxx</li> <li>售樓電話</li> <li>xxxxxx</li> <li>銷(xiāo)售招商位置</li> <li>xxxxxx</li> <li>總建筑面積</li> <li>xxxxxx</li> <li>商業(yè)面積</li> <li>xxxxxx</li> <li>停車(chē)位面積</li> <li>xxxxxx</li> <li>產(chǎn)權(quán)年限</li> <li>xxxxxx</li> <li class="clear"> </li> </ul> </div> </body> </html>
3、寫(xiě)樣式 ,創(chuàng)建css文件夾,里面新建index.css,里面的樣式怎么寫(xiě)了,以下是分析思路
思路分析:
整體表格.table
1、根據(jù)要求得知,每列的寬是均分的,所以該容器的寬=145*4+8個(gè)邊框 = 608,且?guī)Щ疑吙蝻@示
所以index.css中添加代碼如下:
.table { width: 608px; border: 1px solid gray; }
標(biāo)題
1、背景色為灰色,字體顏色為白色,上下存有間距,字體大小為20,加粗,居中顯示
所以index.css中添加代碼如下:
.caption { background-color: gray; color: white; padding: 15px 0px; font-size: 20px; font-weight: bold; text-align: center; }
ul,li
1、ul默認(rèn)是有padding,所以為了不影響布局,需要取消默認(rèn)padding,margin
2、根據(jù)以上要求,li不帶黑色圓點(diǎn),帶灰色邊框,寬145,上下存有間距,且水平排列所以必須要浮動(dòng)float
所以index.css中添加代碼如下:
ul{ padding: 0; margin: 0; } li{ list-style: none; border:1px solid lightgray; width: 145px; padding:15px 0 15px 5px; float: left; }
清除浮動(dòng)的li
1、為了讓ul還是能包裹住浮動(dòng)的li,所以最后一列要清除浮動(dòng),但是為了不影響布局,所以寬高要設(shè)置0,padding,margin也要設(shè)置0,否則也還是會(huì)有padding
所以index.css中添加代碼如下:
.clear{ width:0; height: 0; float: none; clear: both; padding: 0; margin: 0; }
帶紅色字體的li
1、我們發(fā)現(xiàn)帶紅色字體的li,其實(shí)它的li的序號(hào)分別為3,7,11,15,19,23……這個(gè)是有規(guī)律的,所以我們可以使用nth-child選擇器來(lái)實(shí)現(xiàn),nth-child()括號(hào)里可以填寫(xiě)表達(dá)式,比如2n這些,表達(dá)式的n是從0開(kāi)始的,所以根據(jù)這個(gè)規(guī)律我們可以得出表達(dá)式為4n+3,我們可以把n從0開(kāi)始代入可以發(fā)現(xiàn)會(huì)得出序號(hào)3,7,11,15,19,23……所以表達(dá)式是對(duì)的
所以index.css中添加代碼如下:
ul>:nth-child(4n+3){ color:red; }
帶綠色字體的li
1、我們發(fā)現(xiàn)帶綠色字體的li,其實(shí)它的li的序號(hào)分別為1,5,9,13,17,21,25…..這個(gè)也是有規(guī)律的,所以我們可以使用nth-child選擇器來(lái)實(shí)現(xiàn),那么這個(gè)表達(dá)式怎么寫(xiě)呢,仔細(xì)研究發(fā)現(xiàn)表達(dá)式為
4n+1,我們可以把n從0開(kāi)始代入可以發(fā)現(xiàn)會(huì)得出序號(hào)1,5,9,13……所以表達(dá)式是對(duì)的
所以index.css中添加代碼如下:
ul>:nth-child(4n+1){ color:green; }
帶藍(lán)色字體的li
1、我們發(fā)現(xiàn)帶藍(lán)色字體的li,其實(shí)它的li的序號(hào)分別為2,4,6,8,10,12…..這個(gè)也是有規(guī)律的,其實(shí)就是偶數(shù)列,只是少了0,所以我們可以使用nth-child選擇器來(lái)實(shí)現(xiàn),那么這個(gè)表達(dá)式怎么寫(xiě)呢,仔細(xì)研究發(fā)現(xiàn)表達(dá)式為2n+2,我們可以把n從0開(kāi)始代入可以發(fā)現(xiàn)會(huì)得出序號(hào)2,4,6,8,10,12……所以表達(dá)式是對(duì)的,其實(shí)表達(dá)式也可以寫(xiě)成2n,只不過(guò)因?yàn)?列不存在所以也是對(duì)的,不影響最終效果
所以index.css中添加代碼如下:
ul>:nth-child( 2n+2 ){ color:blue; }
最后4列
1、最后4列(序號(hào)為33,34,35,36的li)我們發(fā)現(xiàn)底部邊框是不需要的,所以需要去除掉,因?yàn)樽钔鈱拥娜萜鞯囊呀?jīng)有個(gè)邊框了
所以index.css中添加代碼如下:
ul>:nth-child(33){ border-bottom: 0; } ul>:nth-child(34){ border-bottom: 0; } ul>:nth-child(35){ border-bottom: 0; } ul>:nth-child(36){ border-bottom: 0; }
鼠標(biāo)懸浮效果
1、當(dāng)鼠標(biāo)懸浮的時(shí)候,背景需要變色變成紫色
所以index.css中添加代碼如下:
li:hover{ background-color: plum; cursor: pointer; }
到此為止,index.css代碼如下:
.table { width: 608px; border: 1px solid gray; } .caption { background-color: gray; color: white; padding: 15px 0px; font-size: 20px; font-weight: bold; text-align: center; } ul{ padding: 0; margin: 0; } li{ list-style: none; border:1px solid lightgray; width: 145px; padding:15px 0 15px 5px; float: left; } .clear{ width:0; height: 0; float: none; clear: both; padding: 0; margin: 0; } ul>:nth-child(4n+3){ color:red; } ul>:nth-child(4n+1){ color:green; } ul>:nth-child( 2n+2 ){ color:blue; } ul>:nth-child(33){ border-bottom: 0; } ul>:nth-child(34){ border-bottom: 0; } ul>:nth-child(35){ border-bottom: 0; } ul>:nth-child(36){ border-bottom: 0; } li:hover{ background-color: plum; cursor: pointer; }
然后將index.css引入index.html中
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>結(jié)構(gòu)性偽類選擇器—nth-child</title> <link href="css/index.css" rel="stylesheet" type="text/css"> </head> <body> <div class="table"> <div class="caption">項(xiàng)目基本情況</div> <ul> <li>項(xiàng)目名稱</li> <li>xxxxxx</li> <li>地理位置</li> <li>xxxxxx</li> <li>交通狀況</li> <li>xxxxxx</li> <li>開(kāi)發(fā)商</li> <li>xxxxxx</li> <li>銷(xiāo)售代理公司</li> <li>xxxxxx</li> <li>商業(yè)運(yùn)營(yíng)公司</li> <li>xxxxxx</li> <li>項(xiàng)目性質(zhì)</li> <li>xxxxxx</li> <li>功能定位</li> <li>xxxxxx</li> <li>目標(biāo)消費(fèi)群</li> <li>xxxxxx</li> <li>開(kāi)盤(pán)時(shí)間</li> <li>xxxxxx</li> <li>竣工時(shí)間</li> <li>xxxxxx</li> <li>開(kāi)業(yè)時(shí)間</li> <li>xxxxxx</li> <li>售樓電話</li> <li>xxxxxx</li> <li>銷(xiāo)售招商位置</li> <li>xxxxxx</li> <li>總建筑面積</li> <li>xxxxxx</li> <li>商業(yè)面積</li> <li>xxxxxx</li> <li>停車(chē)位面積</li> <li>xxxxxx</li> <li>產(chǎn)權(quán)年限</li> <li>xxxxxx</li> <li class="clear"> </li> </ul> </div> </body> </html>
最終運(yùn)行效果如下:
總結(jié):
1、學(xué)習(xí)了結(jié)構(gòu)性偽類選擇器—nth-child的用法,這里的難點(diǎn)就是在于要寫(xiě)表達(dá)式,所以寫(xiě)表達(dá)式的時(shí)候需要多花點(diǎn)耐心去總結(jié)規(guī)律