1. 程式人生 > >【前端基礎】- CSS 1-CSS選擇器

【前端基礎】- CSS 1-CSS選擇器

引入css方式(重點掌握)

1、行內樣式

<div>
    <p style="color: green">我是一個段落</p>
</div>

在標籤內新增一個style屬性,屬性值為要設定的樣式:樣式的值。

2、內接樣式

<style type="text/css">
    /*寫我們的css程式碼*/
        
    span{
    color: yellow;
    }

</style>

3、外接樣式

3.1 連結式

<link rel="stylesheet" href="./index.css">

3.1 匯入式

<style type="text/css">
        @import url('./index.css');
</style> 

css的選擇器:

​ 1.基本選擇器

​ 2.高階選擇器

CSS選擇器

基本選擇器

基本選擇器包括:

  1. 標籤選擇器
  2. id選擇器
  3. 類選擇器

1.標籤選擇器

標籤選擇器可以選中所有的標籤元素,比如div,ul,li ,p等等,不管標籤藏的多深,都能選中,選中的是所有的,而不是某一個,所以說 "共性" 而不是 ”特性“

body{
    color:gray;
    font-size: 12px;
}
/*標籤選擇器*/
p{
    color: red;
font-size: 20px;
}
span{
    color: yellow;
}

2.id選擇器

# 選中id

同一個頁面中id不能重複。
任何的標籤都可以設定id
id命名規範 要以字母 可以有數字 下劃線 - 大小寫嚴格區分 aa和AA是兩個不一樣的屬性值

#box{
    background:green;
}
            
#s1{
    color: red;
}

#s2{
    font-size: 30px;
}

3.類選擇器

所謂類:就是class . class與id非常相似 任何的標籤都可以加類,但是類是可以重複,屬於歸類的概念。同一個標籤中可以攜帶多個類,用空格隔開

類的使用,能夠決定前端工程師的css水平到底有多牛逼?

玩類了,一定要有”公共類“的概念。

.lv{
    color: green;

}
.big{
    font-size: 40px;
}
.line{
   text-decoration: underline;
}
 <!-- 公共類    共有的屬性 -->
<div>
    <p class="lv big">段落1</p>
    <p class="lv line">段落2</p>
    <p class="line big">段落3</p>
</div>

總結:

  • 不要去試圖用一個類將我們的頁面寫完。這個標籤要攜帶多個類,共同設定樣式

  • 每個類要儘可能的小,有公共的概念,能夠讓更多的標籤使用

到底使用id還是用class?

答案:儘可能的用class。除非一些特殊情況可以用id

原因:id一般是用在js的。也就是說 js是通過id來獲取到標籤

高階選擇器

  • 後代選擇器

  • 子代選擇器

  • 並集選擇器

  • 交集選擇器

後代選擇器

使用空格表示後代選擇器。顧名思義,父元素的後代(包括兒子,孫子,重孫子)

.container p{
    color: red;        
}
.container .item p{
    color: yellow;
}

子代選擇器

使用>表示子代選擇器。比如div>p,僅僅表示的是當前div元素選中的子代(不包含孫子....)元素p。

.container>p{
    color: yellowgreen;
}

並集選擇器

多個選擇器之間使用逗號隔開。表示選中的頁面中的多個標籤。一些共性的元素,可以使用並集選擇器

比如像百度首頁使用並集選擇器。

body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td {
      margin: 0;
      padding: 0
   }
/*使用此並集選擇器選中頁面中所有的標籤,頁面佈局的時候會使用*/

交集選擇器

使用.表示交集選擇器。第一個標籤必須是標籤選擇器,第二個標籤必須是類選擇器 語法:div.active

比如有一個<h4 class='active'></h4>這樣的標籤。

那麼

h4{
    width: 100px;
    font-size: 14px;
}
.active{
    color: red;
    text-decoration: underline;
}
/* 交集選擇器 */
h4.active{
    background: #00BFFF;
}

它表示兩者選中之後元素共有的特性。

補充選擇器

屬性選擇器

屬性選擇器,字面意思就是根據標籤中的屬性,選中當前的標籤。

語法:

/*根據屬性查詢*/
/*[for]{
    color: red;
}*/

/*找到for屬性的等於username的元素 字型顏色設為紅色*/
/*[for='username']{
    color: yellow;
}*/

/*以....開頭  ^*/  
/*[for^='user']{
    color: #008000;
}*/

/*以....結尾   $*/
/*[for$='vvip']{
    color: red;
}*/

/*包含某元素的標籤*/
/*[for*="vip"]{
    color: #00BFFF;
}*/

/**/

/*指定單詞的屬性*/
label[for~='user1']{
    color: red;
}

input[type='text']{
    background: red;
}

偽類選擇器

偽類選擇器一般會用在超連結a標籤中,使用a標籤的偽類選擇器,我們一定要遵循"愛恨準則" LoVe HAte

/*沒有被訪問的a標籤的樣式*/
.box ul li.item1 a:link{
    
    color: #666;
}
/*訪問過後的a標籤的樣式*/
.box ul li.item2 a:visited{
    
    color: yellow;
}
/*滑鼠懸停時a標籤的樣式*/
.box ul li.item3 a:hover{
    
    color: green;
}
/*滑鼠摁住的時候a標籤的樣式*/
.box ul li.item4 a:active{
    
    color: yellowgreen;
}

再給大家介紹一種css3的選擇器nth-child()

/*選中第一個元素*/
div ul li:first-child{
    font-size: 20px;
    color: red;
}
/*選中最後一個元素*/
div ul li:last-child{
    font-size: 20px;
    color: yellow;
}

/*選中當前指定的元素  數值從1開始*/
div ul li:nth-child(3){
    font-size: 30px;
    color: purple;
}

