《前端面试题:CSS的display属性》
CSS display属性完全指南:深入理解布局核心属性
掌握display属性是CSS布局的基石,也是前端面试必考知识点
一、display属性概述:布局的核心控制
display属性是CSS中最重要、最基础的属性之一,它决定了元素在页面上的渲染方式和布局行为。理解display属性是掌握CSS布局的关键所在。
display属性的重要性:
- 控制元素渲染类型:块级、行内、表格等
- 影响元素布局行为:如何参与文档流
- 决定元素之间的关系:如何与兄弟元素互动
- 启用现代布局模型:Flexbox、Grid等
二、display属性值详解
1. 基础值:控制元素基本类型
none
- 隐藏元素
.hidden-element {display: none;
}
特点:
- 元素完全消失,不占据空间
- 无法通过点击事件触发
- 与
visibility: hidden
区别:后者隐藏但仍占据空间
block
- 块级元素
.block-element {display: block;
}
特点:
- 独占一行(前后换行)
- 可设置宽高、内外边距
- 默认宽度100%
- 典型元素:
<div>
、<p>
、<h1>
-<h6>
inline
- 行内元素
.inline-element {display: inline;
}
特点:
- 与其他行内元素共享一行
- 不可设置宽高
- 内外边距水平有效、垂直无效
- 典型元素:
<span>
、<a>
、<strong>
inline-block
- 行内块元素
.inline-block-element {display: inline-block;width: 100px;height: 100px;
}
特点:
- 行为像行内元素(共享一行)
- 可设置宽高和所有边距
- 不会自动换行
- 典型应用:水平导航菜单项
2. 现代布局值:实现复杂布局
flex
- 弹性盒布局
.flex-container {display: flex;justify-content: center;align-items: center;
}
特点:
- 创建弹性容器
- 子元素成为弹性项目
- 实现一维布局(行或列)
- 完美解决居中问题
grid
- 网格布局
.grid-container {display: grid;grid-template-columns: 1fr 1fr 1fr;gap: 20px;
}
特点:
- 创建网格容器
- 实现二维布局(行列同时控制)
- 强大的网格系统
- 精确控制项目位置
inline-flex
- 行内弹性容器
.inline-flex-container {display: inline-flex;
}
特点:
- 行为类似行内元素
- 内部使用flex布局
- 不会自动换行
inline-grid
- 行内网格容器
.inline-grid-container {display: inline-grid;
}
特点:
- 行为类似行内元素
- 内部使用grid布局
- 不会自动换行
3. 表格相关值:模拟表格结构
table
- 块级表格
.table-container {display: table;width: 100%;
}
特点:
- 模拟
<table>
元素 - 需要配合其他表格属性使用
table-row
- 表格行
.table-row {display: table-row;
}
table-cell
- 表格单元格
.table-cell {display: table-cell;padding: 10px;vertical-align: middle;
}
特点:
- 垂直居中简单实现
- 等高列布局解决方案
table-caption
- 表格标题
.caption {display: table-caption;caption-side: bottom;
}
4. 特殊用途值
list-item
- 列表项
.custom-list-item {display: list-item;list-style-type: square;margin-left: 20px;
}
特点:
- 显示为列表项
- 添加标记点(bullet)
- 典型元素:
<li>
contents
- 内容容器
.container {display: contents;
}
特点:
- 元素自身不渲染
- 子元素提升到父级层级
- 解决嵌套布局问题
flow-root
- 创建BFC
.bfc-container {display: flow-root;
}
特点:
- 创建新的块级格式化上下文(BFC)
- 解决浮动元素导致的高度塌陷
- 现代清除浮动方案
run-in
- 动态元素(实验性)
.run-in-heading {display: run-in;
}
特点:
- 根据上下文决定显示为块级或行内
- 兼容性有限(基本不支持)
三、display属性行为对比表
属性值 | 宽度设置 | 高度设置 | 换行行为 | 典型应用 |
---|---|---|---|---|
none | - | - | 完全移除 | 隐藏元素 |
block | ✅ | ✅ | 独占一行 | 容器、段落 |
inline | ❌ | ❌ | 同行显示 | 文本修饰 |
inline-block | ✅ | ✅ | 同行显示 | 图标、按钮 |
flex | ✅ | ✅ | 弹性布局 | 复杂组件 |
grid | ✅ | ✅ | 网格布局 | 整体页面 |
table | ✅ | ✅ | 表格行为 | 表格布局 |
table-cell | ✅ | ✅ | 同行显示 | 等高列 |
list-item | ✅ | ✅ | 独占一行 | 列表项 |
contents | - | - | 移除自身 | 布局优化 |
四、display常见面试题解析
1. display: none 和 visibility: hidden 的区别?
答案:
display: none
:元素完全移除,不占据空间,无法交互visibility: hidden
:元素隐藏但仍占据空间,无法交互- 两者都会隐藏内容,但布局影响不同
2. 如何实现元素水平垂直居中?
解决方案:
/* 方法1:Flexbox */
.center-flex {display: flex;justify-content: center;align-items: center;
}/* 方法2:Grid */
.center-grid {display: grid;place-items: center;
}/* 方法3:绝对定位 */
.center-absolute {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);
}
3. 如何清除浮动?
解决方案:
/* 现代方法 */
.clearfix {display: flow-root;
}/* 传统方法 */
.clearfix::after {content: "";display: table;clear: both;
}
4. inline-block元素间的间隙如何处理?
解决方案:
.container {font-size: 0; /* 消除空格字符影响 */
}.item {display: inline-block;font-size: 16px; /* 重置字体大小 */margin-right: -4px; /* 消除间隙 */
}/* 推荐方法:使用Flexbox */
.container {display: flex;
}
5. display: contents 的使用场景?
答案:当需要移除容器元素自身的渲染框,但保留其子元素的渲染时使用。典型场景:
- 网格布局中移除不必要的容器
- 解决flex/grid容器嵌套问题
- 语义化标记不影响布局结构
6. 如何实现响应式显示切换?
.mobile-menu {display: none;
}/* 移动端显示菜单 */
@media (max-width: 768px) {.desktop-nav {display: none;}.mobile-menu {display: block;}
}
五、display属性实战应用
1. 响应式导航栏
<nav class="navbar"><div class="logo">Logo</div><ul class="nav-menu"><li>首页</li><li>产品</li><li>关于</li></ul><button class="menu-toggle">☰</button>
</nav>
.navbar {display: flex;justify-content: space-between;align-items: center;
}.nav-menu {display: flex;gap: 20px;list-style: none;
}.menu-toggle {display: none;
}@media (max-width: 768px) {.nav-menu {display: none; /* 移动端隐藏菜单 */}.menu-toggle {display: block; /* 显示汉堡按钮 */}
}
2. 等高卡片布局
.card-container {display: table;width: 100%;table-layout: fixed;border-spacing: 20px;
}.card {display: table-cell;padding: 20px;background: #fff;box-shadow: 0 2px 10px rgba(0,0,0,0.1);vertical-align: top; /* 顶部对齐 */
}
3. 复杂表单布局
.form-group {display: grid;grid-template-columns: 1fr 2fr;gap: 15px;margin-bottom: 20px;
}label {display: flex;align-items: center;justify-content: flex-end;
}input, select {display: block;width: 100%;
}
4. 瀑布流布局
.masonry {display: grid;grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));grid-auto-rows: minmax(100px, auto);gap: 20px;
}
六、display属性最佳实践
1. 选择合适的布局模型
- 简单线性布局:Flexbox
- 复杂二维布局:Grid
- 传统布局:inline-block + float
- 表格数据:table系列值
2. 避免过度使用display
/* 不推荐:深层嵌套 */
.container > div {display: flex;
}.container > div > div {display: flex;
}/* 推荐:简化结构 */
.container {display: grid;grid-template-columns: 1fr 1fr;
}
3. 结合现代CSS特性
/* 使用CSS变量 */
:root {--display-mode: flex;
}.container {display: var(--display-mode);
}/* 使用特性查询 */
@supports (display: grid) {.container {display: grid;}
}
4. 性能优化建议
- 避免频繁切换display属性(尤其在动画中)
- 使用
contain: layout
优化布局性能 - 减少布局嵌套层次
- 优先使用现代布局(Flexbox/Grid)
七、display与浏览器渲染流程
渲染流程中的display作用:
- DOM构建:解析HTML创建DOM树
- CSS解析:计算样式规则
- 布局计算:
- 根据display确定布局模型
- 计算元素尺寸和位置
- 绘制:将元素绘制到屏幕上
- 合成:组合各层最终显示
布局重排优化:
// 错误做法:多次读写导致重排
const element = document.getElementById('box');
element.style.display = 'none';
element.style.height = '200px';
element.style.display = 'block';// 正确做法:批量操作
element.style.cssText = 'display: none; height: 200px;';
// 或使用requestAnimationFrame
requestAnimationFrame(() => {element.style.display = 'block';
});
八、display的未来发展
1. subgrid
.grid-container {display: grid;grid-template-columns: 1fr 1fr;
}.grid-item {display: grid;grid-template-columns: subgrid; /* 继承父网格 */
}
2. display: contents 增强
.component {display: contents;
}.component > * {grid-column: 1 / -1; /* 子元素跨越整个网格 */
}
3. 逻辑属性支持
.container {display: inline-flex;flex-direction: column;writing-mode: vertical-lr; /* 垂直布局 */
}
总结:display属性核心要点
-
基础值:
block
:块级元素inline
:行内元素inline-block
:行内块元素none
:隐藏元素
-
现代布局值:
flex
:弹性盒布局grid
:网格布局inline-flex
:行内弹性容器inline-grid
:行内网格容器
-
表格相关值:
table
:表格容器table-cell
:表格单元格- 解决垂直居中和等高列问题
-
特殊用途值:
contents
:移除容器保留内容flow-root
:创建BFClist-item
:列表项
布局选择策略:
- 整体页面布局 → Grid
- 组件内部布局 → Flexbox
- 文本内容布局 → inline/inline-block
- 传统布局需求 → float/table
掌握display属性,你将能够:
- 精确控制元素布局行为
- 灵活选择最佳布局方案
- 高效解决常见布局难题
- 优化提升页面渲染性能
记住:没有最好的display值,只有最适合当前场景的选择。理解每个值的特性和适用场景,才能创建出既美观又高效的布局。
相关文章:
《前端面试题:CSS的display属性》
CSS display属性完全指南:深入理解布局核心属性 掌握display属性是CSS布局的基石,也是前端面试必考知识点 一、display属性概述:布局的核心控制 display属性是CSS中最重要、最基础的属性之一,它决定了元素在页面上的渲染方式和布…...

