CSS学习之选择器及其优先级

CSS选择器

  • css选择器用用于定位标签,给其设置样式属性的;

常见的选择器

简单选择器
  • 通配符选择器:给所有的标签设置样式,但优先级最低,权重为0;
    * {
    	margin: 0px;
    	padding: 0px;
    }
    

*标签选择器: 直接标签名加大括号,权重为10
css p { text-align: center; }

  • class选择器: 标签的class属性设置一个名称,如class="A";设置样式时.A{},多对多的关系,权重10;

    .A {
    	background-color: red;
    }
    

    html代码

    <div class="A"></div>
    
  • 属性选择器:给标签设置一个属性名和属性值,设置样式时可以只写属性名,也可以写属性名和值,优先级相同,权重10;

    [name="B"] {
    
    	background-color: blue;
    	border: 1px solid green;
    }
    [name] {
    	background-color: red;
    	width: 100px;
    	height: 100px;
    }
    

    html代码

    <div name="B"></div>
    <div name=""></div>
    

    在这里插入图片描述

  • id选择器:#id值{},设置标签的id属性,id选择器必须是一对一;权重100;

    #C {
    	background-color: red;
    }
    

    html代码

    <div id="C"></div>
    
  • 行内样式/内联样式:设置标签的style属性,权重1000;

    <div style="background-color: red; width: 100px;height: 100px;"></div>
    

*!important:!important写在css属性样式值后面表明这个样式很重要,优先级很高,权重为正无穷;(注意这里面的正无穷依然可以计算的)
css div { width: 200px; height: 200px!important; background-color: blue!important; }
html <div style="background-color: red; width: 100px; height: 100px;"></div>
在这里插入图片描述

复杂选择器
  • 分组选择器:多个简单选择器设置同样的样式,优先级取决于组中的简单选择器;

    #A,
    #B,
    .C,
    #D {
    	background-color: red;
    	width: 100px;
    	height: 100px;
    }
    
    <div id="A">1</div>
    <div id="B">2</div>
    <div class="C">
    	<div id="D">3</div>
    	4
    </div>
    

    在这里插入图片描述

  • 父子选择器:元素之间有直接或间接父子关系,写的时候中间有空格;权重为各个简单选择器的权重值相加;

    /*父子选择器*/
    .A div {
    	width: 100px;
    	height: 100px;
    	border: 1px solid red;
    	background-color:#0ff; 
    }
    /*class选择器*/
    .B {
    	background-color:green;
    }
    /*id选择器*/
    #C {
    	background-color: green;
    }
    
    <div class="A">
    	<div>1</div>
    	<div>2</div>
    	<div>3
    		<div class="B">
    			3.1
    		</div>
    	</div>
    	<div id="C">4</div>
    </div>
    

    父子选择器
    分析:..A div权重为10+1=11;.B权重为10;#C的权重为100;所以3.1的背景颜色为青色,4的背景颜色为绿色;
    字面上分析:class="A"的标签所有子元素都为青色,然后设置了class="B"的标签背景颜色为为绿色;可能有很多标签为classA或classB,但是classA中的div标签又把范围缩小了一些(也就是说classA或classB在理论是范围一样的,但是classA范围下的div就更精确一些),所以.B不会将.A div的背景颜色覆盖;#C是id属性,一一对应,一个html页面中只有一个该标签,优先级很高了,所以4的背景颜色为红色;

  • 直接父子选择器:也就是父类下一级子元素,不包含孙子类等元素;优先级要比父子选择器高(范围更小了);

    .A>div {
    	background-color: yellow;
    }
    

    在这里插入图片描述

  • 并列选择器:主要用于更精确的定位到标签,中间不加空格;权重也是各简单选择器权重相加;

    div.A{
    	background-color: green;
    }
    .A {
    	background-color: red;
    }
    
    div#C {
    	background-color: yellow;
    }
    #C {
    	background-color: #0ff;
    }
    

并列选择器
分析:#C虽然是id选择器,但是div#C能缩小查找的范围,所以div#C的优先级高;

伪类和伪元素

  • 伪类和伪元素也是有权重的,伪类是10,伪元素是1;
伪类
  • 伪类:是用来添加一些选择器的特殊效果。之所以成为伪类,是因为他不能直接给标签设置一个类型属性,但是可以再css中设置该标签的在不同状态下的不同样式;
  • 语法为selector:pseudo-class {property:value;};如anchor伪类:(设置a标签在不同状态下的不同样式)
    a:link {color:#FF0000;} /* 未访问的链接 */
    a:visited {color:#00FF00;} /* 已访问的链接 */
    a:hover {color:#FF00FF;} /* 鼠标划过链接 */
    a:active {color:#0000FF;} /* 已选中的链接 */
    
伪元素(伪标签)
  • 伪元素:是用来添加一些选择器的特殊效果。之所以称为伪元素是因为它不是一个真正的标签/元素,但是他可以这是内容样式等.
  • 伪元素的语法:selector::pseudo-element {property:value;}selector:pseudo-element {property:value;}
    /*":before" 伪元素可以在元素的内容前面插入新内容。*/
    
    p::before {
    	content: "前面添加内容";
    	color: red;
    }
    /*":after" 伪元素可以在元素的内容之后插入新内容。*/
    p:after {
    	content: "后面添加内容";
    	color: blue;
    }
    
    <p>html中的类容</p>
    
    伪元素

选择器优先级

  • 选择器很多,可能一个标签通过选择器设置很多样式,如果一个标签的多个选择器设置了同一个样式,那么最终展示的是优先级高的样式;如果优先级相等,那么写在后面的样式会覆盖前面的样式:(这里说的样式是样式的统一属性,不同属性不会有影响).
  • 优先级的高低是以选择器权重决定的;
选择器权重
!important正无穷
行内样式1000
id选择器100
class选择器,属性,伪类10
标签选择器,伪元素1
通配符0
  • 父子选择器,直接父子选择器,并列选择器都是权重为各简单选择器权重之和;这只是简单的计算,具体的还要具体分析,只要是范围更小更精确,则优先级更高.
  • 注意上面的权重计算是256进制;并且正无穷加1是比正无穷大的;(也就是说正无穷是可以参与计算的).
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值