css
bfc(Block Formatting Context)
实现 bfc 方法
- body 元素
- 设置浮动,不包括 none
- 设置定位,absoulte 或者 fixed
- 设置 overflow,即 hidden,auto,scroll
- 行内块显示模式,inline-block
- 表格单元格,table-cell
- 弹性布局,flex
相对单位大小
单位 | 相对于 |
---|---|
em |
在 font-size 中使用是相对于父元素的字体大小,在其他属性中使用是相对于自身的字体大小,如 width |
ex |
字符“x”的高度 |
ch |
数字“0”的宽度 |
rem |
html 根元素的字体大小 |
lh |
元素的 line-height |
vw |
视窗宽度的 1% |
vh |
视窗高度的 1% |
vmin |
视窗尺寸的 1% |
vmax |
视图尺寸的 1% |
percent
: 如果将元素的字体大小设置为百分比,那么它将是元素父元素字体大小的百分比。如果使用百分比作为宽度值,那么它将是父值宽度的百分比
使用百分比作为元素外边距(margin)或填充(padding)的单位时,值是以包含块的内联尺寸进行计算的,也就是元素的水平宽度。请记住一个事实,当你使用百分比作为元素外边距或填充的单位时,你将得到一个相同尺寸的外边距或填充。
object-fit
当使用 object-fit
时,替换元素可以以多种方式被调整到合乎盒子的大小。cover fill contain
在对替换元素使用各种 CSS 布局时,你可能会发现他们的表现方式与其他元素有一些细节上的差异。例如,flex 或者 grid 布局中,默认情况下元素会被拉伸到充满整块区域。但是图像不会被拉伸,而会对齐到网格区域或者弹性容器的起始处。
/* 为了强制图像拉伸,以充满其所在的网格单元,你必须做类似于下面的事情:*/
img {
width: 100%;
height: 100%;
}
EMMENT语法
- 生成标签直接输入标签名 按 tab 键即可 比如 div 然后按 tab 键,就可以生成
- 如果想要生成多个相同标签 加上 * 就可以了,比如 div*3 就可以快速生成3个 div
- 如果有父子关系的标签,可以用 > 比如 ul > li 就可以了
- 如果有兄弟关系的标签,用 + 就可以了 比如 div+p
- 如果生成带有类名或者 id 名字的,直接写 .demo 或者 #two tab 键就可以了
- 如果生成的类名是有顺序的,可以用自增符号 $
- 如果想要在生成的标签内部写内容可以用 {} 表示
snipaste工具
Snipaste 是一个简单但强大的截图工具,也可以让你将截图贴回到屏幕上
常用快捷方式:
- F1 可以截图,同时测量大小,设置箭头 书写文字等
- F3 在桌面置顶显示
- 点击图片,alt 可以取色(按下 shift 可以切换取色模式)
- 按下 esc 取消图片显示
盒子宽度(在父元素宽/高固定的情况下)
如果盒子本身没有指定 width/height 属性,则此时 padding 不会撑开盒子大小
解决嵌套元素垂直外边距塌陷问题
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值
解决方案:
- 可以为父元素定义上边框
- 可以为父元素定义上内边距
- 可以为父元素添加
overflow: hidden
清除浮动
- 额外标签法也称为隔墙法,是W3C推荐的做法
- 父级添加 overflow 属性
- 父级添加 after 伪元素
- 父级添加双伪元素
<div class="fahter clearfix">
<div class="big">big</div>
<div class="small">small</div>
<div class="clear">额外标签法</div>
</div>
/* 方式一: 额外标签法*/
.clear{
clear: both;
}
/* 方式二 */
.fahter{
width: 400px;
border: 1px solid deeppink;
overflow: hidden;
}
/* 方式三 */
.clearfix::after{/*伪元素是行内元素 正常浏览器清除浮动方法*/
content: "";
display: block;
height: 0;
clear:both;
visibility: hidden;
}
.clearfix{
*zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
}
/* 方式四 */
.father{
border: 1px solid black;
*zoom: 1;
}
.clearfix::after,.clearfix::before{
content: "";
display: block;
clear: both;
}
CSS属性书写顺序
- 布局定位属性: display / position / float / clear / visibility / overflow (建议 display 第一个写,毕竟关系到模式)
- 自身属性: width / height / margin / padding / border / background
- 文本属性: color / font / text-decoration / text-align / vertical-align / white-space / word-break
- 其他属性(CSS3): content / cursor / border-radius / box-shadow / text-shadow / background:linear-gradient...
相对定位
相对定位是元素在移动位置的时候,是相对于它原来的位置来说的(自恋型)
选择器 { position: relative; }
相对定位的特点:
- 它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)
- 原来在标准流的位置继续占有,后面的盒子仍然以标准的方式对待它(不脱标,继续保留原来位置)
绝对定位
绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的
选择器 { position: absolute; }
绝对定位的特点:
- 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位(Document 文档)
- 如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置
- 绝对定位不再占有原来的位置(脱标)
z-index属性只有定位的盒子才有这个属性
绝对定位、固定定位与浮动的特殊性
- 行内元素添加绝对或者固定定位,可以直接设置高度和宽度
- 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小
icomoon
1. 网站上选择内容并下载,加入 font 文件夹,cssStyle 样式
2. 复制图标内容 加 font-family 属性
(追加图标: 选 selection.json 文件上传,追加后下载替换)
三角形
width: 0;
height: 0;
border-color: transparent red transparent transparent;
border-style: solid;
border-width: 22px 8px 0 0;
width: 0;
height: 0;
border: 30px solid transparent;
border-top-color: red;
vertical-align
- 图片、表单和文字对齐
图片和表单都属于行内块元素,默认的 vertical-algin 是基线对齐
此时可以给图片、表单这些行内块元素的 vertical-align 属性设置为middle
就可以让文字和图片垂直居中对齐了 - 解决图片底部默认空白缝隙问题
bug: 图片底侧会有一个空白缝隙,原因是行内块元素会和文字的基线对齐- 给图片添加 vertical-align: middle / top / bottom
- 把图片转换为块级元素 display: block;
省略号
- 单行文本溢出显示省略号--必须满足三个条件
/* 1. 先强制一行内显示文本 */ white-space: nowrap; /* 2. 超出部分隐藏 */ overflow: hidden; /* 3. 文字用省略号替代超出的部分 */ text-overflow: ellipsis;
- 多行文本溢出显示省略号
多行文本溢出显示省略号,有较大兼容性问题,适合于 webkit 浏览器或移动端(移动端大部分是 webkit 内核)overflow: hidden; text-overflow: ellipsis; /* 弹性伸缩盒子模型显示 */ display: -webkit-box; /* 限制在一个块元素显示的文本的行数 */ -webkit-line-clamp: 2; /* 设置或检索伸缩盒对象的子元素的排列方式 */ -webkit-box-orient: vertical;
类选择器 伪类选择器 属性选择器权重一样
元素选择器 伪元素选择器权重一样
css3新属性
1. CSS3滤镜 filter
filter CSS属性将模糊或颜色偏移等图形效果应用于元素
filter: 函数(); 例如: filter: blur(5px); blur 模糊处理 数值越大越模糊
2. CSS3 过渡(谁做过渡给谁加)
transition: 要过渡的属性 花费时间 运动曲线 何时开始;
3. 2D转换之移动 translate
2D 移动是 2D 转换里面的一种功能,可以改变元素在页面中的位置,类似定位
transform: translate(x, y);
transform: translateX(n);
transform: translateY(n);
- 定义 2D 转换中的移动,沿着X和Y轴移动元素
- translate 最大的优点:不会影响到其他元素的位置
- translate 中的百分比单位是相对于自身元素的 translate(50%, 50%);
- 对行内标签没有效果
4. 2D转换之旋转 rotate
2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转
transform: rotate(度数);
- rotate 里面跟度数,单位是deg 比如 rotate(45deg)
- 角度为正时,顺时针,负时,为逆时针
- 默认旋转的中心点是元素的中心点
5. 2D转换中心点 transform-origin
我们可以设置元素转换的中心点
transform-origin: x y;
- 注意后面的参数 x 和 y 用空格隔开
- x y 默认转换的中心点是元素的中心点 (50%, 50%)
- 还可以给 x y 设置像素或者方位名词 (top bottom left right center)
6. 2D转换之缩放 scale
缩放,顾名思义,可以放大和缩小。只要给元素添加上了这个属性就能控制它放大还是缩小
transform: scale(x, y);
- 注意其中的 x 和 y 用逗号分隔
- transform: scale(1, 1); 宽和高都放大了一倍,相当于没有放大
- transform: scale(2); 只写一个参数,第二个参数则和第一个参数一样,相当于 scale(2, 2);
- transform: scale(0.5, 0.5); 缩小
- scale缩放最大的优势: 可以设置转换中心点缩放,默认以中心点缩放的, 而且不影响其他盒子
动画的基本使用
制作动画分为两步:
- 先定义动画
- 再使用(调用)动画
1. 用 keyframes 定义动画(类似定义类选择器)
@keyframes 动画名称 {
0% {
width: 100px;
}
100% {
width: 200px;
}
}
2. 动画常用属性
属性 | 描述 |
---|---|
@keyframes |
规定动画 |
animation |
所有动画的简写属性,除了 animation-play-state 属性 |
animation-name |
规定@keyframes 动画的名称(必须的) |
animation-duration |
规定动画完成一个周期所花费的秒或毫秒,默认是0(必须的) |
animation-timing-function |
规定动画的速度曲线,默认是 ease |
animation-delay |
规定动画何时开始,默认是0 |
animation-iteration-count |
规定动画被播放的次数,默认是1,还有 infinite |
animation-direction |
规定动画是否在下一周期逆向播放,默认是 normal,alternate 逆播放 |
animation-play-state |
规定动画是否正在运行或暂停,默认是 running,还有 pause |
animation-fill-mode |
规定动画结束后状态,保持 forwards, 回到起始 backwards |
3D移动 translate3d
3D 移动在 2D 移动的基础上多加了一个可以移动的方向,就是 z 轴方向
- transform: translateX(100px); 仅在 x 轴上移动
- transform: translateY(100px); 仅在 y 轴上移动
- transform: translateZ(100px); 仅在 z 轴上移动(注意: translateZ 一般用 px 单位)
- transform: translate3d(x, y, z); 其中 x, y, z 分别指要移动的轴的方向的距离
透视 perspective
在 2d平面产生近大远小视觉立体,但是只是效果二维的
- 如果想要在页面产生 3d 效果需要透视(理解成 3d 物体投影在 2d 平面内)
- 模拟人类的视觉位置,可认为安排一只眼睛去看
- 透视我们也称为视距:视距就是人的眼睛到屏幕的距离
- 距离视觉点越近的电脑平面成像越大,越远成像越小
- 透视的单位是像素
透视写在被观察元素的父盒子上面的
d: 就是视距,视距就是一个距离人的眼睛到屏幕的距离
z: 就是 z 轴,物体离屏幕的距离,z 轴越大(正值)我们看到的物体就越大
3D旋转 rotate3d
3d 旋转指可以让元素在三维平面内沿着 x 轴,y 轴,z 轴或者自定义轴进行旋转
- transform: rotateX(45deg); 沿着 x 轴正方向旋转45deg
- transform: rotateY(45deg); 沿着 y 轴正方向旋转45deg
- transform: rotateZ(45deg); 沿着 z 轴正方向旋转45deg
- transform: rotate3d(x, y, z, 45deg); 沿着自定义轴旋转45deg,x y z 是表示旋转轴的矢量,是标志着你是否希望沿着该轴旋转,最后一个标志旋转的角度
3D呈现 transform-style
- 控制子元素是否开启三维立体环境
- transform-style: flat; 子元素不开启 3d 立体空间 默认的
- transform-style: preserve-3d; 子元素开启立体空间
- 代码写给父级,但是影响的是子盒子
私有前缀
浏览器私有前缀是为了兼容老版本的写法,比较新版本的浏览器无需添加
- -moz-: 代表 firefox 浏览器私有属性
- -ms-: 代表 ie 浏览器私有属性
- -webkit-: 代表 safari, chrome私有属性
- -o-: 代笔 Opera 私有属性
-moz-border-radius: 10px;
-ms-border-radius: 10px;
-webkit-border-radius: 10px;
-o-border-radius: 10px;
移动端
移动端布局和之前我们学习的 pc 端有所区别
1. 单独制作移动端页面(主流)
- 流式布局(百分比布局)
- flex 弹性布局(强烈推荐)
- less + rem + 媒体查询布局
- 混合布局
2. 响应式页面兼容移动端(其次)
- 媒体查询
- bootstarp
flex
线性渐变
background: linear-gradient(起始方向, 颜色1, 颜色2, ...);
background: -webkit-linear-gradient(left, red, blue);
background: -webkit-linear-gradient(left top, red, blue);
背景渐变必须添加浏览器私有前缀
起始方向可以是:方位名词或者度数,如果省略就是 top
媒体查询
@media mediatype and|not|only (media featue) {
CSS-Code;
}
- 用 @media 开头 注意 @ 符号
- mediatype 媒体类型
- 关键词 and not only
- media feature 媒体特性必须有小括号包含
引入资源
当样式比较繁多的时候,我们可以针对不同的媒体使用不同 stylesheets。原理就是直接在 link
中判断设备的尺寸,然后引用不同的 css 文件
<!-- link 相比内部样式还可以利用浏览器缓存加快用户访问的速度 -->
<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="myStyleSheet.css" />
rem
1. rem 适配方案技术使用
- less + 媒体查询 + rem
- flexible + rem (推荐)
2. rem实际开发适配方案 元素大小取值方法
- 最后的公式:页面元素的 rem 值 = 页面元素值(px)/(屏幕宽度 / 划分的份数)
- 屏幕宽度/划分的份数 就是 html font-size 的大小
- 或者:页面元素的 rem 值 = 页面元素值(px)/ html font-size 字体大小
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具