一、CSS盒模型
-
CSS盒模型组成 包含内容区域(Content)、内边距(Padding)、边框(Border)、外边距(Margin)。
-
Border-box vs Content-box
border-box
:宽高包含内容、内边距、边框(IE传统模型)。content-box
:宽高仅指内容区域(W3C标准模型)。
-
W3C标准盒模型 内容 → 内边距 → 边框 → 外边距。
-
盒模型计算方式
- 宽度 = 内容宽度 + 左右内边距 + 左右边框 + 左右边距
- 高度 = 内容高度 + 上下内边距 + 上下边框 + 上下边距
box-sizing
属性
content-box
(默认):按标准模型计算。border-box
:宽高包含内边距和边框。inherit
:继承父元素值。
二、CSS选择器与优先级
- CSS选择器类型
- 类型选择器(
h1
)、类选择器(.class
)、ID选择器(#id
)、属性选择器([type="text"]
)、伪类(:hover
)、伪元素(::before
)、后代选择器(div p
)、兄弟选择器(h1 + p
)等。
-
优先级规则 权重从高到低:
!important
> ID选择器 > 类/属性/伪类 > 元素选择器 > 通配符*
。 -
CSS3新增伪类
- 结构伪类:
:nth-child()
,:first-of-type()
- 状态伪类:
:disabled
,:checked
- 否定伪类:
:not()
- 示例:
button:hover { background-color: red; }
三、布局与定位
- 元素居中方法
- Flexbox:
justify-content: center; align-items: center;
- Grid:
place-items: center;
- 定位法:
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
- 表格布局:
display: table-cell; text-align: center; vertical-align: middle;
- Flex布局
- 原理:基于弹性盒子模型,自动调整子元素排列和对齐。
- 属性:
flex-direction
,justify-content
,align-items
,flex-wrap
。 - 场景:响应式布局、导航栏、多列布局。
- Grid布局
- 特点:二维网格布局,精确控制行列。
- 应用场景:复杂表格、瀑布流布局、响应式设计。
- 圣杯布局实现
- 使用Flexbox:
.container { display: flex; } .left { flex: 1; } .right { flex: 2; }
- 双飞翼布局:通过负外边距和辅助列实现。
position
属性
relative
:相对于自身位置偏移。absolute
:相对于最近的非static祖先元素。fixed
:相对于视口固定。
- 浮动与清除浮动
- 方法:
clear: both;
、overflow: auto;
、::after { content: ""; clear: both; }
。
- BFC触发条件
float
不为none
position
为absolute
/fixed
display
为table-cell
/table-caption
overflow
不为visible
display
属性值
inline
:行内元素block
:块级元素inline-block
:兼具行内和块级特性
- 行内与块级元素差异
- 行内元素:不独占一行,无法设置宽高。
- 块级元素:独占一行,可设置宽高。
四、动画与过渡
- CSS动画 vs 过渡
- 动画(
@animation
):定义复杂的时间轴控制多个属性变化。 - 过渡(
@transition
):针对单个或多个属性的变化效果。
animation
/transition
/transform
区别
animation
:完整的动画序列控制。transition
:单一事件触发的过渡效果。transform
:仅影响元素的位置和形状(不影响布局)。
-
简单动画示例
css@keyframes move { 0% { transform: translateX(0); } 100% { transform: translateX(100px); } } .box { animation: move 2s linear; }
五、样式与兼容性
- 浏览器兼容性策略
- 前缀法:
-webkit-border-radius
- Polyfills:引入库(如
react-app-polyfill
) - 特性检测:Modernizr
- CSS Hack类型
- 条件Hack:
<!--[if IE]>
- 属性Hack:
input{voice-family:+"\x01";}
- 选择符Hack:
*html {}
- IE低版本的
hasLayout
问题
- 触发条件:设置
zoom: 1
或height: 1%
强制触发布局。
- 重置CSS原因及方法
- 原因:消除浏览器默认样式差异。
- 方法:
* { margin: 0; padding: 0; box-sizing: border-box; }
display: none
vsvisibility: hidden
none
:元素完全不可见且不占位。hidden
:元素不可见但仍占位。
- 渐进增强 vs 优雅降级
- 渐进增强:优先基础功能,逐步添加高级特性。
- 优雅降级:先实现完整功能,再兼容旧浏览器。
-
Chrome显示小字
css.small-text { -webkit-font-smoothing: antialiased; font-size: 12px; /* 需设置实际最小值 */ }
六、移动端与适配
- 移动端适配方法
- 视口设置:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
- 媒体查询:
@media (max-width: 768px) { ... }
- REM单位:基于根字体大小动态调整。
- 响应式设计实现
- 使用相对单位(rem/em)、流式布局、弹性盒子/Flexbox/Grid。
七、其他CSS特性
-
CSS变量使用
css:root { --primary-color: #blue; } .button { background-color: var(--primary-color); }
-
CSS3新增属性
transform
(旋转、缩放)animation
(动画控制)opacity
(透明度)perspective
(透视效果)
-
三角形创建
css.triangle { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid red; }
-
CSS Sprites原理 将多个图片合并为一张图,通过
background-position
切换显示区域。 -
@import
缺陷
- 加载顺序慢,影响首屏性能。
- 不支持媒体查询。
- CSS属性简写规则
padding: 10px 20px 30px 40px
(上右下左)margin: auto
(自动居中)
- 可继承属性
color
,font-family
,font-size
,line-height
,text-align
等。
margin
与padding
使用场景
margin
:控制元素与外部的间距。padding
:控制元素内容与边框的间距。
px
vsem
px
:绝对单位,固定尺寸。em
:相对单位,基于父元素字体大小。
- 图片导出格式选择
- PNG-8:透明背景小图
- PNG-24/32:高质量图片
- JPG:压缩率高的照片类图片
- 浏览器内核类型
- Trident(IE)
- Gecko(Firefox)
- WebKit(Chrome/Safari)
- Blink(Chrome 58+)
八、性能与渲染
- 重绘(Repaint)与回流(Reflow)
- 重绘:仅更新元素样式(不影响布局)。
- 回流:元素位置或尺寸变化,触发重新布局。
- 优化:避免频繁修改布局属性(如
width
),使用transform
替代left/top
。
- Div+CSS布局优势
- 结构清晰,易于维护。
- 支持响应式设计。
- 提升搜索引擎SEO友好性。