飞牛使用Docker部署Tailscale 内网穿透教程
之前发过使用docker部署Tailscale的教程,不过是一年前的事情了,今天再重新发表一遍,这次使用compose部署更加方便,教程也会更加详细一点,希望对有需要的朋友有所帮助! 对于大部分用户来说,白嫖 …...

《数据挖掘》- 房价数据分析
这里写目录标题 采用的技术1. Python编程语言2. 网络爬虫库技术点对比与区别项目技术栈的协同工作流程 代码解析1. 导入头文件2. 读取原始数据3. 清洗数据4. 数据分割4.1 统计房屋信息的分段数量4.2 将房屋信息拆分为独立列4.3 处理面积字段4.4 删除原始房屋信息列 5. 可视化分…...
centos中的ulimit命令
centos中的ulimit命令 ulimit的作用CENTOS系统文件配置配置文件地址配置格式 配置方法 ulimit的作用 ulimit用于限制shell启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell进程创建文件的大小、内存锁住的…...
git提交代码和解决冲突修复bug
提交到分支的步骤如下: 确保你当前在开发分支上,可以使用命令 git branch 来查看当前所在分支,并使用 git checkout 命令切换到开发分支。使用 git add 命令将修改的文件添加到暂存区。使用 git commit 命令提交代码到本地仓库。 解决合并冲…...
华为仓颉语言初识:并发编程之同步机制(上)
前言 线程同步机制是多线程下解决线程对共享资源竞争的主要方式,华为仓颉语言提供了三种常见的同步机制用来保证线程同步安全,分别是原子操作,互斥锁和条件变量。本篇文章详细介绍主要仓颉语言解决同步机制的方法,建议点赞收藏&a…...
php中实现邮件发送功能
要在php项目中实现邮件发送功能,推荐使用phpmailer库通过smtp协议配置。首先安装phpmailer扩展,可通过composer命令composer require phpmailer/phpmailer安装;若未使用composer则手动引入源码。接着配置smtp信息,包括服务器地址&…...

