一、基本选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*标签选择器*/
div{
color: red;
}
li{
color: green;
}
/*id选择器*/
#i1{
color: lightskyblue;
}
/*class选择器*/
.c1{
color: lightcoral;
}
/*通配选择器*/
*{
color: darkmagenta;
}
</style>
</head>
<body>
<div>alvin</div>
<div>alvin</div>
<div>alvin</div>
<ul>
<li>123</li>
<li>234</li>
<li>345</li>
</ul>
<p id="i1">p标签1</p>
<p id="i2">p标签2</p>
<p class="c1">p标签3</p>
<p class="c1">p标签4</p>
<p class="c1">p标签5</p>
</body>
</html>
二 、组合选择器
2.1 后代子代选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*.c2{*/
/* color: red;*/
/*}*/
/*后代选择器*/
/*.c1 .c2 .c3{*/
/* color: red;*/
/*}*/
/*子代选择器,只找到儿子层*/
.c1 > .c3{
color: green;
}
</style>
</head>
<body>
<div class="c1">
<div class="c2">
<div class="c3">item1</div>
</div>
</div>
<div class="c1">
<div class="c3">item2</div>
</div>
</body>
</html>
2.2 与或选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div.c1,#i1{ /*div.c1与表示且的关系,紧贴 ,#i1或用逗号分割*/
color: white;
background-color: #336699;
font-size: 32px;
}
</style>
</head>
<body>
<div class="c1">item1</div>
<p class="c1">item2</p>
<div>item3</div>
<p id="i1">item4</p>
</body>
</html>
2.3 兄弟选择器
定义:拥有同一个父亲的标签
- 毗邻选择器 和自己同级的下一个兄弟标签
- 普通兄弟选择器 拥有同一个父亲的标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*!*毗邻选择器*!*/
/*.c2 + .c3{*/
/* color: red;*/
/*}*/
/*普通兄弟选择器*/
/*.c2 ~ div{*/
/* color: red;*/
/*}*/
</style>
</head>
<body>
<div class="c1">item1</div>
<div class="c2">item2</div>
<div class="c3">item3</div>
<div class="c4">item4</div>
<div class="c5">item5</div>
<p>item6</p>
</body>
</html>
三、属性选择器
E[att] 匹配所有具有att属性的E元素,不考虑它的值。(注意:E在此处可以省略。
比如“[cheacked]”。以下同。) p[title] { color:#f00; }
E[att=val] 匹配所有att属性等于“val”的E元素 div[class=”error”] { color:#f00; }
E[att~=val] 匹配所有att属性具有多个空格分隔的值、其中一个值等于“val”的E元素
td[class~=”name”] { color:#f00; }
E[attr^=val] 匹配属性值以指定值开头的每个元素
div[class^="test"]{background:#ffff00;}
E[attr$=val] 匹配属性值以指定值结尾的每个元素 div[class$="test"]{background:#ffff00;}
E[attr*=val] 匹配属性值中包含指定值的每个元素 div[class*="test"]{background:#ffff00;}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1{
color: white;
background-color: #424242;
}
.c2{
font-size: 32px;
font-style: italic;
}
.c3{
font-weight: bolder;
}
/*属性选择器*/
input[type="text"]{
border:1px solid red;
}
div[k1="v1"]{
color: green;
}
[href$=".png"]{ /*通过正则去模糊匹配值*/
color: red;
}
[class*="col-md-"]{ /*通过正则去模糊匹配值*/
border: 1px solid rebeccapurple;
}
</style>
</head>
<body>
<!--<div class="c1">alvin</div>-->
<!--<div class="c2 c3">alvin2</div>-->
<input type="text">
<input type="password">
<div k1="v1">item1</div>
<p k1="v1">item2</p>
<div class="c4">
<a rel="nofollow" href="1.png">click1</a>
<a rel="nofollow" href="2.png">click2</a>
<a rel="nofollow" href="3.jpg">click3</a>
<a rel="nofollow" href="4.png">click4</a>
</div>
<div>
<div class="col-md-2">col-md-2</div>
<div class="col-md-4">col-md-4</div>
<div class="col-md-1">col-md-1</div>
</div>
<div class="c1 c2 c3">alvin</div>
</body>
</html>
四、伪类选择器
4.1 anchor伪类:专用于控制链接的显示效果
- anchor伪类:专用于控制链接的显示效果
:link | a:link | 选择所有未被访问的链接。 |
---|---|---|
:visited | a:visited | 选择所有已被访问的链接。 |
:active | a:active | 选择活动链接。 |
:hover | a:hover | 选择鼠标指针位于其上的链接。 |
<style>
a:link{ /*选择所有未被访问的链接*/
color: red;
}
a:visited{ /*选择所有已被访问的链接*/
color: coral;
}
a:hover{ /*选择鼠标指针位于其上的链接*/
color: blue;
}
a:active{ /*选择活动链接*/
color: rebeccapurple;
}
</style>
4.2 before after伪类
before/after伪类相当于在元素内部插入两个额外的标签,其最适合也是最推荐的应用就是图形生成
。在一些精致的UI实现上,可以简化HTML代码,提高可读性和可维护性。
:first-child | p:first-child | 选择属于父元素的第一个子元素的每个 <p> 元素。 |
---|---|---|
:last-child | p:last-child | 选择属于其父元素最后一个子元素每个 <p> 元素。 |
:before | p:before | 在每个 <p> 元素的内容之前插入内容。 |
:after | p:after | 在每个 <p> 元素的内容之后插入内容。 |
:first-letter | p:first-letter | 选择每个 <p> 元素的首字母,并为其设置样式: |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1 p:first-child{ /*c1下边是p标签的第一个孩子*/
color: red;
}
.c1 :last-child{ /*c1下边的第一个孩子*/
color: red;
}
p#i1:after{ /*在每个p标签下有id为i1的标签的元素的内容之后插入内容。*/
content:"hello";
color:red;
display: block;
}
</style>
</head>
<body>
<div class="c1">
<p>item1</p>
<p>item1</p>
<div>item1</div>
<p>item1</p>
</div>
<p id="i1">p标签</p>
</body>
</html>
五、css样式继承
css的样式表继承指的是,特定的css属性向下传递到子孙元素
因此,如果了解了哪些样式是会继承到后代元素的,那么就可以避免这些问题的发生了。
文本相关属性 | |||
---|---|---|---|
font-family | font-size | letter-spacing | line-height |
font-style | font-variant | text-align | text-indent |
font-weight | font | text-transform | word-spacing |
color | direction | ||
列表相关属性 | |||
list-style-image | list-style-position | list-style-type | list-style |
表格和其他相关属性 | |||
border-collapse | border-spacing | caption-side | empty-cells |
cursor |
六、选择器优先级
- 所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序。样式表中的特殊性描述了不同规则的相对权重。
/*
!important > 行内样式>ID选择器 > 类选择器 > 标签 > 通配符 > 继承 > 浏览器默认属性
1 内联样式表的权值最高 style="" 1000;
2 统计选择符中的ID属性个数。 #id 100
3 统计选择符中的CLASS属性个数。 .class 10
4 统计选择符中的HTML标签名个数。 标签名 1
按这些规则将数字符串逐位相加,就得到最终的权重,然后在比较取舍时按照从左到右的顺序逐位比较。
*/
1、有!important声明的规则高于一切。
2、如果!important声明冲突,则比较优先权。
3、如果优先权一样,则按照在源码中出现的顺序决定,后来者居上。
4、由继承而得到的样式没有specificity的计算,它低于一切其它规则(比如全局选择符*定义的规则)。
5、用数字表示只是说明思想,一万个class也不如一个id权值高
======================================================================
原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/210143.html