1.CSS层叠样式表
CSS层叠样式表主要用来调节html标签的各种样式
"""
思考:页面都是由HTML构成的,并且页面上有很多相同的HTML标签,但是相同的HTML标签在不同的位置可能有不同的样式,我们如何区分标签
标签的重要属性:
1.class属性:分门别类,类似于面向对象中的类,主要用于批量查找(一个标签可以有多个class属性)。
2.id属性:主要用于点对点的精确查找(一个标签只能有一个属性,id不能重复,重复会飘红)。
学习css的流程
1.先学习如何查找标签
2.再学习如何调整样式
"""
1.css语法结构
选择器 {
样式名:样式值1;
样式名:样式值2
}
2.css注释语法:/*注释内容*/
3.引入css的多种方式:
1.head内style标签内部编写(学习时使用)


2.head内link标签引入(标准的方式)
'''link引入标签时不用在style里面写,直接在head里面写就可以'''
3.标签内部通过style属性直接编写(不推荐)

2.CSS选择器
1.CSS基本选择器:
1.1标签选择器:直接按照标签名查找标签
span {
color: aquamarine;
}
1.2类选择器:按照标签的class值查找标签,用.class来进行查找
.c1 {
color: green;
}


1.3id选择器:根据标签的id值精准查找标签,用#id值的方式来进行查找


1.4通用选择器:将所有的内容变成指定属性
* {
color: aqua;
}
2CSS组合选择器
"""
之前我们学习了块级标签(p标签,div标签)和行内标签(span标签,img标签,a标签),块级标签可以嵌套块级标签和行内标签,而行内标签只能嵌套行内标签。现在我们对标签嵌套又有一个新的分类:
<p>ppp</p>
<p>ppp</p>
<div>div #1
<div>divdiv #2
<p>divdivp # 5
<span>divdivpspan</span> # 6
</p>
</div>
<p>divp</p> # 3
<span>divspan</span> # 4
</div>
<p>ppp</p>
<span>spanspan</span>
针对标签的上下级以及嵌套另外的说法:
父标签(1号标签是2、3、4号标签父标签)
子标签(2、3、4号标签父标签是1号标签的子标签)
弟弟标签(3、4号标签是2号标签的弟弟标签)
哥哥标签(2号标签是3、4号标签的哥哥标签)
爷爷标签(2号标签是6号标签的爷爷标签)
孙子标签(6号标签是2号标签的爷爷标签)
祖先标签(1,2,5号标签都是6号标签的祖先标签,用英文parents标签,如果是parent标签仅指5号标签)
"""
2.1后代选择器(空格):用标签名空格标签名的方式来进行查找,只要后一个标签是前一个标签的后代(不管是儿子还是孙子)就可以找到。
div span {
color: red;
}
# 查找div标签下所有span标签并且修改属性
2.2儿子选择器(大于号):两个标签之间用大于号连接,后面一个标签是前一个标签的子标签才可以找得到。
div>span{
color: red;
}
# 查找div标签下的是span标签的子标签并且修改属性
2.3毗邻选择器(加号):两个标签用加号连接,后面标签和前面标签同级并且紧挨着前面标签的 ,就会查找并且修改属性。
p+span {
color: cornflowerblue;
}
# 查找和p标签紧挨着的span标签


2.4弟弟选择器(小波浪号):两个标签用小波浪号连接,后面标签是前面标签的弟弟标签。
div~p {
color: darkorange;
}
# 查找所有div标签的弟弟标签


3.分组与嵌套
3.1多个选择器合并查找:各标签用逗号隔开
div,span {
color: coral;
}
# 查找div标签或span标签
3.2选择器可以混合使用:标签选择器,类选择器,id选择器可以混合查找。
.c1,span,#d1 {
color: cornflowerblue;
}
# 查找c1类,span标签,id为d1的标签并修改
3.3查找选择器指定类的标签
span.c1 {
color: green;
}
# 查找类为c1的span标签
"""
span#d1 {
color: green;
}
# 查找id为的d1的span标签
"""


3.4查找选择器指定id的标签
span#d1 {
color: red;
}
# 查找id为d1的span标签


4.属性选择器:根据标签的属性来查找标签
4.1按照属性名查找:属性名用中括号括起来,带有属性名的标签会被查找到并且更改属性
<style>
[username] {
color:red
}
</style>


4.2按属性名查找可以增加更多的限制条件:在中括号前面添加标签名,中括号内指定属性名等于某个属性值。
<style>
h1[username='max'] {
color: deeppink;
}
</style>


