一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情。
css3
常用选择器
-
元素选择器
- p{ }、h1{ }、span{}
-
id选择器
- id{ }
-
类选择器
- .class{ }
-
通配选择器(所有元素都选中)
- *{ }
复合选择器
-
交集选择器
-
div class="red"
p class="red"
div.red{ }
-
-
选择器分组(并集选择器)
- h1,span,p,h2{ }
关系选择器
- 父元素
- 直接包含子元素的叫父元素
- 子元素
- 直接被父元素包含是子元素
- 祖先元素
- 直接或间接包含后代元素的叫祖先元素
- 一个元素的父元素也是它的祖先元素
- 后代元素
- 直接或间接被祖先元素包含的元素叫做后代元素
- 子元素也是后代元素
- 兄弟元素
- 拥有相同父元素的元素是兄弟元素
子元素选择器
-
选中指定父元素的指定子元素
-
父元素>子元素
- div>span{ }
后代选择器
-
选中指定元素的指定后代元素
-
语法 :祖先(空格)后代
- div span{ }(div内的所有span元素)
兄弟选择器
-
选择下一个兄弟
-
语法:前一个 + 后一个
- p + span{ }(选择p下面一个span)
-
选择下边所有的兄弟
-
语法:前一个 ~ 后一个
- p ~ span{ }(下面的所有span)
属性选择器
-
选择含有指定属性的元素
-
p title= "1 abc "
-
p title= "abc "
-
p title= " 2 abcdef"
p[title]{ }(则会将p全选)
p[title="abc"]{ }(选中title为abc的p标签)
p[title ^= "abc"]{ }(选中以abc开头的p标签)
p[title $="abc"]{ }(选中以abc结尾的p标签)
p[title *="abc"]{ }(选中含有abc的p标签)
-
伪类选择器
-
伪类 (第一个元素、被点击的元素、鼠标移到的元素···)
:first-child第一个子元素
元素 + :last-child最后一个子元素
:nth-child()选中第n个子元素
:first-of-type
元素 + :last-of-type 不同点:只在同类型里排序
:nth-of-type()
- 元素 + :not( )否定类
- 将符合条件的元素从选择器里去除
伪元素
-
表示页面中一些并不存在的元素(特殊的位置)
- 伪元素用::开头
- ::first-letter 第一个字母
- ::first-line第一行
- ::selection表示选中的内容
-
::before 元素的开始位
-
::after 元素的结束位
-
before和after必须结合 content属性来使用
-
div::before{
content:"haha";
color:blue;
}
-
-
盒子模型
由内容区、内边距和边框决定大小
-
内容区(content)
- 由width跟height决定其大小
-
内边距(padding)
内容区和边框之间的距离是内边距,影响盒子大小(背景颜色会影响到内边距上)
语法:padding:10px;其余与边距相似
-
边距(border)
-
border-width(宽度)、border-color(颜色)、border-style(样式)
- border-width可以指定四个方向宽度(默认3个像素)
- 四个值:上 右 下 做 、三个值:上 左右 下 、两个值:上下 左右、 一个值: 上下左右
-
也可以border-top-width(指定上)
- bottom下、left、right
-
border简写属性
-
border:solid 10px red;(没有顺序要求)
-
border:1px solid transparent ;(颜色可用tran来透明)
-
-
-
外边距(margin)
外边距不影响大小但是影响元素位置
-
一般margin-top跟-left(正值元素会向下和向右移动)
-
而设置下和右边距会移动其他元素
语法:margin:10px;
-
水平布局
一个元素在其父元素中,水平布局满足 margin-left+border-left+padding-left+width+padding-right+border-right+margin-right = 其父元素内容区宽度
(若不满足则会自动调节margin-right来满足)
若某个值为auto,则会自动调节那个值来成立等式
- 若设两边距为auto,width为固定值,则会使元素在水平居中
垂直分布
默认情况下父元素的高度被内容撑开
子元素在父元素内容区中排列的
-
若子元素大小超出父元素,则子元素会在父元素中溢出
溢出时可用overflow属性来设置父元素如何处理子元素
语法 overflow:hidden 溢出内容裁剪不会显示
overflow:scroll 生成两个滚动条,通过滚动条查看内容
overflow:auto 自动根据需要生成滚动条
行内元素的盒模型
-
行内元素不支持设置高度和宽度
- 转换为块元素后可以
-
display 用来设置元素显示的类型
可选:
inline将元素设置为行内元素
block将元素设置为块元素
inline-block将元素设置为行内块元素
-
行内块 既可以设置宽度和高度又不会独占一行
table将元素设置为一个表格
none 元素不在页面中显示
-
-
visibility 用来设置元素显示状态
-
visible 默认值,元素在页面正常显示
-
hidden 元素在页面中隐藏不显示,但是依然占据页面位置
-
html 表格标签
-
table(可在里写样式) thead(头部) tbody(主体) tfoot(底部)
-
一般情况下默认写tbody
-
子元素 tr(行元素)
td(列元素)
th(头部元素会加粗)
也可以在< td rowspan="x">指定纵向的单元格合并
< td colspan="x">指定横向的单元格合并
表格的样式
border-spacing: 指定边框之间的距离
border-collapse:collapse; 设置边框的合并
使用表格垂直居中方式
- 将元素设置为单元格
- display:table-cell;
- 然后设置居中
- vertical-align:midden;
表单的介绍(form)
用form建立标签
< form action="xxx(要提交的服务器地址)">
文本框(要将数据提交到服务器中,要指定一个name)
< input type="text" name="username">
密码框
< input type="password" name="username">
单选按钮(必须指定value 然后返回数据)
< input type="radio" name="xx" value="a" checked(默认选中状态)>
多选框
< input type = "checkbox">
下拉列表
< select name="xx">
< option value="xx">< /option>
< option selected(默认选中) value="xx">< /option>
提交按钮
< input type="submit " value="xx">
重置按钮
< input type="reset" >
普通按钮
< input type="button" value="xx">
< button type ="xx">内容< /button>
又有结束标签可在中间添加东西
input 是自结束标签
表单补充
-
autocomplete = "off"关闭自动补全
-
readonly 将表单设置为只读,数据提交
-
disabled 将表单设置为禁用 , 数据不会提交
-
autofocus 设置表单项自动获取光标
< input type="text" name="xxx" 可选值>
css 背景元素
background-image:url(“ 地址”)
-
设置背景图片
-
background-repeat 用来设置背景的重复方式
- repeat 默认,背景沿着x,y双方向重复
- repeat-x,repeat-y ,沿x轴,y轴重复
- no-repeat 不重复
background-positon(定位)
- background-position : auto auto;
- 通过 top left right bottom center 调整位置
- 也可以通过 偏移量调整水平 垂直方向变量
background - clip(背景裁剪)
可选值:
border-box 默认值 ,背景出现在边框下边
padding-box 背景不会出现在边框,只会出现在内容区和内边框
content-box 背景只会出现在内容区
background - origin(背景原点)
可选值:
padding-box 默认值, position 从内边距开始计算
content-box 背景图片从内容区开始计算
border-box 背景图片从边框开始计算
background - size (背景大小)
-
background - size: 宽度 高度
可选值
cover 图片比例不变,将元素铺满
contain 图片比例不变,将图片在元素中完整显示
background - attachment(图片是否随元素移动)
可选值:
scroll 默认值图片跟随元素移动
fixed 背景固定在页面不随元素移动
background 的简写属性
注意事项:
size 必须写在position 的后边,并用/隔开 center center /contain
orgin 和 clip 两个样式 orgin 要写在clip 前边
过渡(transition)
-
transition-property:指定要执行的过渡属性
-
属性不写默认是all
多个属性用,隔开
如果所有属性都需要过渡,则使用all关键字
大部分都支持过渡效果,注意需要从有效值到有效值
transition-property: height , width;
-
transition-duration:指定过渡的持续时间
-
transition-timing-function:过渡的时序函数
transition-timing-function:ease;(默认)
linear(匀速运动)、ease-in(加速运动)、ease-out(减速运动)
cubic-bezier()贝塞尔函数指定路线
-
transition-timing-function:steps()分布执行过渡效果
- (2,end)默认值 2秒一个步骤,(2,start)立马开始第一步
-
transition-delay 过渡效果的延迟,等待一段时间后执行
-
transition 可以同时设置所有属性,要写延迟的话,则第一个是持续时间
动画
@keyframe name{
from{ 开始的位置也可以用0%}
to{ 结束的位置也可以用100%}
}
动画属性
-
animation-name:name;当前元素生效的关键帧名字
-
animation-duration: 4s; 动画的执行时间
-
animation-delay:Xs; 动画的延迟时间
-
animation-timing-function:ease; 过渡的时序函数
-
animation-iteration-count:(xx次)或者inifinite(无限次);
-
animation-direction:normal;默认从from到to
- reverse 从to到from 、alternate从from到to,然后从to到from
-
animation-play-state: running;默认开,paused动画暂停
-
animation-fill-mode:none;默认动画执行完后回到原点
- forwards 动画执行完后会停止在动画结束位置
- backwards 动画延时等待时,元素会处于开始位置
- both 结合了 forwards 和 backwards
-
animation的简写属性与过渡一样
-
white-space 设置网页如何处理空白
-
可选值:
- normal正常
- nowrap 不换行
- pre 保留空白
css 文本
若想达到隐藏一段文字的内容到某位置并显示省略号
写法
.box{
width:200px;
white-space:nowrap;(文本全放一行不换行)
overflow:hidden;(多的裁剪)
text-overflow:ellipsis;(多的文本隐藏起来变省略号)
}
解决边框撑起图片的问题
用vertical-align:bottom;(将默认基线对齐改成底部对齐)
line-height
行间距 = 行高 — 字体大小
子元素设置为父元素的同样高度大小能使元素垂直居中
css 字体族
字体相关样式
- color
- font-size(相关单位)
- em相当于当前元素的一个font-size
- rem相对于根元素的一个font-size
font-family 字体族(字体的格式)
- 可选值
- serif 衬线字体
- sans-serif 非衬线字体
- monospace 等宽字体
- font-family简写样式
- font-family:" Courier New",Courier,XXX(字体生效时优先第一个,逗号隔开)
font-face
- font-family:"myfont";(指定字体的名字)
- src:url(‘路径’);(服务器的字体路径
图标字体
- 图标字体(iconfont)
- 在网页中经常需要使用一些图标,可以通过图片来引入图标
- 但是图片大小本身比较大,并且非常的不灵活
- 使用在使用图标时,我们还可以将图标直接设置为字体
- 然后用font-face 的形式对字体进行引入,就可以用字体的形式使用图标
fontawesome的使用
- 将all.css引入到网页中
- link rel="stylesheet" href="路径"
使用图标字体
-
直接用类使用class = "fas fa-bell"(只有fas跟fab两个能用)
-
通过伪元素为一堆元素设置图标字体
-
1、在zeal中找到对应的字体编码
-
2、设置字体的样式
- fas
- font-family:"Font Awesome 5 free";
- font-weight:900;
- fab
- font-family:"Font Awesome 5 Brands";
例如 li::before{
content:"\(对应编码)"
font-family:"XXX";
font-weight:900;
}
-
-
使用实体来设置图标字体
&x(实体编码)
-
span class="fas(fab)" &x(编码)
flex (弹性盒、伸缩盒)
-
css中可以代替浮动的一种页面布局。元素可以跟随页面大小而改变
弹性容器上的样式
一、 flex-direction
指定容器中的元素的排列方式
可选值:row 默认值,(水平左到右)
row-reverse 反方向(右到左)
column 纵向排列(自上向下)
column-reverse 反方向(自下向上)
主轴:弹性元素的排列方向叫主轴
侧轴:与主轴垂直方向的称为侧轴
三、 flex-wrap:
设置弹性元素是否在弹性容器中自动换行
可选值: nowrap 默认值,元素不会自动换行
wrap 元素沿着辅轴方向自动换行
wrap-reverse 元素沿这辅轴反方向换行
flex-flow:wrap 和 direction 的简写属性
flex-flow:row wrap ;
四、justify-content
分配主轴上的空白空间
可选值: flex-start 元素沿着主轴起边排列
flex-end 元素沿着主轴终边排列
center 元素居中排列
space-around 空白分布到元素两侧
space-between 空白均价分布到元素间
space-evenly 空白分布到元素单侧
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0fG9ZBob-1645018500704)(C:\Users\winches\Desktop\学习笔记\html + css\img\justify-content.png)]
五、align-items
元素在辅轴上的分布
可选值: stretch 默认值,元素的长度设置为相同值
flex-start 元素不拉伸,沿着辅轴起边对齐
flex-end 沿着辅轴的终边对齐
center 居中对齐
baseline 基线对齐
align-content:
辅轴空白的分布
space-between 空白到两侧
align-self 用来覆盖当前元素上的align-items
** align-self**
给单独的元素设置样式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nPfn0Up8-1645018500706)(C:\Users\winches\Desktop\学习笔记\html + css\img\align-self.png)]
弹性元素的样式
二、 flex-grow
指定弹性元素的伸展的系数
容器的宽度为400px, 子项1的占用的基础空间(flex-basis)为50px,子项2占用的基础空间是70px,子项3占用基础空间是100px,剩余空间为 400-50-70-100 = 180px。 其中子项1的flex-grow: 0(未设置默认为0), 子项2flex-grow: 2,子项3flex-grow: 1,剩余空间分成3份,子项2占2份(120px),子项3占1份(60px)。所以 子项1真实的占用空间为: 50+0 = 50px, 子项2真实的占用空间为: 70+120 = 190px, 子项3真实的占用空间为: 100+60 = 160px。
父元素右剩余空间,子元素如何排列
flex-shrink
指定弹性元素的收缩系数
用来“吸收”超出的空间
flex-basis
指定的是元素在主轴上的基础长度
flex-basis 用于设置子项的占用空间。如果设置了值,则子项占用的空间为设置的值;如果没设置或者为 auto,那子项的空间为width/height 的值。
order
决定弹性元素的排列的顺序
css 定位(posion)
-
定位可以将元素摆放到页面的任意位置
-
使用posion属性将元素设置定位
语法posion:可选值
static 默认值 没开启时元素是静止的
relative 开启元素相对定位
absolution 开启元素绝对定位
sticky 开启元素的粘滞定位
fixed 开启固定定位
相对定位(relative)
-
特点
1、元素开启相对定位后,不设置偏移量元素不会发生任何变化
2、相对定位是参照于元素在文档流重点位置来定位的
3、相对定位会提升元素的层级
4、相对定位不会使元素脱离文档流
5、相对定位不会改变元素的性质,块还是块,行内还是行内
绝对定位(absolution)
-
特点
1、开启绝对定位后,不设置偏移量元素位置不会发生改变
2、开启绝对定位后,元素会从文档流中脱离
3、绝对定位会改变元素的性质,行内变块,块的高度被内容撑开
4、绝对定位提升元素一个层级
5、绝对定元素使相对于其包含块进行定位的
包含块
- 包含块就是当前元素的祖先块元素(最近的父元素)
绝对定位的包含块
- 包含块就是离它最近的开启了定位的祖先元素
- 如果所有祖先元素都没开启定位则根元素就是它的包含块
- html(根元素、初始包含块)
固定定位(fixed)
- 固定定位也是一种绝对定位,所以固定定位大部分特点都和绝对定位一样
- 唯一不同的使固定定位永远参照于浏览器的视口进行定位
粘滞定位(sticky)
- 粘滞定位特点于相对定位特点一样
- 不同的使粘滞定位可以在元素到达某个位置时固定
- 例如一开始在下面,后来拖动网页向下后元素固定在某位置
绝对元素的布局
-
当我们开启绝对元素后
-
水平方向布局等式就需要添加left和right两个值
left + margin-left + border-left + padding-left + width
padding-right + border-right + margin-right + right =父元素宽
-
当9个值发生过度约束(未达到等式)则自动调整right
-
若有auto,则自动调整auto元素来满足
-
可设置auto的值margin width left right
-
left和right默认时auto,如果不设置left和right则自动调整这两个值
-
垂直分布布局
同样9个多加一个 top 和bottom
若left和right为0,margin为auto则水平居中
若top和bottom为0,margin为auto则垂直居中
元素的层级
开启了定位元素,可以用z-index属性来指定元素的层级
-
z-index作为一个整数参数,值越大层级越高越优先显示
例如 :z - index:3;用法
浮动
通过浮动可以使一个元素使其向父元素的左侧或右侧移动
- 用float属性设置
- 可选值
- none 默认 不浮动
- left 向左浮动
- right 向右浮动
- 可选值
!元素设置浮动后,水平布局等式不需要强制成立
- 元素设置浮动后,会从文档流脱离,不占用文档流位置,
- 所以元素下标的文档流中的元素辉自动向上移动
浮动的特点
-- 1.浮动元素辉完全脱离文档流,不占用文档流位置
-- 2.设置浮动后元素会向其父元素向左或向右移动
-- 3.浮动元素不会从父元素移出
-- 4.浮动元素向左或向右时,不会超过它前面的其他浮动元素
-- 5.浮动元素不会超过它前边的浮动的兄弟,最多就是和它一样高
浮动的其他特点
- 浮动元素不会盖住文字,文字会自动环绕在浮动元素的周围
脱离文档流的特点:
块元素:
1.块元素不在独占页面的一行
2.脱离文档流一会,块元素的宽度和高度默认被内容撑开
行内元素:
行内元素脱离文档流直接变成块元素,特点和块元素一样
!脱离文档流后,不需要区分块和行内元素
Clear 消除浮动影响
- 可选值:
- left 清除左侧浮动元素对当前元素的影响
- right清楚右侧浮动元素对当前元素的影响
- both清楚两侧中最大影响的那侧
- 原理:
- 设置清楚浮动后,浏览器会自动为元素加上一个外边距 以使其位置不受浮动元素影响(外边距查看不到)
使用伪元素解决高度塌陷问题
当子元素浮动,父元素高度塌陷后
这时在父元素中添加一个::after伪元素
- (父元素)::after{
content:" ";
display:block; (不加这个的话伪元素默认为行内元素,不能跑到子元素后面)
clear:both;
}
处理外边距重合问题
解决子元素与父元素重合外边距一起移动问题:
-
在父元素中设置::before
-
(父元素)::before{
content:" ";
display:table;
}
-
clearfix这个样式可以解决 高度塌陷和外边距重合问题
.clearfix::before,
.clearfix::after{
content:" ";
display:table;
clear:both;
}
用法:
高度塌陷
-
高度塌陷:
-
浮动布局中,父元素的高度默认是子元素撑开的
-
当子元素浮动后,其完全脱离文档流,子元素流从文档流中脱离,导致无法撑开父元素高度,父元素高度丢失
(父元素高度丢失后,下面元素自动上移,导致布局混乱)
-
-
BFC(Block Formatting Context)块级格式化环境
-
BFC是css中一个隐含的属性,可以为一个元素开启BFC,
开启后元素变成一个独立的布局区域
特点
-
开启BFC元素不会被浮动元素覆盖
-
开启BFC元素子元素和父元素外边距不会重叠
-
开启BFC元素可以包含浮动的子元素
开启BFC的方式
- 设置元素浮动(不推荐)
- 设置为行内块元素(不推荐)
- 将元素设置为一个overflow的非visible的值
- 常用的方式设置为overflow:hidden(使其可以包含浮动元素)
css-sprite 雪碧图
将多个小图片保存在一个大图片,然后通过调整backgroun-position来显示
- 先用backgroun-image:url();加背景图进来
- 再用background-position :(x)(y) 调整对应图片进来;
渐变色
background-image:linear-gradient(颜色 渐变位置,颜色 渐变位置 )
可以改变方向,默认从上到下
to left to right to top xxxdeg 可以指定度数
例如 :image:line-gradient(xxxdeg,颜色 ,颜色)
径向渐变
background-image:radial-gradient
(大小 at 位置 ,颜色 位置,颜色 位置)大小:circle 圆形 ellipse椭圆
(circle at 100px 100px,red ,yellow)
css的变形改变元素的形状或位置
- 不会影响页面的布局
transform 用来设置元素的变形效果
平移:
translateX()沿着X轴
translateY()沿着y轴
translateZ()沿着z轴
百分比是相对自身来设置的
transform:translate()
用变形来使元素居中
position :absolute;
left:50%; top:50%;
transform: translateX(-50%) translateY(-50%);
用变形来使元素动起来的动画效果
transition:all xx s ;结合过渡
Z轴平移
transform: translateZ(100px);
这个必须结合视距来才能看到效果。浏览器默认不支持透视
html{ perspective:800px };
元素选择
transform:rotateX(),rotateY(),rotateZ()
Z轴的旋转中点在中间
元素的缩放
-
transform: scale (2);
-
scaleX() scaleY() scale() 三种表达
-
数字代表缩放的倍数
-
这个也可以搭配 过渡和overflow :hidden;来实现鼠标移入放大效果