各位小主们,大家好呀~~~小编再一次如约而至(虽然不知道这个约是从何开始的(*/ω\*))我们今天正式进入css阶段啦,css主要就是给各大标签添加样式,让我们的标签设计的更美观,更好看,好啦,废话留着在中间说,我们直奔主题~~~
2.1 css的使用
css的写法有三种,分别是行内式写法,内联写法和外联写法
1.行内式写法:行内式的写法我们之前在html中接触过,就是在标签上直接写css样式
<div style="width:200px;height: 200px;background-color: yellow;"></div>
这样写呢会有一定的弊端,就是会导致代码混乱,而且css样式不可复用
什么叫做不可复用呢?举个例子来说一下,比如我们有两个div容器,我们要想让它们的宽高就是200*200,那么采用行内式写法我们需要写两遍 分别在每个div上去写
<div style="width:200px;height: 200px;"></div>
<div style="width:200px;height: 200px;"></div>
2.内联写法:在body标签的上面,head标签的里面去写
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<style type="text/css">
div{
width: 200px;
height: 200px;
}
</style>
</head>
<body>
</body>
3.外联式写法:另外新建一个文件,取名为index.css 注意后缀必须是css 绿色这里可替换
然后在html文件里添加link链接
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<link rel="stylesheet" type="text/css" href="./index.css">
href后接的是你css文件的本地路径,路径这里不太明白的小主要翻看html中img标签的内容哦,在那里小编有说过的~~~
</head>
然后在index.css文件中写入你所需的样式即可 注意是在你创建的css文件里写样式哦
div{
width:200px;
height:200px;
}
2.2 选择器
接下来呢小编来向各位小主们介绍一下css选择器,这可是个大工程,各位小主要保持耐心哦~~~
2.2.1 标签选择器:通过写标签名来选中标签写样式
例 要给页面里的所有p标签添加背景颜色为蓝色
p{
background-color:blue;
}
2.2.2 id选择器:通过id来选中标签写样式 写法:#id名
例 要给id为tuan的p标签添加背景颜色为蓝色
#tuan{
background-color:blue;
}
<p id="tuan">长相思2要开播啦</p>
这里要注意一点:id名一般不复用,也就是说这个id名具有唯一性 一个id名仅仅针对于一个标签,一般不会多个标签对应同一个id
我们来举个例子具体说一说
<p id="tuan">长相思2要开播啦</p>
<p id="tuan">期待已久的小夭要和大家见面啦</p>
<p id="tuan">让我们共同期待长相思2的开播吧</p>
一般来说,我们并不像上面这么使用id名,我们三个p标签会使用三个id名,但是如果各位小主就想使用同一个名称,我们采用的是class类名,接下来我们就来隆重推出类选择器
2.2.3 类选择器:通过class来选中标签写样式 写法:.类名
例 要给lass为tuan的p标签添加字体颜色为黑色
.tuan{
color:black;
}
<p class="tuan">长相思2要开播啦</p>
<p class="tuan">期待已久的小夭要和大家见面啦</p>
<p class="tuan">让我们共同期待长相思2的开播吧</p>
这里呢也要强调一点:class名字可以复用,并且同一个标签可以添加多个类名,类名与类名之间用空格分隔开
<p class="tuan mei">庆余年3何时播出</p>
2.2.4 通配符选择器:通配符选择器一般放在最上方,用来清除浏览器自带的默认样式,我们在设计页面时都会先清空自带的浏览器样式,所以在写页面时只需要把通配符选择器固定不变的写在最上方就好啦
*{
margin: 0;
padding: 0;
}
这里面的margin指的是外边距,padding指的是内边距,各位小主不必捉急,我们会说到内外边距的,稍安勿躁
2.2.5 子代后代选择器
子代选择器 采用的是>来表示 后代选择器采用的是空格来表示
在这里还要说明一点:后代选择器中包含子代选择器 后代选中的样式,在子代中也会适用
我们来看一个例子,看看样式到底加在了谁的头上 罒ω罒
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
.one>.two{
width: 100px;
height: 100px;
background-color: yellow;
}
.one>p{
background-color: red;
}
.one p{
color: blue;
}
</style>
</head>
<body>
<div class="one">
<p>111</p>
<div class="two">
<p>2222</p>
</div>
<div class="three">
<p>333333333</p>
</div>
</div>
</body>
</html>
.one>p 指的是one下面的子代p标签,one是父亲,p标签是儿子,所以要找儿子而不是孙子或是曾孙子,这里面只有111是儿子,所以111内容的p标签背景颜色变成红色
.one p 指的是one下面的后代p标签,找的是one下面的儿子,孙子,曾孙子等等,只要是one下面的p标签,字体 颜色都会变成蓝色
我们来看一下效果吧,和各位小主想的一不一样啊?
这里要给各位小主一个温馨提示,我们在设计页面时,是子代就用子代选择器,不要用后代选择器,避免产生不必要的麻烦
2.2.6 交集并集选择器
交集选择器:选择器紧贴,必须同时满足选择器的条件才会被选中
并集选择器:选择器之间用逗号分隔,满足其中一个选择器的条件就会被选中
我们先来看一下交集选择器
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
div.box{
color: pink;
}
p.box{
font-size: 30px;
}
</style>
</head>
<body>
<div class="one">聂风</div>
<div class="two">帝弑天</div>
<div>1111</div>
<div>222222</div>
<div class="box">步惊云</div>
<p class="box">断浪</p>
</body>
</html>
其中的div.box选中的是既是div又是类名为box的标签
我们来看一下结果,和各位小主思考的可有出入?
接下来,我们来看一下并集选择器
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
.one,.two{
width: 300px;
height: 300px;
background-color: green;
color: red;
}
</style>
</head>
<body>
<div class="one">聂风</div>
<div class="two">帝弑天</div>
</body>
</html>
其中.one,.two 选中的是带有one类名的标签和带有two类名的标签
我们来看一下结果,和各位小主想的一不一致啊?
2.2.7 序选择器
我们先来一个小例子,在小例子中去看一看序选择器
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
</head>
<body>
<ul>
<li>1.海贼王</li>
<li>2.火隐忍者</li>
<li>3.死神</li>
<li>4.小猪佩奇</li>
</ul>
</body>
</html>
假如我们想让海贼王的字体变成绿色,就要使用到序选择器
查找ul中第一个元素并且是li标签
ul li:first-child{
color: green;
}
选中最后一个
ul li:last-child{
color: pink;
}
或者我们可以在括号里填写第几个,从1开始
ul li:nth-child(3){
font-weight: bold;
}
上面这个就是选中ul下面的第三个li标签,把字体加粗
选中 所有偶数位的
ul li:nth-child(even){
background-color: yellow;
}
选中所有的奇数位
ul li:nth-child(odd){
background-color: skyblue;
}
!!!注意注意!!!
各位小主在这里一定要注意,我们的顺序千万不能乱,我们是先寻找ul下的第x个标签,判断这个标签是不是li标签,如果是则添加样式,如果不是则不添加样式(当然啦,ul下面必须是li标签,这么说怕各位小主不能get其中真意,我们来举个例子看一下)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>
</title>
<style type="text/css">
div p:nth-child(4){
color: blue;
}
</style>
</head>
<body>
<div>
<p>路飞</p>
<span>贝利</span>
<div>
<p>红发</p>
<p>黑胡子</p>
<p>大妈</p>
<p>凯多</p>
</div>
<p>索隆</p>
<p>山治</p>
<p>乔巴</p>
<p>娜美</p>
</div>
</body>
</html>
各位小主看一下,我们到底哪个字变成了蓝色呢?
为什么是凯多和索隆呢?各位小主请听我细细道来
div p:nth-child(4) 这代表了什么呢?它表示先查找div下面的第四个子元素 ,如果是p标签就添加样式,如果不是p标签,就不添加样式
再次和各位小主强调顺序顺序!!!是先找到第四个子元素再看是不是p标签,而不是找div下面的第四个p标签,这里非常重要!!!
上面的例子我们可以看到有两个div标签,我们先来看第一个div标签,第一个div下面的子元素都已经标记是成绿色啦,那么第一个div下面的第四个标签正好是p标签,所以索隆变成了蓝色,我们再来看第二个div标签,该背景色标记成灰色,第二个div下面的子元素都已经标记成了蓝色,我们来找第二个div下面的第四个子元素,一看正好是p标签,所以凯多变成了蓝色
<div>
<p>路飞</p> 第一个标签
<span>贝利</span> 第二个标签
<div> 第三个标签
<p>红发</p> 1标签
<p>黑胡子</p> 2标签
<p>大妈</p> 3标签
<p>凯多</p> 4标签
</div>
<p>索隆</p> 第四个标签
<p>山治</p>
<p>乔巴</p>
<p>娜美</p>
</div>
说到这里,各位小主是明白了还是糊涂啦?O(∩_∩)O哈哈~
我们再来做个小练习,看看各位小主功夫到不到家(#^.^#)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>
</title>
<style type="text/css">
div span:nth-child(2){
color: yellow;
}
</style>
</head>
<body>
<div>
<span>路飞</span>
<div>
<p>红发</p>
<p>黑胡子</p>
<p>大妈</p>
<p>凯多</p>
</div>
<span>贝利</span>
<div>
<p>索隆</p>
<span>山治</span>
</div>
</div>
</body>
</html>
各位小主看一下,到底哪一个span标签颜色变成黄色呢?我们下期揭晓答案哦~~各位小主也可以在评论区给出自己的答案哦~~~
2.2.8 兄弟选择器
兄弟选择器用加号来连接哦,我们来举个小例子看一下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<style type="text/css">
div + p{
font-size: 30px;
}
</style>
</head>
<body>
<div>偷个懒</div>
<p>养养眼</p>
<p>呵呵呵</p>
</body>
</html>
div+p 查找div标签的下一个兄弟p标签,把这个标签的字体变成30px
各位小主随小编来看一下效果吧
2.2.9 伪类选择器 伪类选择器都有:
小编在这里给各位小主介绍两种伪类选择器,一种是:active,一种是:hover
1 :active 按下时开始加载css,松开时还原
2 :hover 鼠标移入到指定区域时加载css样式,其中hover效果可以作用于自身,作用于后代,作用于下一个兄弟
小编在这里给各位小主分别演示一下,先演示:active效果
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>
</title>
<style type="text/css">
.box{
width: 200px;
height: 100px;
background-color: red;
}
.box:active{
background-color: pink;
}
</style>
</head>
<body>
<div class="box">
<p>小猪佩奇身上纹,大家都是社会人</p>
<div>你在他乡还好吗</div>
</div>
<p>中国好声音</p>
</body>
</html>
在鼠标未按下时,效果如下
当鼠标按下时,效果如下
接着小编为各位小主演示一下hover效果
1)hover作用于自身
.box:hover{
color: green;
}
当鼠标移入到box时,字体颜色变成绿色
2)hover作用于后代
box:hover div{
background-color: skyblue;
}
鼠标移入到box 时 给后代的元素 div 添加样式,使其后代的div背景颜色变成天蓝色
3)hover作用于下一个兄弟
p:hover+div{
font-size: 30px;
}
鼠标移入到p标签时,给p标签的下一个兄弟div添加样式,使其字体大小为30px
但是这里有个小bug 就是鼠标无法移入到下一个兄弟上,一旦移入,样式丢失,所以我们一般用hover效果只作用于自身和后代,很少作用于下一个兄弟
2.3 权重问题
!!!大重点来喽!!!
关于各种选择器的权重有所不同,不同的选择器权利大小也有所不同
同种选择器看顺序,不同选择器看权重
权重从大到小的分布是!important > 行内样式 > id选择器 > 类选择器 > 标签选择器 > 通配符选择器
其中!important权重最高,可以将一些权重低的选择器中的某些属性提到最高,使其不被覆盖,这么说可能各位小主会觉得有些晕,我们来举个例子来说一下
.box{ 类选择器
background-color:blue;
}
#gei{ 标签选择器
background-color:black;
}
<div class="box" id="gei"></div>
各位小主看了上面的权重分布应该了解到id选择器的权重高于类选择器的权重,所以此时的div背景颜色是黑色,但我们就想让其背景颜色是蓝色,我们就要给其提权重
.box{
background-color:blue!important;
}
小编再额外地多说一句,我们依然以上面的例子为例,调换类选择器和标签选择器的顺序,那么div背景颜色是否会发生改变呢?各位小主实验一下吧
#gei{ 标签选择器
background-color:black;
}
.box{ 类选择器
background-color:blue;
}
<div class="box" id="gei"></div>
各位小主经过实验会发现,div的背景颜色仍然是黑色,这就是小编上面所说的,不同的选择器看权重,不需要管顺序,无论谁前谁后
接下来小编再给各位小主拓展一下权重计算问题,我们再相应的做几个小练习,希望这样能让各位小主们融会贯通~~~
权重计算
秘诀:选择器作用的范围越广,其相对应的权重越小
行内样式权重值1000
id选择器权重值100
类选择器权重值10
标签选择器权重值1
通配符选择器权重值0
接下来小编来带各位小主们看一看交集选择器和并集选择器的权重问题
1>交集选择器权重问题
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
div.box{
color: pink;
}
.box{
color: black;
}
</style>
</head>
<body>
<div class="box">步惊云</div>
<p class="box">断浪</p>
</body>
</html>
各位小主可以先猜猜看,到底步惊云的字体颜色是什么色呢?
各位小主们猜的对不对啊~~~颜色是粉色哦,而不是黑色
为什么会这样呢? 请允许小编我细细道来
div.box 是交集选择器,它的权重是由两个选择器类型权重相加得来的,这就是关键所在!!!
div是标签选择器,它的权重为1,.box是类选择器,它的权重值是10
所以div.box的权重值是11,比.box的权重值大,所以人家是老大哥,当然要听人家老大哥的话啦,因此步惊云的颜色是粉色,而不是黑色
2>并集选择器权重问题
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
.one,.two{
width: 300px;
height: 300px;
background-color: green;
color: red;
}
.two{
color: blue;
}
</style>
</head>
<body>
<div class="one">聂风</div>
<div class="two">帝弑天</div>
</body>
</html>
各位小主依然盲猜一下,我们两个div的样式是什么样子的呢?
各位小主有没有惊讶到?别着急,请让小编娓娓道来(#^.^#)
.one,.two是并集选择器,它的权重值是其中一个选择器的权重值,由于.one和.two都是类选择器,其权重值都为10,所以.one,.two的权重值为10
所以当.one,.two与.two一起出现时,这个时候我们就要看出场的顺序啦,这就是上面小编说的权重值相同时看顺序,由于.two在后,所以.two里面的属性会覆盖掉.one,.two里面相对应的属性,覆盖掉该覆盖的,剩下的继承,这就是各位小主看到效果啦~~~
接下来呢,我们来做个权重的小练习,看看各位小主有没有把权重搞明白罒ω罒
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
.one,.two{
background-color: green;
color: red;
}
.one>span{
color: blue;
font-size: 12px;
}
.one>span:first-child{
color: black;
}
.one>p,p{
background-color: orange;
}
p{
background-color: skyblue;
}
div{
font-size: 33px;
}
</style>
</head>
<body>
<div >聂风</div>
<div class="one">
<span>步惊云</span>
<span>断浪</span>
<p>22222</p>
</div>
<p>1111</p>
<div class="two">帝弑天</div>
</body>
</html>
请各位小主来思考一下,最后的展现给大众的到底是什么样式的?我们下期来说一说哦~~
好啦,本期内容到这里就结束啦,今日的内容有些小多,各位小主要耐心的看完哦,也要把小编今日所说的内容充分的理解消化掉,尤其是权重问题,这里很重要,如果权重搞不明白,当我们写网站时就会出现一些样式上的bug,所以这里一定要吃透哦~~~
各位小主们,我们下期见喽!!!