5.伪类选择器:当我们看到某些网页上有的链接(通过昨天的a标签来实现)就光标悬浮在上面之后会变颜色,通过伪类选择器我们也可以实现这样的效果。修改本身的颜色用 a {}在中括号内修改属性,光标悬浮状态用 a:hover{}来修改。
"""
a标签对应的链接在浏览器上没有被点过时,颜色是蓝色;点过时以后都变成紫色。
"""
<head>
<style>
a {
color: black;
} # 链接没有被点时呈现的颜色
a:hover {
color: deeppink;
} # 链接在鼠标悬浮在上面时呈现的颜色
a:visited {
color: saddlebrown;
} # 链接被点击过后呈现的颜色
</style>
<head>
<body>
<a href="https://www.cnblogs.com/zkz0206/p/16939836.html" target="_blank">HTML相关知识</a>
</body>

当我们获取用户输入时,可以给文本框内背景添加指定的颜色:
<style>
input:focus {
background-color: red;
}
</style>

6.伪元素选择器:修改一个标签之后所有该标签产生的内容都会改变
<style>
p:first-letter {
font-size: 48px;
color: blue;
}
</style>

还可以在某些字段前后加一些指定字符:
<style>
p:before {
content: '前面添加指定的内容';
color: blue;
}
p:after {
content: '后面指定的内容';
color: deeppink;
}
</style>

3.选择器优先级
1.选择器相同,导入方式不同:就近原则。
"""
代码从上往下执行,执行到离body标签最近的选择器才可以修改成功,否则修改成功之后又会被其他选择器修改
"""

2.选择器不同,导入方式相同:
内联样式>id选择器>类选择器>标签选择器
"""
内联样式:直接在标签内部修改。
<body>
<p class="c1" id="d1" style="color: aqua">选择器的优先级</p>
</body>
由于类与标签的查找范围较大,指向性没有内联以及id选择器强,所以优先级较弱。我们可以利用他们优先级不同对特别的标签做特别的修改。
"""
4.CSS样式调节(都在style标签中调节)
1.字体样式:
font-family:字体书体
font-size:字体大小; 14px 24px 36px
font-weight:字体粗细: lighter(变细);border(变粗)
color:有三种模式
1.直接用颜色的单词:color: aqua;
2.颜色编码:color: #9F9F5F;(颜色代码链接:https://blog.csdn.net/qq_39162838/article/details/116989378")
3.rgb三基色:color: rgb(24,145,32);(每个颜色都有一个固定的三基色,适用于在页面上看到某种颜色,用取色器取到该颜色然后使用)
rgba():用来调节饱和度:color: rgba(24,145,32,0.6);
text-align:文本调整:center:居中;end:右对齐;justify:左对齐
text-decoration:字体样式:unbderline:下划线;上划线;
"""
text-decoration还有一个更重要的功能室取消a标签的下划线,a标签在网页中默认有一条下划线,我们只需要在<style>中加入a {text-decoration:none;}即可
"""
text-indent:首行缩进
5.背景属性
div {
width: 400px; /*背景大小*/
height: 400px;
background-color: aqua; /*背景颜色*/
background-image: url("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fnimg.ws.126.net%2F%3Furl%3Dhttp%253A%252F%252Fdingyue.ws.126.net%252F2021%252F1113%252Fbdefb078j00r2i20e002ac000hs00m8c.jpg%26thumbnail%3D660x2147483647%26quality%3D80%26type%3Djpg&refer=http%3A%2F%2Fnimg.ws.126.net&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1672490651&t=a7db1a1cb89036319ce702664fd7a5a3");/*图片地址*/
color: deeppink; /*背景字体颜色*/
background-repeat: no-repeat:不重复;repeat-x:横向重复;repeat-y:竖向重复;repeat:横竖向都重复 /*重复属性*/
background-position: center;
/*背景图片位置:background-position后面有两个参数 0% 0%:
第一个参数:
0%代表图片在最左边
50%代表图片在最中间
100%代表图片在最右边
第二个参数:
0%代表图片竖向铺满屏幕
50%代表图片竖向50%在上半个屏幕(-50%代表竖向-50%在下半个屏幕)
background-position: 0% 0%代表图片水平居中,竖向占满屏幕
*/
}
6.边框
1.边框样式设置:
边框代码在head中的style标签中填写:
右:right,上:top;下:bottom
边框粗细:border-left-width
边框样式:border-left-style
边框颜色:border-left-color
2.单边缩写:某个边的边框可以直接写缩写:后面默认跟三个参数(粗细,样式,颜色)
p {
font-size:16px
border-left: 3px solid black
}
3.多边缩写:如果四个边边框属性都相同,可以再次缩写:
p {
font-size:16px
border: 3px solid black
}

4.给边框设置尺寸:
p {
width: 400px;
height: 400px;
border: 3px solid pink;
}
# 该边框长宽一致,是个正方形

