面试题答案
一键面试选择器优化
- 避免过度嵌套:
- 过度嵌套的选择器会增加计算复杂度。例如,以下代码是过度嵌套的:
body div.container ul li a { color: blue; }
- 应尽量简化,直接选中目标元素:
a { color: blue; }
- 如果需要特定上下文,可适当用类选择器。如:
.product - link { color: blue; }
2. **使用高效选择器**:
- 优先使用类选择器和ID选择器,因为它们性能较高。例如,ID选择器 `#header` 比标签选择器 `header` 性能好,因为ID在文档中是唯一的,浏览器查找更快。
- 避免使用通配符选择器 `*`,除非必要。如 `* { box - sizing: border - box; }` 虽然方便设置全局box - sizing,但会匹配文档中所有元素,影响性能。
### 媒体查询管理
1. **合并相似媒体查询**:
- 如果有多个媒体查询针对相似的屏幕尺寸做类似的样式调整,可合并。例如:
```css
@media (max - width: 768px) {
.product - image {
width: 100%;
}
}
@media (max - width: 768px) {
.product - title {
font - size: 16px;
}
}
- 可合并为:
@media (max - width: 768px) {
.product - image {
width: 100%;
}
.product - title {
font - size: 16px;
}
}
- 优化媒体查询顺序:
- 按照屏幕尺寸从大到小或从小到大的顺序排列媒体查询,保持一致性。例如,从大到小:
@media (min - width: 1200px) { /* 大屏幕样式 */ } @media (min - width: 992px) and (max - width: 1199px) { /* 中等屏幕样式 */ } @media (min - width: 768px) and (max - width: 991px) { /* 小屏幕样式 */ } @media (max - width: 767px) { /* 超小屏幕样式 */ }
动画处理
- 硬件加速动画:
- 使用
transform
和opacity
来创建动画,因为它们可以触发硬件加速。例如,创建一个淡入动画:
- 使用
.fade - in { opacity: 0; animation: fadeIn 1s ease - in - out forwards; } @keyframes fadeIn { to { opacity: 1; } }
- 对于移动动画,使用 `transform: translateX()` 或 `transform: translateY()` 代替 `left` 和 `top` 来改变位置,如:
```css
.slide - in {
transform: translateX(-100%);
animation: slideIn 1s ease - in - out forwards;
}
@keyframes slideIn {
to {
transform: translateX(0);
}
}
- 控制动画性能:
- 避免在性能敏感的元素上使用复杂动画。例如,不要在包含大量商品列表的区域使用逐行动画,因为这会影响滚动性能。
- 限制动画的时长和帧数,过长或帧数过多的动画会消耗更多资源。如将一个动画时长从5s缩短到3s可能对用户体验影响不大,但能提升性能。