3.1 CSS概述
CSS概述:
- HTML负责网页的内容
- CSS(层叠样式表):负责内容的样式,内容和样式相分离,便于修改样式
CSS语法:
选择器p:选择器后面跟着{},{}内可以添加具体的样式,每个具体样式是用不同的属性来添加的,属性和属性取值之间用:隔开,每一行语句结束用;隔开(可以没有)
1. CSS简介
网页分三部分:
结构(HTML)
表现(CSS)
行为(JavaScript)- 网页实际上是一个多层结构,通过CSS可以分别为网页的每一层来设置样式,而最终能看到的只是网页最上面一层,CSS用来设置网页中元素的样式
2. CSS编写位置
第一种(内联样式/行内样式):在标签内部通过style属性来设置元素的样式,style后跟名,名后跟值,值和值之间用;结尾
问题:使用内联样式,样式只能对一个标签生效,如果希望影响到多个元素必须在每一个元素中都复制一遍,并且当样式发生变化时,必须一个个修改,非常不便,开发时一定不要使用内联样式
\<p style="color:red; font-size: 20px">test\</p>
test
第二种(内部样式表):将样式编写到head中的style标签里,然后通过CSS选择器来选中元素并为其设置各种样式,可以同时为多个标签设置样式,并且修改时只需要修改一处即可全部应用
内部样式表更加方便对样式进行复用
问题:内部样式表只能对一个网页起作用,它里面的样式不能跨网页进行复用
<style>
p {
color: yello;
}
</style>
第三种(外部样式表):可以将CSS样式编写到一个外部的CSS文件中(名字是啥不重要,扩展名必须是css),然后通过link标签来引入外部的CSS文件(写head里)
p { color = red; } <link rel="stylesheet" href="./style.css">
这样意味着只要想使用这些样式的网页都可以对其引用,使样式可以在不同网页之间进行复用
将样式编写到外部的CSS文件中,可以使用到浏览器的缓存机制,从而加快网页的加载速度,提高用户的体验
3.CSS基本语法
- 在CSS区域,使用HTML语法无效
CSS基本语法:
- 选择器:通过选择器可以选中页面中的指定元素,比如p的作用是选中页面中所有的p元素
- 声明块:通过声明块来指定要为元素设置的样式,声明块由一个个的声明组成,声明是一个名值对结构,一个样式名对应一个样式值,样式名和样式值之间用:连接,以;结尾(样式名之间的;不能省略,最后的;可以省略)
p {
color: red;
}
4.CSS常用选择器
元素选择器
作用:根据标签名来选中指定元素
语法:标签名{}
例子:p{},h1{},div{}
id选择器
作用:根据元素的id属性值选中一个元素,一个id只能用一次
语法:#id属性值{}
例子:
#box{} or #red{
color: red;
}
<p id="red">test</p>
类选择器
作用:根据元素的class属性选中一组元素,类似id,但可以用多次,而且可以为一个元素指定多个class属性(多个class之间用空格隔开)
语法:.class属性值
例子:
.blue{
color: blue;
}
<h1 class="blue abc">test</h1>
通配选择器
作用:选中页面中的所有元素
语法:*
例子:*{}
5. 复合选择器
交集选择器
作用:选中同时符合多个条件的元素
语法:选择器1选择器2选择器3选择器n{}
<head> <style> .red{ color= red; } div.red{ font-size: 30px; } </style> </head> <body> <div class="red">test01</div> <p class="red">test02</p> </body>
注意:如果交集选择器中有元素选择器,必须使用元素选择器开头
选择器分组(并集选择器):
作用:同时选择多个选择器对应的元素
语法:选择器1,选择器2,选择器3,选择器n{}
6. 关系选择器
几个关系:
父元素:直接包含子元素的元素叫做父元素
子元素:直接被父元素包含的元素是子元素
祖先元素:直接或间接包含后代元素的元素叫做祖先元素,一个元素的父元素也是他的祖先元素
后代元素:直接或间接被祖先元素包含的元素叫做后代元素
兄弟元素:拥有相同的父元素的元素是兄弟元素
子元素选择器:
作用:选中指定父元素的指定子元素
语法:父元素 > 子元素
后代选择器
作用:选中指定元素的指定后代元素
语法:祖先 后代
兄弟元素选择器:
作用:选择下一个兄弟
语法:前一个 + 下一个
作用:选择下边所有兄弟
语法:前一个 ~ 下一个
<!-- 子元素选择器 -->
div > span{}
div > p > span{}
<!--后代选择器-->
div span{}
<!-- 兄弟选择器 -->
p + span{}<!--选择p后的下一个span标签-->
p ~ span{}<!--选择p后的所有span标签-->
<body>
<div>
我是div
<p>
我是div中的p元素
<span>我是p元素中的span</span>
</p>
<span>我是div中的span元素</span>
</div>
</body>
7. 属性选择器
- 选择含有指定属性的元素:标签名[属性名]
- 选择含有指定元素和属性值的元素:标签名[属性名=属性值]
- 选择以abc开头的元素:标签名[属性名^=属性值]
- 选择以abc结尾的元素:标签名[属性名$=属性值]
- 选择属性值中含有abc的元素:标签名[属性名*=属性值]
p[title]{}
p[title=abc]{}
<body>
<p title="abc">test01</p>
<p title="abcdef">test02</p>
<p title="hello">test03</p>
<p>test04</p>
<p>test05</p>
<p>test06</p>
</body>
8. 伪类选择器
伪类选择器两个:,伪元素选择器两个:
伪类(不存在的类,特殊的类)
伪类用来描述一个元素的状态
- 比如:第一个子元素、被点击的子元素、鼠标移入的元素
伪类一般情况下都是:开头
:first-child 第一个子元素
:last-child 最后一个子元素
:nth-child() 第n个子元素
- 以上的这些伪类都是根据所有子元素进行排序,ul > li:first-child指所有元素中的第一个子元素,还得是li
:first-of-type
:last-of-type
:nth-of-type()
- 这几个伪类功能和上述的类似,不同点是他们是在同类元素中进行排序
:not() 否定伪类
- 将符合条件的元素从选择器中去除
<!--将ul里的第一个li设置为红色-->
ul > li:first-child{
color: red;
}
<!--将ul里的最后一个li设置为红色-->
ul > li:last-child{
color: red;
}
<!--
将ul里的第1个li设置为红色
特殊值:
n 第n个 n的范围0到正无穷
2n 表示选中偶数位的元素
even 表示选中偶数位的元素
2n+1 表示选中奇数位的元素
odd 表示选中奇数位的元素
-->
ul > li:nth-child(1){
color: red;
}
//将第三个子元素元素从符合条件中筛去
ul > li:not(:nth-of-type(3)){
color: green
}
<ul> <li>第一个</li> <li>第二个</li> <li>第三个</li> <li>第四个</li> <li>第五个</li></ul>
9. a元素的伪类
a标签的状态:
- 没有访问过的链接
- 访问过的链接
<style>
{
/*
:link 用来表示没访问过的链接(正常的链接)
*/
a:link{
color: red;
}
/*
:visited 用来表示访问过的链接
由于隐私的原因,所以visited伪类只能修改链接的颜色,不能修改大小等
*/
a:visited{
color: yellow;
}
/*
:hover 用来表示鼠标移入的状态,所有链接都能用
*/
a:hover{
color: aqua;
font-size: 50px;
}
/*
:active 用来表示鼠标点击,所有链接都能用
*/
a:active{
color: orange;
font-size: 50px;
}
}
<a href="http://www.baidu.com">访问过的链接</a>
<a href="http://www.baidu123.com">没访问过的链接</a>
9. 伪元素选择器
/*
伪元素:表示页面中一些特殊的并不存在的元素(特殊的位置)
伪元素使用::开头
::first-letter 表示第一个字母
::first-line 表示第一行
::selection 表示选中的内容
::before 元素的开始
::after 元素的最后
-before和after必须结合content属性来使用(不然元素开始和最后没有东西)
*/
<style>
p::first-letter{//首字母下沉
fint-size: 50px;
}
p::first-letter{
background-color: yellow;
}
p::selection{
background-color: greenyellow;
}
p::before{
content: 'abc';
color: red;
}
p::after{
content: 'abc';
color: blue;
}
</style>
<p>
Hello!This is my blog!
Hello!This is my blog!
Hello!This is my blog!
</p>
10. 样式的继承
样式的继承,我们为一个元素设置的样式同时也会应用到它的后代元素上,只要是元素的后代,无论嵌套多少都会继承
继承是发生在祖先和后代之间的
继承的设计是为了方便我们的开发,利用继承我们可以将一些通用的样式统一设置到共同的祖先元素上,这样只需设置一次即可让所有的元素都具有该样式
注意:并不是所有的样式都会被继承,比如:背景相关的,布局相关的等,这些样式都不会被继承
11. 选择器的权重
- 样式的冲突
- 当我们通过不同的选择器,选中相同的元素,并且为相同的样式设置不同的值时,此时就发生了样式的冲突
发生样式冲突时,应用哪个样式由选择器的权重(优先级)决定
- 选择器权重(权重越大优先级越高,越优先显示)
内联样式 1000
id选择器 100
类和伪类选择器 10
元素选择器 1
通配选择器 0
继承的样式 没有优先级
比较优先级时需要将所有的选择器的优先级进行相加计算,最后优先级越高,则越优先显示(分组选择器是单独计算的),选择器的累加不会超过其最大的数量级类选择器再高也不会超过id选择器
如果优先级计算后相同,此时则优先使用靠下的样式
可以在某一个样式的后边添加 !important,则此时的样式会获取到最高的优先级,甚至超过内联样式,注意:在开发中这个要慎用
12. 单位
- 长度单位:
像素:
- 屏幕上(显示器)实际上是由一个一个的小点点构成的
- 不同屏幕的像素大小是不同的,像素越小的屏幕显示的效果越清晰
- 所以同样的200px在不同的设备下显示效果不一样
style{
.box1{
width:200px;
height:200px;
background-color:orange;
}
}
百分比:
- 也可以将属性设置为相对于父元素的百分比
- 设置百分比可以使子元素跟随父元素的改变而改变
style{
.box2{
width:50%;
height:50%;
background-color:aqua;
}
}
13. em和rem
- em
- em是相对于元素的字体大小来计算的,1em = 1font-size
- em会根据字体大小的改变而改变
- rem
- rem是相对于根元素的字体大小来计算(html的font-size)
style{
html{
font-size:20px;
}
.box3{
width:10rem;
height:50rem;
background-color:aqua;
}
}
- 颜色单位
在css中可以直接使用颜色名来设置各种颜色,比如:red,yellow,blue等,但是在css中直接使用颜色名是非常的不方便
RGB值:
- RGB通过三种颜色的不同浓度来调配出不同的颜色
- R red,G green,B blue
- 每一种颜色的范围在0-255(0% - 100%)
- 语法: RGB(红色,绿色,蓝色)[光的三原色]
style{
.box3{
width:10rem;
height:50rem;
background-color: rgb(255, 0, 0);
}
}
RGBA:
- 在RGB基础上多了个A->透明度,需要四个值,前三个和rgb一样,第四个表示不透明度
- .5表示半透明,1表示完全不透明
style{
.box3{
width:10rem;
height:50rem;
background-color: rgba(255, 0, 0, .5);//不透明度0.5,1表示完全不透明
}
}
十六进制的RGB值:
- 语法: #红色绿色蓝色
- 颜色浓度通过 00-ff
- 入宫颜色两位两位重复,可以进行简写#aabbcc -> #abc,如果是#aabbcd就不能简写
style{
.box3{
width:10rem;
height:50rem;
background-color: #ff0000;//不透明度0.5,1表示完全不透明
}
}