/*n表示選中所有,這裡面必須是n, 從0開始的  0的時候表示沒有選中*/
div ul li:nth-child(n){
    font-size: 40px;
    color: red;
}

/*偶數*/
div ul li:nth-child(2n){
    font-size: 50px;
    color: gold;
}
/*奇數*/
div ul li:nth-child(2n-1){
    font-size: 50px;
    color: yellow;
}
/*隔幾換色  隔行換色
     隔4換色 就是5n+1,隔3換色就是4n+1
    */

div ul li:nth-child(5n+1){
    font-size: 50px;
    color: red;
}

偽元素選擇器

廢話不多說,直接上程式碼!!!

/*設定第一個首字母的樣式*/
        p:first-letter{
            color: red;
            font-size: 30px;

        }
        
/* 在....之前 新增內容   這個屬性使用不是很頻繁 瞭解  使用此偽元素選擇器一定要結合content屬性*/
        p:before{
            content:'alex';
        }
        
        
/*在....之後 新增內容,使用非常頻繁 通常與咱們後面要講到佈局 有很大的關聯(清除浮動)*/
        p:after{
            content:'&';
            color: red;
            font-size: 40px;
        }

CSS的繼承性和層疊性

css有兩大特性:繼承性和層疊性

繼承性

面嚮物件語言都會存在繼承的概念,在面嚮物件語言中,繼承的特點:繼承了父類的屬性和方法。那麼我們現在主要研究css,css就是在設定屬性的。不會牽扯到方法的層面。

繼承:給父級設定一些屬性,子級繼承了父級的該屬性,這就是我們的css中的繼承。

記住:有一些屬性是可以繼承下來 : color 、 font-、 text-、line-* 。主要是文字級的標籤元素。

但是像一些盒子元素屬性,定位的元素(浮動,絕對定位,固定定位)不能繼承。

層疊性

層疊性: 權重的標籤覆蓋掉了權重小的標籤,說白了 ,就是被幹掉了
權重: 誰的權重大,瀏覽器就會顯示誰的屬性
誰的權重大? 非常簡單就是小學的數數。
數:id的數量 class的數量 標籤的數量,順序不能亂

/*1  0  0 */顯示紅色
#box{


    color: red; 
}
/*0  1  0*/
.container{
    color: yellow;
}
/*0  0  1*/
p{
    color: purple;
}

是不是感覺明白了呢?好的,再給大家加深點難度。

<div id='box1' class="wrap1">
    <div id="box2" class="wrap2">
        <div id="box3" class="wrap3">
            <p>再來猜猜我是什麼顏色?</p>
        </div>
    </div>
</div>
#box1 #box2 p{
    color: yellow;
}

#box2 .wrap3 p{
    color: red;
}

div div #box3 p{
    color: purple;
}


div.wrap1 div.wrap2 div.wrap3 p{
    color: blue;
}

好的。那麼上面的這個案例大家是否懂了呢?那麼接下來我們繼續看案例

還是上面那個html結構,如果我設定以下css,會顯示什麼顏色呢。

#box2 .wrap3 p{
    color: yellow;
}

#box1 .wrap2 p{
    color: red;
}

答案是紅色的。結論:當權重一樣的時候 是以後來設定的屬性為準,前提必須權重一樣 。‘後來者居上 ’。

Good,我們繼續看下面的css,你來猜以下此時字什麼顏色?

#box1 #box2 .wrap3{
    color: red;
}
        
#box2 .wrap3 p{
    color: green;
}

答案是綠色。哈哈,是不是感覺快懵掉了。其實大家只要記住這點特性就可以。第一條css設定的屬性值,是通過繼承性設定成的紅色,那麼繼承來的屬性,它的權重為0。它沒有資格跟我們下面選中的標籤對比。

那大家猜想一下如果都是被繼承來的屬性,那麼字會顯示什麼顏色呢?

#box1 #box2 .wrap3{
    color: red;
}
.wrap1 #box2{
    color: green;
}

小案例證明:權重都是0:那麼就是"就近原則" : 誰描述的近,就顯示誰的屬性。所謂描述的近,就是選中到最內層的距離越近。

小總結一下:

總結:
1.先看標籤元素有沒有被選中,如果選中了,就數數 (id,class,標籤的數量) 誰的權重大 就顯示誰的屬性。權重一樣大,後來者居上
2.如果沒有被選中標籤元素,權重為0。
如果屬性都是被繼承下來的 權重都是0 。權重都是0:"就近原則" : 誰描述的近,就顯示誰的屬性

層疊性權重相同處理

直接上程式碼,看效果!

第一種現象:當權重相同時,以後來設定的屬性為準,前提一定要權重相同

#box2 .wrap3 p{
    color: yellow;
}
        
#box1 .wrap2 p{
    color: red;
}

我們會發現此時顯示的是紅色的。

第二種現象: 第一個選擇器沒有選中內層標籤,那麼它是通過繼承來設定的屬性,那麼它的權重為0。第二個選擇器選中了內層標籤,有權重。

所以 繼承來的元素 權重為0。跟選中的元素沒有可比性。

#box1 #box2 .wrap3{
    color: red;
}
#box2 .wrap3 p{
    color: green;
}

我們會發現此時顯示的是綠色的。

第三種現象:如果都是繼承來的屬性,誰描述的近,顯示誰的屬性。'就近原則'

#box1 #box2 .wrap3{
    color: red;
}
 .wrap1 #box2{
    color: green;
}

!important 的使用。

!important:設定權重為無限大
!important 不影響繼承來的權重,隻影響選中的元素。不要隨便使用!important,因為使用它會影響頁面的佈局