5.画圆:可以用border-radius属性。该属性控制矩形角圆润程度,调成0%是举行,0至50%是一个圆角矩形,50%以上都是圆形
p {
width: 400px;
height: 400px;
border: 3px solid pink;
border-radius: 50%;
}

7.display属性
1.display属性主要用来控制HTML的显示效果。
"""
行内标签(span,a)无法设置长宽,即使设置也无法改变。块级标签(p,div)才可以设置。如果我们想要一次性建立多个span标签时,快捷键直接输入:span*5 tab;如果我们想输入5个ul套li标签,直接用ul>li*5 tab。如果我们想用ul套li标签(无序标题),每个li标签里面再套一个a标签,也可以用如下写法:ul>li*3>a.c2{$},其中c2指每个a标签都属于c2类,$指a标签的文字会从1开始逐渐递增。
"""
2.inline,onblock使用:
首先我们新建两个div并设置标签,因为div属于块级标签,所以他们会竖向排列,div内什么都不输入,我们发现结果如下:
.c1 {
height: 100px;
width: 100px;
border: 5px solid pink;
}
.c2 {
height: 100px;
width: 100px;
border: 5px solid green;
}

但是如果我们想把它变成一行,那么我们需要用到display:inline;该代码的作用是将块级标签排列在一行,但是它也会遵循行内标签的特性,长度取决于标签内文字,没写文字便会缩起来。相反,display:block可以将行内标签转化为块级标签显示,只有变成块级标签边框的特性才能显示出来。
.c1 {
height: 100px;
width: 100px;
border: 5px solid pink;
display: inline;
}
.c2 {
height: 100px;
width: 100px;
border: 5px solid green;
display: inline;
}

3.display:none可以将将标签隐藏起来,也不会保留位置,此功能应用于在后台默认数值,即使用户输入自己的信息传到后台的也不是用户的信息,而且该默认信息在页面不会展示。
<p>
username:<input type="text">
<input type="text" name="name" value="max" style="display: none"> # 页面上看不到该输入框
<p/>
"""
display:none隐藏标签不会占位;visibility: hidden会占位,所以隐藏标签用display:none效果更好。visibility: hidden效果如下图:
"""


8.盒子模型
1.由来:我们可以将标签看成是一个快递盒:
1.1快递包里面的实际物体:内容content;
1.2物体与与快递盒内部的距离:内边距(内填充)padding;
1,3快递盒的厚度:边框border;
1,4快递盒之间的距离:外边距margin

2.border的大小我们刚才已经学习过,content的大小是由内容多少和字体大小决定的,所以我们还要学习padding和margin的大小:
调整内边距(简写):
2.1:padding调节:
padding-left:内容和左边框的距离
padding-top:内容和上边框的距离
"""
如果我们同时设定内容距离左右边的距离,那么只会改变padding的范围,不对文字做调整的话文字效果不会体现出距离右边的距离
"""


3.padding的参数有以下几种写法:
p {
padding: 20px(上下左右)
padding: 20px 40px(上下 左右)
padding 10px 20px 30px(上 左右 下)
padding 10px 20px 30px 40ox(上 右 下 左)
}

4.margin参数是指边框外边线距离其他边框(或者屏幕边缘)外边线的距离
两个标签如果margin不一样时,外边框间距长度不会叠加(图1,2)
针对标签的嵌套,上下不动,水平居中(图3,4)
.c1 {
margin:0 auto
}
"""
margin设置居中只能设置水平居中,竖直方向无法设定
"""




"""
当两个标签在相接的部分margin值不一样时,采用两个标签中较大的margin值。
"""


9.浮动
"""
类名和id名不能用纯数字,和变量名命名规则一致
"""
1.首先我们来用一个div标签嵌套另外两个div标签,产生如下效果:


如果我们想让它们在一行显示,我们需要加一个浮动:产生结果如下:

我们发现可以通过float:left(right)的方式来让不同的div浮在最左或者最右。如果想都浮在左边,那么都写float:left就可以,哪个标签在上面哪个标签就在最左边。
2.浮动带来的影响:
浮动的元素是脱离正常文档流的,会造成文档塌陷(我们的显示器其实不是一个平面,是一个三维坐标系。浮动其实是是被嵌套的两个标签脱离了平面,悬浮在了空中)
clear:不允许左侧(右侧)出现浮动的元素,并且出现块级标签的特性,左右不能出现块级标签,所以会直接排在父标签的下面,从而撑起来父标签的边框。谁塌陷了就给谁的类中添加clearfix。
综上:解决浮动问题的办法:在style标签中增加一个类,谁塌陷就给谁的类中增加clearfix。
.clearfix:after {
content: '';
display: block;
clear: both;
}
"""
浏览器特性:当我们没有悬浮的标签有文字时,标签上的文字并不会被悬浮的标签盖住,而是会优先把文字移出悬浮的区域并且展示
<style>
.c1 {
border: 5px solid black;
}
.c2 {
width: 100px;
height: 100px;
background-color: deeppink;
float: left;
}
.c3 {
width: 100px;
height: 100px;
background-color: blue;
float: right;
}
.c6 {
width: 400px;
height: 400px;
background-color: purple;
}
.clearfix:after {
content: '';
display: block;
clear: both;
}
</style>
<body>
<div class="c1 clearfix">
<div class="c2"></div>
<div class="c3"></div>
<div class="c6">66666</div>
</div>
</body>
"""

