【前端基礎】- 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選擇器
基本選擇器
基本選擇器包括:
- 標籤選擇器
- id選擇器
- 類選擇器
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
,因為使用它會影響頁面的佈局