1. 程式人生 > >CSS選擇器的詳細說明(有誤之處請指教)

CSS選擇器的詳細說明(有誤之處請指教)

CSS的選擇器可分為以下幾種,個人經歷,其中1~6,8用的最多,7,9用得少:

    1.元素選擇器 2.類選擇器(class) 3.id選擇器 4.屬性選擇器 5.後代選擇器和子元素選擇器 6.相鄰兄弟選擇器 7.偽類 8.偽元素

一、元素選擇器 元素選擇器最為常見的,其名稱就是html元素,甚至是html自己,如下:

<style type="text/css">
//img標籤,影象標籤
            img{
                padding-top:2.5px ;//定義內邊距
                padding-left
:15px ;//定義左邊距 cursor: pointer;//定義滑鼠懸浮時樣式 } h1{ font-size: 26px;//定義字型大小 text-align: center;//定義文字居中 } a{ color: red; text-decoration: none;//定義超連結消除下劃線,預設值是有的 } <
/style> <body> //此時,以下標籤則會呈現相應的樣式 <img src="">.........<img> <h1>.........................................</h1> <a>.........................</a> </body>

二、類選擇器       類選擇器也很常見,一般你自己命名一個名字(隨你喜歡,翠花,狗蛋,狗剩都可以,講真,不開玩笑)作為你的樣式的名稱,然後,在body中,你想在哪個標籤中用這個樣式,就在那個標籤中用 class=“你樣式的名字”來表示。如下:

//程式碼:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>實驗一</title>
        <style type="text/css">
            .狗剩{
                width: 580px;
                height: 688px;
                margin:0 auto;
            }
            .border{
                border: gray 5px  double;
            }
            img{
                padding-top:2.5px ;
                padding-left:15px ;
                cursor: pointer;
            }
            h1{
                font-size: 26px;
                text-align: center;
            }
            .font1{
                font-size: 12px;
                color: gray;
                text-align: center;
            }
            .solid{
                border-bottom:1px solid gray;//這裡是設定一個雙實線的外框
            }
            a{
                color: red;
                text-decoration: none;
            }
            .font2{
                font-size: 16px;
                color: black;
                text-indent: 2em;
                text-align:left;
                padding-left:3px ;
            }
        </style>
    </head>
    <body>
         <div class="狗剩 border">

            <h1>傳谷歌祕密開發Fuchsia專案 欲5年內取代Android</h1>
            <p class="font1">2018-07-20 07:00 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;騰訊科技 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <a href="http://www.zhku.edu.cn/">我要評論(0)</a></p>
            <p class="solid"></p>
            <img src="img/exp1.jpg"  title="點我也沒用"/>
            <p class="font2">騰訊科技訊 據外媒報道,知情人士週四透露,在過去兩年多的時間中,谷歌內部一群工程師一直
            在開發一款軟體移動作業系統,希望用它最終來替代目前佔全球移動作業系統市場主導地位的Android。
            </p>
            <p class="font2">不過隨著這個團隊的不斷成長,它將不得不克服一些關於軟體如何工作的激烈內部爭論。</p>

            <p class="font2">這個名為Fuchsia的專案為了克服Android的侷限性從零開始建立,原因是越來越多的個人裝置和其他裝置開始接入網際網路。
                它的設計是為了更好地適應語音互動和頻繁的安全更新,無論是膝上型電腦還是微小的網際網路連線感測器,所有的裝置都
                將使用同一的作業系統。</p>
         </div>
    </body>
</html>

另外,類選擇器也可以結合元素標籤一起使用:

//例如,您可能希望只有段落顯示為紅色文字
<html>
<head>
<style type="text/css">
p.important {color:red;}
</style>
</head>
<body>

<h1 class="important">I never give up.</h1>//不顯示紅色

<p class="important">I never give up.</p>//顯示紅色

</body>
</html>

三、id選擇器       id選擇器和類選擇器類似,不過,類選擇器是這種形式 .XXX而id選擇器是這種形式 #XXX,關於它們倆的區別在這裡也做一下說明吧:       我們都知道XHTML/HTML是一種文字語言,我們對一個文本里的內容可以一目瞭然的,但伺服器不會,它是死的,因此,我們需要用一個方法來描述它。一般情況下,html標籤像ul p這些基本的HTML標籤就可以做到了,但是,其他的元素型別或者說佈局選擇,這些該怎麼表示呢,此時id和class就派上用場了。它們就像元素的身份特徵,描述了這個元素該長什麼樣。其中,id就像身份證,class就像衣服,只要你願意,隨時可以借其他人穿,也就是說class樣式可以用在不同的元素標籤中,在w3school可以點選檢視一文中這樣描述:        *區別 1:只能在文件中使用一次與類不同,在一個 HTML 文件中,ID 選擇器會使用一次,而且僅一次。        我的理解: 對於區別一,(經本人實踐,在我的谷歌瀏覽器完全可以顯示,可能有些瀏覽器不可以,但我覺得這句話不是強調這個意思,它應該說的是一種規範,我們平時書寫時就應該注意id應該唯一,為什麼呢?試想一下,在一個大專案中,css樣式絕對是龐大的,此時,但你用js來操控特定的html文字標籤時,你打算選用id還是class?說到這裡大家應該心裡多少有點“bilibili高數”了吧,這也就是id不重複的原因,否則js則操控的不只是特定標籤了。)        *區別 二:不能使用 ID 詞列表不同於類選擇器,ID 選擇器不能結合使用,因為 ID 屬性不允許有以空格分隔的詞列表。        我的理解:對於區別2,我們都知道類選擇器可以寫成一下這個樣子,而id不予許,它是獨一無二的。

<style type="text/css">
            .font1.font2{ //注意兩個類名之間不能有空格
                font-size:20px;
                color: green;
            }
        </style>
        <body>
        <p class="font1 font2">never give up</p>//注意兩個都要寫上,不然沒效果(感覺其實有點雞肋)
    </body>

      *區別 3:ID 能包含更多含義類似於類選擇器,可以獨立於元素來選擇 ID。有些情況下,您知道文件中會出現某個特定 ID 值,但是並不知道它會出現在哪個元素上,所以您想宣告獨立的 ID 選擇器。例如,您可能知道在一個給定的文件中會有一個 ID 值為 mostImportant 的元素。您不知道這個最重要的東西是一個段落、一個短語、一個列表項還是一個小節標題。您只知道每個文件都會有這麼一個最重要的內容,它可能 在任何元素中,而且只能出現一個。在這種情況下,可以編寫如下規則:

#mostImportant {color:red; background:yellow;}
//這個規則會與以下各個元素匹配(這些元素不能在同一個文件中同時出現,因為它們都有相同的 ID 值):
<h1 id="mostImportant">This is important!</h1>
<em id="mostImportant">This is important!</em>
<ul id="mostImportant">This is important!</ul>

       我的理解:對於區別三,額呃呃呃,可能語文不好,我覺得它的描述有點沒意義,直到我偶然看到一篇國外的文章時點選這裡 才覺得“ ID 能包含更多含 義”應該是體現在這個方面:       當我們想實現這樣的一個功能,使用者開啟一個頁面時,自動定位到我們想讓使用者最先看到的地方時,我們可以這樣做設定網址為http://XXXXXXXXXXXX#id名,此時開啟後,會定位到id標籤處。經過本人實現,確實如此,不過你實驗時,為了確切體驗到,你需要足夠多的內容來填充瀏覽器,這樣得到的效果更明顯。在很多專案中為了規範其實id 和 class都會該出,像這樣: <p id="XXX" class="VVVV"></p> //class是規定樣式,id便於js操控。

四、屬性選擇器       屬性選擇器的設定同樣是為了我們方便修改某個標籤的樣式,這個很好用,特別在一個大專案中,為一個標籤新增樣式時,它的寫法如下:

//形如:E[attribute] 選擇器,表示選擇擁有屬性 attribute 的E元素,不考慮屬性的值
a[rel] {
   color: red;
}

//還可以根據多個屬性進行選擇,只需將屬性選擇器連結在一起即可。例如,為了將同時有
// href 和 title 屬性的 HTML 超連結的文字設定為紅色,可以這樣寫:
a[href][title] {
   color:red;
}

關於它其他格式的詳細說明:可以參考這位博主,他寫得很詳細,每個樣式都有例子,通俗易懂。 五、後代選擇器和子元素選擇器        對於後代選擇器,如果您希望只對 A 元素中的 B元素應用樣式,可以這樣寫A B{…………},這樣其他標籤,即使有B也不會呈現相應的顏色,如:

h1 strong {color:red;}

<h1>I <em>never<strong>give</strong></em> up</h1>//這裡strong雖是em的兒子,h1的孫子也會顯示紅色,
                                                  //注意這裡區分下面的子元素選擇器

      對於子元素選擇器,寫法是這樣的:A>B,如:

 h1>strong {color:red;}//選擇h1的親兒子紅色,例如:

<h1>I<strong>never</strong> <strong>give</strong> up.</h1>//這裡 never give 會顯示紅色

<h1>I <em>never<strong>give</strong></em> up</h1>//這裡沒顯示紅色,因為strong是em的兒子,h1的孫子

另外,子元素選擇器也可以結合後代選擇器,例如:

table.company td > p

//它表示,選擇這樣的P標籤,它是td的親兒子,且屬於這樣的一個表格,表格帶有company屬性
//例如:
!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .company{
                width: 280px;
            }
            table.company td > p{
                font-size: 18px;
                color:gray;
            }
        </style>
    </head>
    <body>
        <table class="company">
            <td><p>這是真的</p></td> //它會顯示相應樣式
        </table>

        <table>
            <td><p>這是真的</p></td>//它不會
        </table>
    </body>
</html>

六、相鄰兄弟選擇器        如果需要選擇緊接在另一個元素後的元素,而且二者有相同的父元素,可以使用相鄰兄弟選擇器。這裡注意兩點:1.兩個元素相鄰 2.擁有著共同的父親。3.它影響的是後面的元素 即 A+B隻影響B

<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
    h1 + p {  
        color:red;
    }
</style>
</head>
<body>
    <h1>This is a heading.</h1>//它沒變
    <p>This is paragraph.</p> //只有它變紅
    <p>This is paragraph.</p>
    <p>This is paragraph.</p>
    <p>This is paragraph.</p>
</body>
</html>

//再比如:
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
li + li {font-weight:bold;}
</style>
</head>

<body>
<div>
  <ul>
    <li>List item 1</li>//他不會變紅
    <li>List item 2</li>//他變紅了,因為它是一的兄弟
    <li>List item 3</li>//他也變紅,它是二的兄弟
  </ul>
</div>
</body>
</html>

另外,除了“+”,還有“~”,它的作用是查詢某一個指定元素的後面的所有兄弟結點 例如:

<style type="text/css">
    h1 ~ p{
        color:red;
    }
</style>
</head>
<body>
    <p>1</p> //不變紅
    <h1>2</h1>//不變紅
    <p>3</p>//變紅
    <p>4</p>//變紅
    <p>5</p>//變紅
</body>

七、偽類        w3school給出的解釋是CSS 偽類用於向某些選擇器新增特殊的效果。最常見的偽類可以說是超連結了:

//注意這幾個是有順序的,任意顛倒將不會呈現相應的樣式
a:link {color: #FF0000}     /* 未訪問的連結 */
a:visited {color: #00FF00}  /* 已訪問的連結 */
a:hover {color: #FF00FF}    /* 滑鼠移動到連結上 */
a:active {color: #0000FF}   /* 選定的連結 */

      除此之外,偽類還有:(1)first-child (2)lang(這個基本沒用過)

//first-child作用:選擇某元素的第一個兒子是A。這個特定偽類很容易遭到誤解,請看下面:
//例如:A:first-child,起作用的是A,不是A的第一個兒子
<html>
<head>
<style type="text/css">
p:first-child {color:red;}
li:first-child {color:red;}
</style>
</head>

<body>
<div>
<p>These are the necessary steps:</p>//顯示紅色,p是div的第一個兒子
<ul>
<li>Intert Key</li>//顯示紅色,這個li為ul的第一個兒子
<li>Turn key <strong>clockwise</strong></li>
<li>Push accelerator</li>
</ul>
<p>Do <em>notpush the brake at the same time as the accelerator.</em> </p>//不顯示紅色,因為不是選擇
                                                                          //P的第一個兒子。
</div>
</body>

</html>
//對於lang,這樣定義:lang 偽類使你有能力為不同的語言定義特殊的規則。在下面的例子中,lang 類為屬性值為
 //no 的 q 元素定義引號的型別:
 <html>
<head>
<style type="text/css">
q:lang(no)
   {
   quotes: "~" "~"
   }
</style>

</head>
<body>
<p>文字<q lang="no">段落中的引用的文字</q>文字</p>
</body></html>

執行效果: 文字~段落中的引用的文字~文字

八、偽元素       關於偽元素,因為經驗不足,也是查了很多文章才慢慢理清,首先說一下為什麼叫偽元素?為什麼叫偽類?(1)偽元素可以通過新增相應的元素實現相應的功能個 (2)偽類可以通過新增相應的類實現相應的功能       偽元素有這幾種:       :first-letter 向文字的第一個字母新增特殊樣式。       :first-line 向文字的首行新增特殊樣式。       :before 在元素之前新增內容。       :after 在元素之後新增內容。

h1:before
  {
  content:url(logo.gif); //在每個h1之前加入圖片
  }
 h1:after
  {
  content:url(logo.gif);//在每個h2之後加入圖片
  }

關於它們詳細說明檢視這裡這位大神在裡面闡述了具體的由來,例子也很詳細。