CSS简介
网页分成三个部分:
结构(HTML)
表现(CSS)
行为(JavaScript)
CSS
- 层叠样式表
- 网页实际上是一个多层的结构,通过CSS可以分别为网页的每一个层来设置样式
而最终我们能看到只是网页的最上边一层
- 总之一句话,CSS用来设置网页中元素的样式
使用CSS来修改元素的样式的三种方法
第一种方式(内联样式,行内样式):
- 在标签内部通过style属性来设置元素的样式
- 问题:
使用内联样式,样式只能对一个标签生效,
如果希望影响到多个元素必须在每一个元素中都复制一遍
并且当样式发生变化时,我们必须要一个一个的修改,非常的不方便
- 注意:开发时绝对不要使用内联样式
/*在标签内用style属性设置样式*/
<p style="color: red; font-size: 60px;">今天天气真不错!</p>
第二种方式(内部样式表)
- 将样式编写到head中的style标签里
然后通过CSS的选择器来选中元素并为其设置各种样式
可以同时为多个标签设置样式,并且修改时只需要修改一处即可全部应用
- 内部样式表更加方便对样式进行复用
- 问题:
我们的内部样式表只能对一个网页起作用, 它里边的样式不能跨页面进行复用
/*在head中使用style标签编写样式*/
<head>
<style>
p{
color: green;
font-size: 50px;
}
</style>
</head>
第三种方式 (外部样式表) 最佳实践
- 可以将CSS样式编写到一个外部的CSS文件中,
然后通过link标签来引入外部的CSS文件
- 外部样式表需要通过link标签进行引入,
意味着只要想使用这些样式的网页都可以对其进行引用
使样式可以在不同页面之间进行复用
- 将样式编写到外部的CSS文件中,可以使用到浏览器的缓存机制,
从而加快网页的加载速度,提高用户的体验。
/*从外部引入css文件*/
<link rel="stylesheet" href="./style.css">
CSS的基本语法
选择器 声明块
选择器:
通过选择器可以选中页面中的指定元素
比如 p 的作用就是选中页面中所有的p元素
声明块:
通过声明块来指定要为元素设置的样式
声明块由一个一个的声明组成,声明是一个名值对结构
一个样式名对应一个样式值,名和值之间以:连接,以;结尾
/*CSS基本语法*/
p{
color: red;
font-size: 40px;
}
h1{
color: green;
}
选择器
常用选择器
-
元素选择器
作用:根据标签名来选中指定的元素 语法:标签名{} 例子:p{} h1{} div{}
-
id选择器
作用:根据元素的id属性值选中一个元素 语法:#id属性值{} 例子:#box{} #red{}
-
类选择器
作用:根据元素的class属性值选中一组元素 语法:.class属性值
-
通配选择器
作用:选中页面中的所有元素 语法: *
复合选择器
交集选择器
作用:选中同时符合多个条件的元素
语法:选择器1.选择器2.选择器3.选择器n{}
注意点:
交集选择器中如果有元素选择器,必须使用元素选择器开头
<style>
/* 将class为red的div字体大小设置为30px */
div.red{
font-size: 30px;
}
</style>
<body>
<div class="red">我是div</div>
<p class="red">我是p元素</p>
</body>
-选择器分组(并集选择器)
作用:同时选择多个选择器对应的元素
语法:选择器1,选择器2,选择器3,选择器n{}
#b1,p1,h1,span,div.red{}
<style>
/*将h1,以及span中的字体设置为绿色*/
h1, span{
color: green
}
</style>
<body>
<h1>标题</h1>
<span>我是span</span>
</body>
关系选择器
在学习关系选择器之前元素之间都有哪些关系
父元素
- 直接包含子元素的元素叫做父元素
子元素
- 直接被父元素包含的元素是子元素
祖先元素
- 直接或间接包含后代元素的元素叫做祖先元素
- 一个元素的父元素也是它的祖先元素
后代元素
- 直接或间接被祖先元素包含的元素叫做后代元素
- 子元素也是后代元素
兄弟元素
- 拥有相同父元素的元素是兄弟元素
-
子元素选择器
作用:选中指定父元素的指定子元素 语法:父元素 > 子元素
<style>
/*为div的子元素span设置一个字体颜色红色
(为div直接包含的span设置一个字体颜色)*/
div.box > span{
color: orange;
}
</style>
<body>
<div class="box">
<span> 我是div中的span </span>
</div>
</body>
- 后代元素选择器:
作用:选中指定元素内的指定后代元素
语法:祖先 后代
<style>
/*将div中所有的span元素字体改为蓝色*/
div span{
color: blue
}
</style>
<body>
<div>
<span> 我是div中的span </span> /*选中*/
<p> 我是div中的p
<span> 我是p中的span </span> /*选中*/
</p>
</div>
</body>
-
兄弟元素选择器
选择下一个兄弟 语法:前一个 + 下一个 选择下边所有的兄弟 语法:兄 ~ 弟
<style>
/*选择p元素的下一个兄弟span*/
p + span{
color: red;
}
/*选择p元素的下所有兄弟span*/
p ~ span{
color: red;
}
</style>
<body>
<div>
我是一个div
<p>
我是div中的p元素
<span>我是p元素中的span</span>
</p>
<span>我是div中的span元素</span>
<span>我是div中的span元素</span>
</div>
属性选择器
选择含有指定属性的元素
语法:元素[属性名]
<style>
/*选择p元素中含有title属性的元素*/
p[title]{
color: orange;
}
</style>
<doby>
<p title="abc">少小离家老大回</p> /*选中*/
<p title="abcdef">乡音无改鬓毛衰</p> /*选中*/
<p> 没有属性 </p> /*不选中*/
</doby>
选择含有指定属性和属性值的元素
语法:元素 [属性名=属性值]
<style>
/*选择p元素中含有title属性的元素*/
p[title="abc"]{
color: orange;
}
</style>
<doby>
<p title="abc">少小离家老大回</p> /*选中*/
<p title="abcdef">乡音无改鬓毛衰</p> /*不选中*/
<p> 没有属性 </p> /*不选中*/
</doby>
选择属性值以指定值开头的元素
语法:[属性名^=属性值]
<style>
/*选择以abc开头为属性值的元素*/
p[title^="abc"]{
color: orange;
}
</style>
<doby>
<p title="abc">少小离家老大回</p> /*选中*/
<p title="abcdef">乡音无改鬓毛衰</p> /*选中*/
<p> 没有属性 </p> /*不选中*/
</doby>
选择属性值以指定值结尾的元素
语法:[属性名$=属性值]
<style>
/*选择以ef结尾为属性值的元素*/
p[title$="ef"]{
color: orange;
}
</style>
<doby>
<p title="abc">少小离家老大回</p> /*不选中*/
<p title="abcdef">乡音无改鬓毛衰</p> /*选中*/
<p> 没有属性 </p> /*不选中*/
</doby>
选择属性值中含有某值的元素的元素
语法:[属性名*=属性值]
<style>
/*选择含有e的属性值的元素*/
p[title$="e"]{
color: orange;
}
</style>
<doby>
<p title="abc">少小离家老大回</p> /*不选中*/
<p title="abcdef">乡音无改鬓毛衰</p> /*选中*/
<p> 没有属性 </p> /*不选中*/
</body>
伪类选择器
伪类(不存在的类,特殊的类)
- 伪类用来描述一个元素的特殊状态
比如:第一个子元素、被点击的元素、鼠标移入的元素...
- 伪类一般情况下都是使用:开头
- :first-child,第一个子元素
<style>
/*选择ul元素的第一个li子元素*/
ul > li:first-child{
color: red;
}
</style>
<body>
<ul>
<span>我是一个span</span> /*不选中*/
<li>第一个</li> /*选中*/
<li>第二个</li> /*不选中*/
<li>第三个</li> /*不选中*/
</ul>
</body>
- :last-child,最后一个子元素
<style>
/*选择ul元素的最后一个li子元素*/
ul > li:last-child{
color: red;
}
</style>
<body>
<ul>
<span>我是一个span</span> /*不选中*/
<li>第一个</li> /*不选中*/
<li>第二个</li> /*不选中*/
<li>第三个</li> /*选中*/
</ul>
</body>
-
:nth-child(),选中第n个子元素
特殊值: n 第n个 n的范围0到正无穷 2n 或 even 表示选中偶数位的元素 2n+1 或 odd 表示选中奇数位的元素
<style>
/*选择ul元素的奇数个li子元素*/
ul > li:nth-child(2n+1){
color: red;
}
</style>
<body>
<ul>
<span>我是一个span</span> /*不选中*/
<li>第一个</li> /*选中*/
<li>第二个</li> /*不选中*/
<li>第三个</li> /*选中*/
</ul>
</body>
以上这些伪类都是根据所有的子元素进行排序
:first-of-type
:last-of-type
:nth-of-type()
- 这几个伪类的功能和上述的类似,不通点是他们是在同类型元素中进行排序
-
:not() 否定伪类
- 将符合条件的元素从选择器中去除
<style>
/*选择ul元素的li子元素的第三个*/
ul > li:not(:nth-of-type(3)){
color: red;
}
</style>
<body>
<ul>
<span>我是一个span</span> /*选中*/
<li>第一个</li> /*选中*/
<li>第二个</li> /*选中*/
<li>第三个</li> /*不选中*/
</ul>
</body>
a元素的伪类
- :link 用来表示没访问过的链接(正常的链接)
<style>
/*修改没访问过链接的颜色*/
a:link{
color: red;
}
</style>
<body>
<a href="https://www.baidu.com">访问过的链接</a>
<br><br>
<a href="https://www.baidu123.com">没访问过的链接</a>
</body>
-
:visited 用来表示访问过的链接
由于隐私的原因,所以visited这个伪类只能修改链接的颜色
<style>
/*修改访问过链接的颜色*/
a:visited{
color: red;
}
</style>
<body>
<a href="https://www.baidu.com">访问过的链接</a>
<br><br>
<a href="https://www.baidu123.com">没访问过的链接</a>
</body>
- :hover 用来表示鼠标移入的状态
<style>
/*修改鼠标移入链接的状态*/
a:hover{
color: aqua;
font-size: 50px;
}
</style>
<body>
<a href="https://www.baidu.com">访问过的链接</a>
</body>
- :active 用来表示鼠标点击时的状态
<style>
/*修改鼠标点击链接的状态*/
a:active{
color: yellowgreen;
}
</style>
<body>
<a href="https://www.baidu.com">访问过的链接</a>
</body>
伪元素选择器
伪元素,表示页面中一些特殊的并不真实的存在的元素(特殊的位置)
伪元素使用 :: 开头
伪元素选择器与伪类选择器的使用方法差不多
::first-letter 表示第一个字母
::first-line 表示第一行
::selection 表示选中的内容
::before 元素的开始
::after 元素的最后
- before 和 after 必须结合content属性来使用
<style>
/*before 和 after 必须结合content属性来使用*/
div::before{
content: 'abc';
color: red;
}
div::after{
content: 'haha';
color: blue;
}
</style>
这些就是CSS的一些常用选择器,其他的选择器可以通过W3C来了解