面试题答案
一键面试样式管理策略
- 全局样式
- 使用 CSS 预处理器(如 Sass/Less):通过变量、混合宏(Mixin)等功能来统一管理颜色、字体等全局样式变量。例如,在 Sass 中定义全局颜色变量:
$primary - color: #007BFF;
- **建立全局样式文件**:将通用的样式规则,如 body 的字体、颜色,基础的按钮样式等放在一个单独的文件中,在项目入口(如 `index.js`)引入。例如,在 `styles/global.css` 中定义:
body {
font - family: Arial, sans - serif;
color: #333;
}
- 局部样式
- CSS Modules:在 React 组件中使用 CSS Modules,它会自动为每个样式类生成唯一的类名,避免样式冲突。例如,在
Button.module.css
中定义:
- CSS Modules:在 React 组件中使用 CSS Modules,它会自动为每个样式类生成唯一的类名,避免样式冲突。例如,在
.button {
background - color: blue;
color: white;
}
在 React 组件中引入:
import React from'react';
import styles from './Button.module.css';
const Button = () => {
return <button className={styles.button}>Click me</button>;
};
export default Button;
- **Styled Components**:以 JavaScript 方式编写样式,同样可以实现局部作用域。例如:
import React from'react';
import styled from'styled - components';
const StyledButton = styled.button`
background - color: green;
color: white;
`;
const Button = () => {
return <StyledButton>Click me</StyledButton>;
};
export default Button;
避免样式冲突
- 命名规范:采用 BEM(Block - Element - Modifier)命名规范,使类名具有清晰的结构,降低冲突概率。例如:
/* 块 */
.card { }
/* 元素 */
.card__title { }
/* 修饰符 */
.card--highlight { }
- 作用域控制:除了上述 CSS Modules 和 Styled Components 实现局部作用域外,还可以在 HTML 结构上利用 Shadow DOM(虽然目前兼容性有限),为组件创建独立的样式作用域。
样式加载和渲染性能优化
- 代码拆分:对于大型项目,将样式文件按需拆分,避免一次性加载过多样式。例如,使用 Webpack 的动态导入(Dynamic Imports)来加载特定路由或组件的样式。
- 关键 CSS 提取:提取关键路径 CSS(Critical CSS),确保首屏渲染所需的样式优先加载,提高页面加载速度。可以使用工具如 Critical - CSS 来自动提取。
- 优化选择器:避免使用复杂的选择器,如后代选择器(
body div ul li a
),尽量使用简单的类选择器,减少浏览器样式计算的复杂度。 - 媒体查询优化:将媒体查询放在靠近相关样式规则的位置,避免浏览器多次重复计算。例如:
.button {
background - color: blue;
}
@media (max - width: 600px) {
.button {
background - color: green;
}
}
- 避免重排和重绘:尽量避免频繁改变元素的样式,尤其是布局相关的样式。如果需要改变,使用
requestAnimationFrame
等方法批量处理样式更改。