10.溢出
1.溢出现象:当我们给标签添加了边框设置了尺寸之后,文字很多时候写不下会超出边框范围,容量不能够容纳文字。


2.如何解决:
解决方案1:overflow: hidden;直接将多出来的文字砍掉,结果如下:

解决方案2:overflow: auto;在框中间增加一个滚动条,可以上下滑动查看全部内容。

解决方式3:overflow: scroll;类似于overflow: auto,上下左右都可以滑动。

"""
圆形头像制作:max-width: 100%:将图片长宽调整至圆形头像范围大小
<style>
div {
height: 200px;
width: 200px;
border: 5px solid red;
border-radius: 50%;
overflow: hidden;
}
div img {
max-width: 100%;
}
</style>
<body>
<div>
<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fblog%2F202107%2F23%2F20210723190856_22391.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1672574933&t=0bb6a7082ec3395fdd346ced134c10f8" alt="">
</div>
</body>
div的属性中border-radius: 50%;是设置为圆形,overflow: hidden;是设置超出圆形的部分全部隐藏(此处还可以加上背景色),max-width: 100%;是将图片按照比例缩放至圆形对应的矩形大小,常常用在头像制作上面
效果图如下:
"""

11.定位和标签
1.标签在默认情况下无法通过定位的参数来移动的。
2.针对定位有四种状态:
1.static静态(标签默认的状态)
2.realitive:基于标签原来的位置做移动
3.absolute:绝对定位(基于某个定位过得父标签)
4.fixed:固定定位(基于浏览器窗口固定不动)
3.我们在设置标签时,可以用相对定位指定距离边框的距离:
<style>
div {
height: 200px;
width: 200px;
background-color: red;
left: 100px;
position: relative;
}
</style>

4.绝对定位:当我们定义一个标签时想通过其他标签来定义本标签的位置时,我们需要采用下面的方法:
<style>
.c1 {
height: 200px;
width: 200px;
border: 5px solid black;
top: 100px;
left:100px; # 相对定位根据尺寸定义出在页面上的位置
position: relative;
}
.c2 {
height: 100px;
width: 100px;
border: 5px solid gray;
position: absolute;
top: 0; # 绝对定位的参数指的是距离相对定位标签左上角的距离
left: 0
}
</style>
<body> # 根据相对定位的标签先定义,将需要绝对定位的标签嵌套起来
<div class="c1">
<div class="c2"></div>
</div>
</body>

5.当我们需要使一个窗口固定悬浮在页面上,即使网页上下移动该窗口位置固定,我们需要用到固定定位:position:fixed;fixed固定的;
<style>
.c1 {
border: 5px solid black;
background-color: aliceblue;
width: 100px;
height: 200px;
position: fixed;
right: 50px;
bottom: 50px;
}
</style>
<body>
<div style="height: 1000px; background-color: yellow"></div>
<div style="height: 1000px; background-color: blue"></div>
<div style="height: 1000px; background-color: deeppink"></div>
<div class="c1">悬浮标签怎样设置</div>
</body>
"""
我们新增一个标签改背景色,会发现标周边有留白。发现这是因为边框的margin有一根默认值,我们需要在style中修改一个默认值:
body {
marin: 0
}
"""

12.z-index
模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应,为了制作出这种效果,我们需要用到z-index,类似于xyz的z轴。
<style>
.cover {
background-color: rgba(124,124,124,0.7);
position: fixed;
top: 0;
right:0;
bottom: 0;
left:0;
z-index: 20;
}
.modal {
background-color: aliceblue;
width: 400px;
height: 200px;
position: fixed;
left:50%;
top:50%;
z-index: 21;
margin-left: -200px;
margin-top: -100px;
}
</style>
<body>
<div>我是最下面的div</div>
<div class="cover"></div>
<div class="modal"></div>
</body>

13.阴影
给标签加阴影的方法:box-shadow
box-shadow有四个参数分别是:h-shadow v-shadow blur color
1.h-shadow:水平方向阴影开始的长度
2.v-shadow:阴影的宽度
3.blur:模糊距离(数值越大模糊距离也越长,阴影颜色也更淡)
4.color:颜色,可用rgba格式来选
box-shadow:10px 10px 10px rgba(0,0,0,0.7);效果如下:
