一、css编写的位置
三种方式
<!DOCTYPE html>
<html lang="ch">
<head>
<title>实体</title>
<!--
第二种方式(内部样式表)
- 将样式编写到head中的style标签里
然后通过css的选择器来选择元素并为其设置各种样式
可以同时为多个标签设置样式,并且修改时只需要修改一处即可全部应用
- 内部样式表更加方便对样式的使用
- 问题:
内部样式表只能对一个页面起作用
它里面的样式不能跨页面进行复用
-->
<!-- <style>
p{
color: green;
font-size: 40px;
}
</style> -->
<!--
第三种方式(外部样式表)最佳实践
- 可以将css样式编写到一个外部的css文件中
然后通过link标签来引入外部的css文件
- 外部样式表需要通过link标签进行引入
意味着只要想使用这些样式的网页都可以对其进行引用
使样式可以在不同页面之间进行复用
- 将样式编写到外部的css文件中,可以使用到浏览器的缓存机制
从而加快网页的加载速度,提高用户的体验。
-->
<link rel="stylesheet" type="text/css" href="../CSS/ent.css">
</head>
<body>
<!--
CSS
- 层叠样式表
- 网页实际上是一个多层的结构,通过css可以分别为网页的每一个层来设置样式
而最终我们能看到的只是网页的最上边一层
- 总之一句话,css用来设置网页中元素的样式
-->
<!--
使用css来修改元素的样式
第一种方式:(内联样式,行内样式)
- 在标签内部通过style属性来设置元素的样式
- 问题:
使用内联样式,样式只能对一个标签生效
如果希望影响到多个元素必须在每一个元素中都复制一遍
并且当样式发生变化时,我们必须要一个一个的修改,非常不方便
- 注意:开发时绝对不能使用内联样式
-->
<p style="color: red; font-size: 50px;">少小离家老大回,乡音无改鬓毛衰。</p>
<p>小荷才露尖尖角,早有蜻蜓立上头。</p>
<p id="p0">竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。</p>
</body>
</html>
二、CSS语法
<!--
css中的注释,注释中的内容自动被浏览器所忽略
CSS的基本语法:
选择器 声明块
选择器:通过选择器可以选中页面的指定元素
比如 p的作用是选中页面中所有的p元素
声明块:通过声明块来指定要为元素设置的样式
声明块由一个一个的声明组成
声明是一个名值对结构
一个样式名对应一个样式值,名和值之间以:连接,以;结尾。
-->
三、常用选择器
/*
将所有的段落设置为红色(字体)
元素选择器
作用:根据标签名来选中指定的元素
语法:标签名{}
例子:p{} h1{} div{}
*/
p{
color: red;
font-size: 30px;
}
/*
将id为p0的段落设置为黄色
id选择器(只对一个元素,id唯一)
作用:根据元素的id属性值选中一个元素
语法:#id属性值{}
例子:#p0{} #p1{}
*/
#id0{
color: yellow;
font-size: 30px;
}
/*
将class为class0的段落设置为蓝色
class类选择器(开发中主要用)
作用:根据元素的class属性值选中一组元素
语法:.class属性值{}
例子:.class0{} .class1{}
class 是一个标签的属性,它和id类似,不同的是class可以重复使用
可以通过class属性来为元素分组
可以同时为一个元素指定多个class属性(使用空格隔开)
*/
.class0{
color: blue;
}
.class1{
font-size: 40px;
}
/*
通配选择器
作用:选中页面中的所有元素
语法:*{}
*/
*{
color: cadetblue;
}
四、复合选择器(交集和并集选择器)
/*
1.将class为class0的元素设置为红色字体
*/
.class0{
color: red;
}
/*
2.将class为class0的div字体大小设置为30px
交集选择器(两个选择器之间不要有空格)
作用:选中同时符合多个条件的元素
语法:选择器1选择器2选择器3选择器n{}
注意点:
交集选择器中如果有元素选择器,必须使用元素选择器开头
*/
div.class0{
font-size: 30px;
}
/*
选择器分组(并集选择器)
作用:同时选择多个选择器对应的元素
语法:选择器1,选择器2,选择器n{}
*/
h1,span{
color: rebeccapurple;
}
五、关系选择器
/*
为div的子元素span设置一个字体颜色红色
子元素选择器
作用:选中指定父元素的指定子元素
语法:父元素 > 子元素
*/
div.div0>span{
color: red;
}
/*
后代元素选择器
作用:选中指定元素内的指定后代元素
语法:祖先 后代
*/
p span{
color: skyblue;
}
/*
选择下一个兄弟
语法:前一个 + 下一个
选择下面所有兄弟
语法:兄 ~ 弟
例子:p紧挨着的第一个span
如果p后面的是其他元素,之后才是span,不行
如果span后面还有好几个span,那么只有第一个span才有效
*/
/* p + span{
font-size: 50px;
} */
p ~ span{
font-size: 50px;
}
六、属性选择器
<body>
<p title="asasasba">aaa</p>
<p title="ab">bbb</p>
<p title="cb">ccc</p>
<p>ddd</p>
<p>eebe</p>
</body>
/*
[属性名] 选择含有指定属性的元素
[属性名=属性值] 选择含有指定属性和属性值的元素
[属性名^=属性值] 选择属性名以指定值开头的元素
[属性名$=属性值] 选择属性值以指定值结尾的元素
[属性名*=属性值] 选择属性值中含有某值的元素
*/
p[title*=b]{
color: yellowgreen;
}
七、伪类选择器
<body>
<ul>
<span>hhh</span>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</body>
/*
将ul里的li设置为红色
伪类(不存在的类,特殊的类)
- 伪类用来描述一个元素的特殊状态
比如:第一个子元素,被点击的元素,鼠标移入的元素...
- 伪类一般情况下都是使用:开头
:first-child 第一个子元素
:last-child 最后一个子元素
:nth-child() 选中第n个子元素
特殊值:
n 第n个 n的范围0到正无穷
2n 或 even 表示选中偶数位的元素
2n+1 或 odd 表示选中奇数位的元素
以上这些伪类都是根据所有子元素进行排序
:first-of-type
:last-of-type
:nth-of-type()
这几个伪类的功能和上述的类似,不同点是他们是在同类型元素中进行排序
- :not() 否定伪类
将符合条件的元素从选择器中去除
*/
/* ul>li:first-child{
color: red;
} */
/* ul>li:first-of-type{
color: red;
} */
/* ul>li:last-child{
color: red;
}
ul>li:nth-child(2n+1){
color: red;
}
ul>li:nth-child(odd){
color: red;
}
*/
ul>li:not(:nth-of-type(2)){
color: red;
}
八、超链接的伪类
<a href="https://www.baidu.com" target="_blank">访问过的链接</a>
<br><br>
<a href="https://www.baidu123.com">未访问过的链接</a>
/*
:link 用来表示没访问过的链接(正常的链接)
:visited 用来表示访问过的链接
由于隐私的原因,:visited这个伪类只能修改链接的颜色,不能修改大小
:hover 用来表示鼠标移入的状态
:active 用来表示鼠标点击(点击之后会变化)
*/
a:link{
color: red;
font-size: 30px;
}
a:visited{
color: orange;
}
a:hover{
color: yellowgreen;
font-size: 50px;
}
a:active{
color: violet;
font-size: 40px;
}
九、伪元素
<div>leo-zu, Hello World! Great!</div>
<p>寂寞默默沉入海</p>
/*
伪元素 表示页面中一些特殊的并不真实的元素(特殊的位置)
伪元素使用 :: 开头
::first-letter 表示第一个字母
::first-line 表示第一行
::selection 表示选中的内容
::before 元素的开始
::after 元素的最后
- before和after 必须结合content属性来使用
*/
p::first-letter{
font-size: 50px;
}
p::first-line{
background-color: yellow;
}
p::selection{
background-color: greenyellow;
}
div::before{
content: '【';
color: red;
}
div::after{
content: '】';
color: red;
}
十、选择器的权重(优先级)
<body>
<!-- 内联样式 -->
<!-- <div id="id0" class="class0" style="background-color: green;">选择器的优先级</div> -->
<div id="id0" class="class0">选择器的优先级</div>
</body>
/*
样式的冲突
-当我们通过不同的选择器时,选中相同的元素,并且为相同的样式设置不同的值时
此时就发生了样式的冲突
选择器的权重(优先级)
- 内联样式 1000
- id选择器 100
- 类和伪类选择器 10
- 元素选择器 1
- 通配选择器 0
- 继承的样式 没有优先级
比较优先级时,需要将所有的选择器的权重进行相加计算,
最后优先级越高,则越有限显示(分组选择器“,” 是单独计算)
注意:当多个类选择器的优先级进行相加计算时,不会超过其最大的数量级,再高也不会高过id选择器
如果优先级相加以后相等,那么优先级选择靠下的样式
可以再某一个样式的后面添加!important , 则此时该样式会获得最高的优先级
注意:!important在开发中一定要慎用
*/
/* 通配选择器 */
*{
background-color: thistle !important;
}
/* 元素选择器 */
div{
background-color: red;
}
/* 类选择器 */
.class0{
background-color: royalblue;
}
/* id选择器 */
#id0{
background-color: sandybrown;
}
/* 比较优先级,进行相加计算 */
div#id0{
background-color: sienna;
}