C++之动态数组vector
Vector 一、什么是 std::vector?二、std::vector 的基本特性(一)动态扩展(二)随机访问(三)内存管理 三、std::vector 的基本操作(一)定义和初始化(二…...
arc3.2语言sort的时候报错:(sort < `(2 9 3 7 5 1)) 需要写成这种:(sort > (pair (list 3 2)))
arc语言sort的时候报错:(sort < (2 9 3 7 5 1)) arc> (sort < (2 9 3 7 5 1)) Error: "set-car!: expected argument of type <pair>; given: 9609216" arc> (sort < (2 9 3 )) Error: "Function call on inappropriate object…...
Android动态广播注册收发原理
一、动态广播的注册流程 1. 注册方式 动态广播通过代码调用 Context.registerReceiver() 方法实现,需显式指定 IntentFilter 和接收器实例: // 示例:在 Activity 中注册监听网络变化的广播 IntentFilter filter new IntentFilter…...
Ubuntu 系统通过防火墙管控 Docker 容器
Ubuntu 系统通过防火墙管控 Docker 容器指南 一、基础防火墙配置 # 启用防火墙 sudo ufw enable# 允许 SSH 连接(防止配置过程中断联) sudo ufw allow 22/tcp二、Docker 配置调整 # 编辑 Docker 配置文件 sudo vim /etc/docker/daemon.json配置文件内…...
AI 模型分类全解:特性与选择指南
人工智能(AI)技术正以前所未有的速度改变着我们的生活和工作方式。AI 模型作为实现人工智能的核心组件,种类繁多,功能各异。从简单的线性回归模型到复杂的深度学习网络,从文本生成到图像识别,AI 模型的应用…...

【Zephyr 系列 11】使用 NVS 实现 BLE 参数持久化:掉电不丢配置,开机自动加载
🧠关键词:Zephyr、NVS、非易失存储、掉电保持、Flash、AT命令保存、配置管理 📌目标读者:希望在 BLE 模块中实现掉电不丢配置、支持产测参数注入与自动加载功能的开发者 📊文章长度:约 5200 字 🔍 为什么要使用 NVS? 在实际产品中,我们经常面临以下场景: 用户或…...

【Android】Android Studio项目代码异常错乱问题处理(2020.3版本)
问题 项目打开之后,发现项目文件直接乱码, 这样子的 这本来是个Java文件,结果一打开变成了这种情况,跟见鬼一样,而且还不是这一个文件这样,基本上一个项目里面一大半都是这样的问题。 处理方法 此时遇到…...
n皇后问题的 C++ 回溯算法教学攻略
一、问题描述 n皇后问题是经典的回溯算法问题。给定一个 nn 的棋盘,要求在棋盘上放置 n 个皇后,使得任何两个皇后之间不能互相攻击。皇后可以攻击同一行、同一列以及同一对角线上的棋子。我们需要找出所有的合法放置方案并输出方案数。 二、输入输出形…...

一些免费的大A数据接口库
文章目录 一、Python开源库(适合开发者)1. AkShare2. Tushare3. Baostock 二、公开API接口(适合快速调用)1. 新浪财经API2. 腾讯证券接口3. 雅虎财经API 三、第三方数据平台(含免费额度)1. 必盈数据2. 聚合…...
DeepSeek本地部署及WebUI可视化教程
前言 DeepSeek是近年来备受关注的大模型之一,支持多种推理和微调场景。很多开发者希望在本地部署DeepSeek模型,并通过WebUI进行可视化交互。本文将详细介绍如何在本地环境下部署DeepSeek,并实现WebUI可视化,包括Ollama和CherryStudio的使用方法。 一、环境准备 1. 硬件要…...
机器学习算法时间复杂度解析:为什么它如此重要?
时间复杂度的重要性 虽然scikit-learn等库让机器学习算法的实现变得异常简单(通常只需2-3行代码),但这种便利性往往导致使用者忽视两个关键方面: 算法核心原理的理解缺失 忽视算法的数据适用条件 典型算法的时间复杂度陷阱 SV…...

SSIM、PSNR、LPIPS、MUSIQ、NRQM、NIQE 六个图像质量评估指标
评价指标 1. SSIM(Structural Similarity Index) 📌 定义 结构相似性指数(Structural Similarality Index)是一种衡量两幅图像相似性的指标,考虑了亮度、对比度和结构信息的相似性,比传统的 P…...

【笔记】旧版MSYS2 环境中 Rust 升级问题及解决过程
下面是一份针对在旧版 MSYS2(安装在 D 盘)中,基于 Python 3.11 的 Poetry 虚拟环境下升级 Rust 的处理过程笔记(适用于 WIN 系统 SUNA 人工智能代理开源项目部署要求)的记录。 MSYS2 旧版环境中 Rust 升级问题及解决过…...
centos查看开启关闭防火墙状态
执行:systemctl status firewalld ,即可查看防火墙状态 防火墙的开启、关闭、禁用命令 (1)设置开机启用防火墙:systemctl enable firewalld.service (2)设置开机禁用防火墙:system…...
[论文阅读] 人工智能 | 大语言模型计划生成的新范式:基于过程挖掘的技能学习
#论文阅读# 大语言模型计划生成的新范式:基于过程挖掘的技能学习 论文信息 Skill Learning Using Process Mining for Large Language Model Plan Generation Andrei Cosmin Redis, Mohammadreza Fani Sani, Bahram Zarrin, Andrea Burattin Cite as: arXiv:2410.…...
MS31912TEA 多通道半桥驱动器 氛围灯 照明灯 示宽灯 转向灯驱动 后视镜方向调节 可替代DRV8912
MS31912TEA 多通道半桥驱动器 氛围灯 照明灯 示宽灯 转向灯驱动 后视镜方向调节 可替代DRV8912 产品简述 MS31912 是集成多种高级诊断功能的多通道半桥驱动。 MS31912 具有 12 个半桥,典型工作电压 13.5V 下,每一个半桥支持 1A 电流,典型工…...
软考 系统架构设计师系列知识点之杂项集萃(84)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(83) 第151题 在软件系统工具中,版本控制工具属于(),软件评价工具属于()。 第1空 A. 软件开发工具 B. 软件维…...

矩阵QR分解
1 orthonormal 向量与 Orthogonal 矩阵 orthonormal 向量定义为 ,任意向量 相互垂直,且模长为1; 如果将 orthonormal 向量按列组织成矩阵,矩阵为 Orthogonal 矩阵,满足如下性质: ; 当为方阵时&…...
UDP与TCP的区别是什么?
UDP和TCP是互联网通信中最常用的两种传输层协议,它们在数据传输方式、可靠性、速度和适用场景等方面存在显著差异。本文将围绕UDP与TCP的核心区别展开详细分析,包括连接方式、数据传输机制、传输效率以及各自适合的应用场景,帮助开发者和网络…...
撰写脚本,通过发布/joint_states话题改变机器人在Rviz中的关节角度
撰写脚本,通过发布/joint_states话题改变机器人在Rviz中的关节角度 提问 为我写一个改变关节base_spherical_center_high_joint角度的python脚本吧。适用于ROS2的humble 回答 下面是一个适用于 ROS 2 Humble 的 Python 脚本,它会以指定频率持续发布 …...
AOP实现Restful接口操作日志入表方案
文章目录 前言一、基础资源配置1.操作日志基本表[base_operation_log] 见附录1。2.操作日志扩展表[base_operation_log_ext] 见附录2。3.定义接口操作系统日志DTO:OptLogDTO4.定义操作日志注解类WebLog5.定义操作日志Aspect切面类SysLogAspect6.定义异步监听日志事件…...

【MATLAB去噪算法】基于CEEMDAN联合小波阈值去噪算法(第四期)
CEEMDAN联合小波阈值去噪算法相关文献 一、EMD 与 EEMD 的局限性 (1)EMD (经验模态分解) 旨在自适应地将非线性、非平稳信号分解成一系列 本征模态函数 (IMFs),这些 IMFs 从高频到低频排列。 核心问题:模态混合 (Mode Mixing) 同…...
Webhook 配置备忘
本文地址:blog.lucien.ink/archives/552 将下列代码保存为 install.sh,然后 bash install.sh。 #!/usr/bin/env bash set -e wget https://github.mirrors.lucien.ink/https://github.com/adnanh/webhook/releases/download/2.8.2/webhook-linux-amd64.…...