CSS
体验css
div是默认占一行,两个div会占两行。
span是接着一行
层叠样式表(css)是一种样式表语言,用来描述html文档的呈现(美化内容)。
书写位置:title标签下面添加style双标签,style标签里书写CSS代码
<title>css初体验</title>
<style>
/* 选择器{}*/
p{
/*css属性*/
color:red;
}
</style>
<p>
体验css
</p>
css引入方式
-
内部样式表:学习使用
css代码写在style标签里面 -
外部样式表 :开发使用
css代码写在单独的css文件中(.css)在HTML使用linkv标签引入
<link rel="stylesheet" href="./my.css">
-
行内样式:配合JavaScript使用
css写在标签的Style属性值里
<div style="color:red;font-size:20px;">这是div</div>
标签和类选择器
标签选择器:使用标签名作为选择器->选中同名标签设置相同的样式。
类选择器:查找标签,差异化的设置标签的显示效果,在标签中使用类选择器时不加点。
步骤:
* 定义类选择器-> .类名
* 使用类选择器-> 标签添加class = "类名"
<style>
//定义类选择器
.red{
color: red;
}
//使用类选择器
<div class="red">这是div标签 </div>
</style>
通配符选择器:查找页面所有标签,设置相同样式。
* {
color:red;
}
画盒子
目标:使用合适的选择器画盒子,盒子只能用div标签来画,因为span是一行。
<style>
.one{
color: aqua;
height: 200px;
width: 200px;
background-color: antiquewhite;
}
.two{
color:blue;
height: 200px;
width: 200px;
background-color: aqua;
}
</style>
<div class="one">
盒子1
</div>
<div class="two">
盒子2
</div>
字体修饰属性
-
字体大小要注意加单位px,否则不生效
-
字体粗细的属性值可以是数字也可以是关键字
数字: 正常 400 加粗700
关键字:正常 normal 加粗 bold
-
字体倾斜:
em标签默认倾斜
正常不倾斜:normal
倾斜: italic
-
行高:
数字+px
数字(当前标签字体大小的倍数)
line-height:30px; /*当前标签字体大小为16px*/ line-height:2;
想要文字在盒子里垂直居中那需要使得文字的行高等于盒子的高度;(只适用于单行文字)
-
字体族(字体类型)
直接写字体类型:font-family: 楷体;
-
font复合属性:就是指把对字体的多个属性的设置整合成一行代码,用于在开发前期统一公共样式
div { font: italic 700 30px/2 楷体; 倾斜 加粗 字号/行高 字体 }
-
文本缩进
数字+px
数字+em(推荐:1em=当前标签的字号大小)
p { text-indent: 2em; }//首行缩进两个字号大小
-
文本对齐方式
left :左对齐
center :居中
right :右对齐
text-align: center
如果想对齐图片,需要在图片上加个父级标签,对父级标签使用对齐方式会使图片对齐,代码如下:
<style> div { text-align : center; } </style> <div> <img src="./1.jpg" alt="图片加载失败"> </div>
-
文本修饰线
属性名:text-decoration
属性值:
none 无
underline 下划线
line-through 删除线
overline 上划线
复合选择器
定义:由两个或多个基础选择器,通过不同的方式组合而成。
作用:更准确,更高效的选择目标元素(标签)。
后代选择器
作用:选中某元素的后代元素
选择器写法:父选择器 子选择器{css属性},父子选择器之间用空格隔开,会选中所有的后代
<style>
div span{
color:red;
}
</style>
<span> span 标签</span>
<div>
<span>这是div的儿子span</span>
<p><span>这是div的孙子</span></p>
</div>
子代选择器
作用:选中某元素的儿子元素(最近的子级)
选择器写法:父选择器>子选择器{css属性},父子选择器之间用大于号隔开。
<style>
//选中div标签下一级的span
div > span{
color:red;
}
</style>
并集选择器
作用:选中多组标签设置相同的样式。
选择器写法:选择器1,选择器2,…,选择器n{css属性},选择器之间用,隔开。
<style>
p,span,div {
color: blue;
}
</style>
<p>p标签</p>
<div>div标签</div>
<span>span标签</span>
交集选择器
作用:交集选择器选中同时满足多个条件的元素
选择器写法: 选择器之间连写,没有任何符号,如果交集选择器中有标签选择器,标签选择器必须写在最前面
<style>
.box{
color: red;
}
p.box{
color: blue;
}
</style>
<P class="box">p标签,使用了类选择器</P>
<P>p标签</P>
<div class="box">div标签,使用了类选择器</div>
伪类选择器
作用:伪类表示元素状态,选中元素的某个状态设置样式
鼠标悬停状态:选择器:hover{css属性},任何标签都可以设置鼠标悬停的状态
<style>
.box{
color: red;
}
a:hover{
color: red;
}
</style>
<a href="#">a标签</a>
<div class="box">div标签</div>
伪类-超链接(拓展)
超链接一共有四个状态
:link 访问前
:visited 访问后
:hover 鼠标悬停
:active 点击时(激活)
如果要给超链接设置以上四个状态,需要按LVHA的顺序
CSS三大特性
继承性:
子级默认继承父级的文字控制属性。
例如直接用标签选择器body设置字体size为30px,所有的字体大小都为30px,除了自己的标签对字体有设置的
层叠性:
相同的属性会覆盖:后面的CSS属性覆盖前面的CSS属性
不同的属性会叠加:不同的CSS属性都生效
优先级:
也叫权重,当一个标签用了多种选择器时,基于不同种类的选择器的匹配规则。
规则:选择器优先级高的样式生效。
公式:通配符选择器<标签选择器<类选择器<id选择器<行内样式<!important
(选中标签的范围越大,优先级越低)
<style>
*{
color: red !important;
}
div {
color: green;
}
.ck{
color: blue;
}
#test {
color: purple;
}
//最终显示的是红色
</style>
<div class="ck" id="test" style="color: aqua;">div标签</div>
优先级叠加计算规则
叠加计算:如果是复合选择器,则需要权重叠加计算。
就是一个标签被多个复合选择器选择了,把每个复合选择器所含有的子选择器按照(0,0,0,0)的样式列出然后进行比较。
公式:(每一级之间不存在进位)
(行内样式,id选择器个数,类选择器个数,标签选择器个数)
规则:
- 从左向右依次比较选择器的个数,如果同一级个数多优先级高,如果个数相同,则向后比较
- !important权重最高
- 继承权重最低
<style>
/* (0,0,2,1) */
.c1 .c2 div{
color: blue;
}
/* (0,1,0,1) */
div #box3{
color: green;
}
/* (0,1,1,0) */
#box1 .c3{
color: orange;
}
</style>
</head>
<body>
<div id="box1" class="c1">
<div id="box2" class="c2">
<div id="box3" class="c3">
这行文本是什么颜色
</div>
</div>
</div>
</body>
继承权重最低:如果一个复合选择器精确找到了标签本体,那就不算继承,如果找到了标签的父标签,那根据继承原则,本体会继承父标签的字体修饰属性,这时继承权重最低,不用考虑。
Emmet写法
代码的简写方式,输入缩写VSCode会自动生成相应的代码。
- HTML
- CSS:大多数间歇方式为属性单词的首字母
背景属性-拆分写法
背景图
网页中,使用背景图实现装饰性的图片效果
属性名:background-image(bgi)
属性值:url(背景图url)
<style>
div{
width: 500px;
height: 500px;
/* 背景图默认是平铺(复制)的效果 */
background-image: url(./a.jpg);
}
</style>
背景图平铺方式
属性名:background-repeat(bgr)
属性值:
no-repeat 不平铺
repeat 平铺
repeat-x 水平方向平铺
repeat-y 垂直方向平铺
背景图位置
属性名:background-position(bgp)
属性值:水平方向位置,垂直方向位置
关键字:
关键字取值方式写法,可以颠倒取值顺序
可以只写一个关键字,另一个方向默认为居中;数字只写一个值表示水平方向,垂直方向为居中
背景图缩放
作用:设置背景图大小
属性名:background-size(bgz)
常用属性值:
- 关键字
- cover:等比例缩放背景图片以完全覆盖背景区,可能背景图片部分看不见
- contain:等比例缩放背景图片以完全装入背景区,可能背景区部分空白
- 百分比
- 数字+单位(例如px)
背景图固定
作用:背景不会随着元素的内容滚动。
属性名:background-attachment(bga)
属性值:fixed
背景复合属性
属性名:background(bg)
属性值:背景色 背景图 背景图平铺方式 背景图位置/背景图缩放 背景图固定(空格隔开各个属性值,不区分顺序)
div{
width:400px;
height:400px;
backround:pink url(#) no-repeat right center/cover;
}
显示模式
标签(元素)的显示方式
作用:布局网页的时候,根据标签的显示模式选择合适的标签摆放内容。
- 块级元素
- 独占一行
- 宽度默认是父级的100%
- 添加宽高属性生效
- 行内元素
- 一行共存多个
- 尺寸由内容撑开
- 加宽高不生效
- 行内块元素 (图片)
- 一行共存多个
- 添加宽高属性生效
- 默认尺寸由内容撑开
转换显示模式
属性名: display
属性值:
block 块级
inline-block 行内块
inline 行内
结构伪类选择器
作用:根据元素的结构关系查找元素
选择器 说明
E:first-child 查找第一个E元素
E:last-child 查找最后一个E元素
E:nth-child(N) 查找第N个E元素(第一个元素N值为1)
伪元素选择器
作用:创建虚拟元素(伪元素),用来摆放装饰性的内容
选择器 说明
E::before 在E元素里面最前面添加一个伪元素
E::after 在E元素里面最后面添加一个伪元素
注意点:
- 必须设置content:“”属性,用来设置伪元素的内容,如果没有内容,则空下即可
- 伪元素默认是行内显示模式
- 权重和标签选择器相同
- 就是选中一个标签,在前面和后面选择一块区域加内容,默认是行内,宽高不生效
盒子模型
作用:布局网页,拜访盒子和内容
组成
- 内容区域 width&height
- 内边距 padding(出现在内容与盒子边缘之间)
- 边框线 border
- 外边距 margin(出现在盒子外面)
边框线
属性名:border(bd)
属性值:边框线粗细,线条样式 颜色(不区分顺序)
常用线条样式
属性值 先调样式
solid 实线
dashed 虚线
dotted 点线
设置单方向边框线
属性名:border-方位名词(bd+方位名词首字母,bdl)
属性值:边框线粗细 线条样式 颜色(不区分顺序)
内边距
作用:设置内容与盒子边缘之间的距离
属性名:padding/padding-方位名词
div{
//四个方向内边距相同
padding:30px;
//单独设置一个方向的内边距
padding-top:10px;
}
padding多值写法:为了简化代码
一个值是上下左右都是那个值。
两个分别是上下和左右
三个是上,左右,下
四个是上,右,下,左
尺寸计算
盒子尺寸 = 内容尺寸+ border尺寸 + 内边距尺寸
结论:给盒子加border/padding会撑大盒子
解决:
手动做减法,减掉border/padding的尺寸
内减模式:box-sizing:border-box(自动给做减法,不会撑大盒子)
外边距
作用:拉开两个盒子之间的距离
属性名:margin
属性值:粗细,不会撑大盒子
可以单独写一个方向也可以一次写多个方向,同上。
外边距-版心居中:margin:0 auto;表示上下边距为0,左右为auto。版心居中盒子必须有宽度,没宽度无法居中。
清除默认样式
清除标签默认的样式,比如默认的内外边距。
* {
//通配符选择器选中所有标签
margin:0;
padding:0;
box-sizing:border-box;
}
//去掉列表的序号
li {
list-style:none;
}
元素溢出
作用:控制溢出元素的内容的显示方式。(内容多,超出盒子的宽和高)
属性名:overflow
属性值 效果
hidden 溢出隐藏
scroll 溢出滚动(无论是否溢出,都显示滚动条位置)
auto 溢出滚动(溢出才显示滚动条位置)
外边距问题-合并现象
场景:垂直排列的兄弟元素,上下margin会合并
现象:取两个margin中的较大值生效
外边距问题-塌陷问题
场景:父子级的标签,子级的添加上外边距会产生塌陷问题
现象:导致父级一起向下移动
解决方法:
- 取消子级margin,父级设置padding
- 父级设置overflow:hidden
- 父级设置border-top
行内元素-内外边距问题
场景:行内元素(span)添加margin和padding,无法改变元素的垂直位置
解决方法:给行内元素添加line-height可以改变垂直位置
盒子模型-圆角
作用:设置元素的外边框为圆角
属性名:border-radius
属性值:数字+px/百分比
提示:属性值是圆角半径,写多个值是从左上角开始顺时针。
盒子模型-阴影
作用:给元素设置阴影效果
属性名:box-shadow
属性值:X轴偏移量 Y轴偏移量 模糊半径 扩散半径 颜色 内外阴影
注意:
- X轴偏移量和Y轴偏移量必须书写
- 默认是外阴影,内阴影需要添加inset
标准流
标准流也叫文档流,指的是标签在页面中默认的排布规则,例如:块元素独占一行,行内元素可以一行显示多个。
浮动
作用:让块元素水平排列(如果给一个父级的几个子级添加了浮动,如果父级没有设置高度,就会引发脱标现象,就是下面的元素会上来重叠,主要是因为父级没有高度,子级又浮动了,相当于父级里面没有东西,子级没把父级的高度撑开,子级浮动到了第二层,父级高度为0自然下面的元素会重叠上来)
属性名:float
属性值:
- left:左对齐(从左到右排列)
- right:右对齐(相反)
特点:浮动之后顶对齐,具备行内块显示模式的特点
清除浮动
场景:浮动元素会脱标(两个盒子重叠在一起),如果父级没有高度,子集无法撑开父级高度(可能导致页面布局错乱)
解决方法:清除浮动(清除浮动带来的影响)
方法一:额外标签法
-
在父级元素的最后添加一个块级元素,设置CSS属性 clear:both
.clearfix{ clearfix:both; } <div> <div>子集1</div> <div>子集2</div> <div class="clearfix"></div> </div>
方法二:单伪元素法
.clearfix::after{
//content必须有,将来哪里出问题哪里调用clearfix这个类,和额外标签法相同,不过用的是伪元素法,也是在父级标签的最后加一个块级的标签,类似于一个函数,函数的功能是在浮动的父级标签最后加一个块级标签
content:"";
display:block;
clear:both;
}
方法三:双伪元素法
//before解决外边距塌陷问题,after清除浮动
.clearfix::before,.clearfix::after{
content:"";
display:table;
}
.clearfix::after{
clear:both;
}
方法四:overflow
-
父元素添加CSS属性
overflow:hidden
flex布局
flex-认识
Flex布局也叫弹性布局,适合结构化布局,提供了强大的空间分布和对齐能力。Flex模型不会产生浮动布局中脱标现象,布局网页更简单、更灵活。
flex-组成
设置方式:给父级元素设置display:flex,子元素可以自动挤压或拉伸
组成部分:
-
弹性容器
-
弹性盒子
-
主轴:默认在水平方向
-
侧轴/交叉轴:默认在垂直方向
描述 组成
创建flex容器 display:flex
主轴对齐方式 justify-content
侧轴对齐方式 align-items
某个弹性盒子侧轴对齐方式 align-self
修改主轴方向 flex-direction
弹性伸缩比 flex
弹性盒子换行 flex-wrap
行对齐方式 align-content
主轴对齐方式
属性名:justify-content
属性值 效果
flex-start 默认值,弹性盒子从起点开始依次排列
flex-end 弹性盒子从终点开始依次排列
center 弹性盒子沿主轴居中排列
space-between 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子之间(间距在盒子之间,开头和结尾没有)
space-around 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子两侧(每个盒子左右两边都有空白)
space-evenly 弹性盒子沿主轴均匀排列,弹性盒子与容器之间间距相等(均匀)
侧轴对齐方式
属性名
-
align-items 当前弹性容器内所有弹性盒子的侧轴对齐方式(给弹性容器设置)
-
align-self 单独控制某个弹性盒子的侧轴对齐方式(给弹性盒子设置)
属性值 效果
stretch 弹性盒子沿着侧轴线被拉伸至铺满容器(弹性盒子没有设置侧轴方向尺寸则默认拉伸)
center 弹性盒子沿着侧轴局中排列
flex-start 从起点开始
flex-end 从终点开始
修改主轴方向
主轴默认在水平方向,侧轴默认在垂直方向
属性名:flex-direction:column;
弹性伸缩比
作用:控制弹性盒子的主轴方向的尺寸。
属性名:flex
属性值:整数数字,表示占用父级剩余尺寸的份数。
弹性盒子换行
弹性盒子可以自动挤压或拉伸,默认情况下,所有弹性盒子都在一行显示。
属性名:flex-warp
属性值
-
wrap:换行
-
nowrap:不换行(默认)
flex-direction
弹性伸缩比 flex
弹性盒子换行 flex-wrap
行对齐方式 align-content
主轴对齐方式
属性名:justify-content
属性值 效果
flex-start 默认值,弹性盒子从起点开始依次排列
flex-end 弹性盒子从终点开始依次排列
center 弹性盒子沿主轴居中排列
space-between 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子之间(间距在盒子之间,开头和结尾没有)
space-around 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子两侧(每个盒子左右两边都有空白)
space-evenly 弹性盒子沿主轴均匀排列,弹性盒子与容器之间间距相等(均匀)
侧轴对齐方式
属性名
-
align-items 当前弹性容器内所有弹性盒子的侧轴对齐方式(给弹性容器设置)
-
align-self 单独控制某个弹性盒子的侧轴对齐方式(给弹性盒子设置)
属性值 效果
stretch 弹性盒子沿着侧轴线被拉伸至铺满容器(弹性盒子没有设置侧轴方向尺寸则默认拉伸)
center 弹性盒子沿着侧轴局中排列
flex-start 从起点开始
flex-end 从终点开始
修改主轴方向
主轴默认在水平方向,侧轴默认在垂直方向
属性名:flex-direction:column;
弹性伸缩比
作用:控制弹性盒子的主轴方向的尺寸。
属性名:flex
属性值:整数数字,表示占用父级剩余尺寸的份数。
弹性盒子换行
弹性盒子可以自动挤压或拉伸,默认情况下,所有弹性盒子都在一行显示。
属性名:flex-warp
属性值
- wrap:换行
- nowrap:不换行(默认)