1. display:none 与 visibility:hidden 的区别:
display:none 是不占用空间的,而visbility:hidden是占用空间的。
2.行元素,块元素,行内元素:
通常:如果要转为这些元素:要使用display:block/inline-block/inline
区别:
1. 块元素(Block Elements)
- 定义:块元素是指在页面中占据一整行的元素。
- 特征:
- 常见的块元素包括
<div>
、<p>
、<h1>
到<h6>
、<ul>
、<ol>
、<li>
等。 - 可以设置宽度和高度。
- 默认情况下,块元素会在新的一行开始,并且后面的元素会在新的一行显示。
- 常见的块元素包括
2. 行内元素(Inline Elements)
- 定义:行内元素是指在页面中不占据整行的元素。
- 特征:
- 默认情况下,行内元素不会导致换行,它们会在同一行中与其他行内元素并排显示。
- 不能设置宽度和高度(其宽度和高度由内容决定)。
- 常见的行内元素包括
<span>
、<a>
、<strong>
、<em>
、<img>
等。
3. 行内块元素(Inline-Block Elements)
- 定义:行内块元素结合了行内元素和块元素的特性。
- 特征:
- 行内块元素可以在同一行中并排显示,但可以设置宽度和高度。
- 允许上下边距(margin)和内边距(padding)影响布局。
- 常见的行内块元素包括使用
display: inline-block;
的元素。
3. 选择器的优先级(Specificity)
什么是 CSS 选择器的优先级? 选择器的优先级是指在多个选择器匹配同一元素时,决定哪个样式生效的规则。优先级越高的选择器,其样式越优先应用。
如何计算选择器的优先级? 优先级的计算规则如下:
计算时,将每种选择器的得分加总,得分高的选择器优先级高。
- 内联样式(如
style
属性)优先级最高,得分为 1000。 - ID 选择器,得分为 100。
- 类选择器、伪类和属性选择器,得分为 10。
- 元素选择器和伪元素,得分为 1。
- 内联样式(如
在以下情况下,哪个样式会生效?解释原因:
.class1 { color: red; } #id1 { color: blue; } div { color: green; }
答:
#id1
的样式会生效,因为它的优先级最高(得分为 100),而.class1
的得分为 10,div
的得分为 1。
4. 盒模型(Box Model)
什么是 CSS 盒模型? CSS 盒模型是指浏览器将每个元素视为一个矩形盒子,并通过内容区、内边距、边框和外边距来定义元素的大小和位置。
如何使用
box-sizing
属性?box-sizing
属性用于控制盒模型的计算方式。常用的值有:content-box
(默认值):宽度和高度只包括内容区域。border-box
:宽度和高度包括内容、内边距和边框。
解释标准盒模型和替代盒模型的区别。
- 标准盒模型(content-box):元素的宽度和高度只包括内容,不包括内边距和边框。
- 替代盒模型(border-box):元素的宽度和高度包括内容、内边距和边框,便于更容易控制元素的实际大小。
5. 布局(Flexbox 和 Grid)
Flexbox 和 Grid 的主要区别是什么?
- Flexbox 是一维布局(可以是水平或垂直),适合处理单行或单列的布局。
- Grid 是二维布局,适合处理复杂的行和列布局。
你如何使用 Flexbox 创建一个水平居中的元素? 可以使用以下 CSS:
.container { display: flex; justify-content: center; /* 水平居中 */ }
描述 Grid 布局的基本概念,并给出一个简单的示例。 Grid 布局通过定义行和列的网格来布局元素。基本概念包括
grid-template-rows
和grid-template-columns
。
.container { display: grid; grid-template-columns: repeat(3, 1fr); /* 三列等宽 */ }
6. 响应式设计
什么是响应式设计? 响应式设计是一种网页设计方法,旨在使网页在不同设备(如手机、平板、桌面)上都有良好的显示效果和用户体验。
如何使用媒体查询实现响应式布局? 媒体查询通过指定条件(如屏幕宽度)来应用不同的 CSS 样式。例如:
@media (max-width: 600px) { .container { flex-direction: column; /* 小屏幕时垂直布局 */ } }
解释视口(viewport)在响应式设计中的重要性。 视口是浏览器中显示网页内容的区域。在响应式设计中,使用
<meta name="viewport" content="width=device-width, initial-scale=1.0">
可以确保页面在不同设备上按比例缩放和适配。
7. 过渡和动画
CSS 过渡和动画有什么区别?
- CSS 过渡是指在样式变化时的平滑过渡效果,通常用于简单的状态变化。
- CSS 动画则是通过关键帧定义的,可以实现更复杂的动画效果。
如何创建一个简单的 CSS 动画? 使用
@keyframes
定义动画,然后在元素上应用。例如:@keyframes example { from { background-color: red; } to { background-color: yellow; } } .animated { animation: example 2s infinite; /* 2秒无限循环 */ }
解释
transition
和animation
属性的使用。transition
属性用于定义过渡效果的持续时间、延迟和速度曲线,例如:.box { transition: background-color 0.5s ease; }
animation
属性用于定义动画的名称、持续时间、次数等,例如:
8. 伪类和伪元素
什么是伪类和伪元素?给出示例。
- 伪类用于选择元素的特定状态,如
:hover
、:focus
。 - 伪元素用于选择元素的一部分,如
::before
、::after
。 示例:
- 伪类用于选择元素的特定状态,如
a:hover { color: blue; /* 伪类 */ } p::before { content: "前缀"; /* 伪元素 */ }
:nth-child()
选择器是如何工作的?:nth-child(n)
选择器用于选择父元素下的第 n 个子元素,可以使用数字、关键词(如 odd/even)或公式(如 2n)来选择特定的元素。你如何使用
::before
和::after
创建内容? 使用content
属性可以在元素前后插入内容。例如:.element::before { content: "开始 - "; } .element::after { content: " - 结束"; }
9. 清除浮动
为什么需要清除浮动?
当使用浮动布局时,父元素的高度可能会被子元素的浮动影响,导致父元素高度为 0。清除浮动可以确保父元素正确包裹浮动的子元素。
你如何清除浮动?请提供几种方法。
- 使用
overflow: auto;
或overflow: hidden;
属性。 - 使用 clearfix 方法:
.clearfix::after { content: ""; display: table; clear: both; }
- 在浮动元素后插入一个清除浮动的元素:
<div style="clear: both;"></div>
- 使用
10. 性能和最佳实践
如何优化 CSS 文件的加载性能?
- 合并多个 CSS 文件为一个文件,减少 HTTP 请求。
- 使用 CSS 预处理器(如 SASS、LESS)来组织代码。
- 使用压缩工具(如 CSSNano)来减小文件大小。
- 在
<head>
中加载 CSS 文件,确保样式在渲染之前加载。
你如何组织 CSS 代码以提高可维护性?
- 使用命名约定(如 BEM)来命名类。
- 将样式模块化,按功能或组件划分文件。
- 使用注释和文档来解释复杂的样式。
- 采用 CSS 预处理器来提高代码的可读性和可维护性。