CSS Display 属性全解析:从基础布局到高级技巧
liuian 2025-02-03 13:58 37 浏览
最近在 Web 开发中,你是否经常为布局问题而苦恼?div元素总是独占一行,span 元素却无法设置宽高,这些都是 display 属性在背后默默控制着。display 是 CSS 中最基础也是最重要的属性之一,它决定了元素的显示类型,从而直接影响其在页面上的呈现方式。今天,我们就来深入剖析 display 的各种取值,带你彻底掌握 Web 布局的底层逻辑。
基础布局:block、inline和inline-block
首先,我们来看三个最常用的 display 值:block、inline 和 inline-block。
- block (块级元素):
- 元素独占一行,前后都会换行。
- 可以设置元素的 width 和 height。
- 常见的块级元素有 <div>、<p>、<h1> - <h6>、<header>、<footer> 等。
<div >This is a block-level element.</div>
<span>This is span.</span>div {
border: 2px solid red;
}
span {
border: 2px solid green;
}
- 在上面的代码中,<div> 会独占一行,并且可以设置宽高。而 <span> 则不会独占一行,也不能直接设置宽高。在上面的代码中,<div> 会独占一行,并且可以设置宽高。而 <span> 则不会独占一行,也不能直接设置宽高。
- inline (行内元素):
- 元素不会独占一行,与其他行内元素并排显示。
- 元素的 width 和 height 由内容决定,无法手动设置。
- 常见的行内元素有 <span>、<a>、<img>等。
<span>This is a span inline element.</span>
<a>Hyperlink inline element.</a>
<section>This is not a default inline element.</section>span {
border: 2px solid green;
}
a {
border: 2px solid red;
}
section {
border: 2px solid blue;
}- <span> 和 <a> 等元素会并排显示,它们的宽高由内容决定。section 标签默认不是 inline 元素,这里只是为了演示 inline 元素的特点。
- inline-block (行内块级元素):
- 结合了 block 和 inline 的特性,元素可以像行内元素一样并排显示,同时又可以设置元素的 width 和 height。
<div>This is a default block-level element.</div>
<span>Default inline element which is set to inline-block.</span> div {
border: 2px solid red;
}
span {
border: 2px solid green;
height: 200px;
display: inline-block;
}
- 通过设置 display: inline-block;,<span> 元素既可以设置宽高,又可以和其他元素并排显示。
进阶布局:flex和grid
如果说 block、inline 和 inline-block 是 CSS 布局的基础,那么 flex 和 grid 就是现代 Web 布局的利器。它们能够帮助我们构建更加灵活和复杂的布局结构。
- flex (弹性布局):
- 通过设置 display: flex 将容器设置为 flex 容器,容器内的元素成为 flex 项目。
- 通过 flex 属性,可以轻松实现元素的对齐、排序和空间分配。
- 适用于一维布局,如导航栏、列表项等。
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
</div>.container {
display: flex;
border: 2px solid black;
}
.item {
height: 100px;
width: 100px;
border: 1px solid green;
margin: 10px;
}- 在这个例子中,.container 被设置为 flex 容器,内部的三个 .item 会并排显示,并且可以通过 flex 属性进行进一步的布局控制。
- inline-flex (行内弹性布局):
- 与 flex 类似,但容器本身表现为行内元素。
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
</div> .container {
display: inline-flex;
border: 2px solid black;
}
.item {
height: 100px;
width: 100px;
border: 1px solid green;
margin: 10px;
}- 和 flex 类似,但容器 .container 本身表现为一个行内元素
- grid (网格布局):
- 通过设置 display: grid 将容器设置为网格容器,容器内的元素成为网格项目。
- 可以使用 grid-template-rows 和 grid-template-columns 定义网格的行和列。
- 适用于二维布局,如复杂的页面布局、卡片式布局等。
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
</div> .container {
display: grid;
border: 2px solid black;
}
.item {
border: 1px solid green;
margin: 10px;
padding: 10px;
}- 通过定义网格的行和列,可以实现更加精准和复杂的布局。
- inline-grid (行内网格布局):
- 与 grid 类似,但容器本身表现为行内元素。
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
</div> .container {
display: inline-grid;
border: 2px solid black;
}
.item {
border: 1px solid green;
margin: 10px;
padding: 10px;
}- 和 grid 类似,但容器 .container 本身表现为一个行内元素
特殊值:none、inherit和initial
除了常见的布局值,display 还有一些特殊的取值:
- none:
- 元素将完全从页面中移除,不会占据任何空间,也不会被渲染。
- 常用于隐藏元素,或者实现复杂的动画效果。
<p>This element is not hidden.</p>
<div>This element is hidden.</div>
<p>This element is not hidden.</p>div {
display: none;
height: 200px;
}
p {
border: 2px solid green;
}- <div> 元素被设置为 display: none 后,将不会在页面上显示,并且不会占据任何空间。
- inherit:
- 元素将继承父元素的 display 值。
- 常用于特殊布局需求。
<div>
<span>This will inherit the display value from its parent.</span>
</div> span {
display: inherit;
border: 2px solid green;
padding: 10px;
}- <span> 元素的 display 值会继承父元素 <div>的值,这里会表现为块级元素。
- initial:
- 元素将恢复为 display 属性的初始值。
- 通常情况下,大部分元素的初始值是 inline。
<div>
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Saepe, a?
</div> div {
display: initial;
border: 1px solid green;
}
- <div> 元素的 display 值被重置为初始值 inline。
总结与思考
display 属性是 CSS 布局的基础,掌握它能够帮助我们构建灵活、响应式的 Web 页面。从基础的 block、inline、inline-block,到强大的 flex 和 grid,每种取值都有其适用的场景。通过理解它们的工作原理,我们就能更加自如地控制元素的布局,实现各种复杂的视觉效果。
现在,请思考一下,在你的项目中,你是否合理地使用了 display 属性?是否可以利用 flex 或 grid 来优化现有布局?希望这篇文章能帮助你更深入地理解 display 属性,并在实际开发中灵活运用。
相关推荐
- 手机u盘驱动器下载(手机u盘驱动器下载安装)
-
不能直接手机下载到u盘,可以下到手机,然后手机连电脑copy到u盘你只需把你心爱的U盘插到电脑上,然后它会有一个新硬安装向导当它要搜索驱动程序时,你只需将其浏览到你所下载的usb万能驱动文件夹点下...
- 旺旺下载app(旺旺下载链接是多少)
-
可以下载多换几个下载软件试试直接登录官方appstore里面下载就可以使用了。1、首先在手机中找到appstore。2、点击进入后,在上方的搜索条里输入“阿里旺旺”,选中官方的阿里旺旺。3、点击进...
- 主机显卡在哪个位置(主机显卡在哪个位置看)
-
1、集成显卡的位置一般在机箱后面的中部,插口是竖立的。独立显卡的位置一般在机箱后面的下部,插口是横平的。2、独立显卡,一般插在主板中部的插槽,用手可以直接拔出。如果分不清哪个是显卡的插口,就直接看显示...
- windows7ultimate下载(windows7 ultimate)
-
要下载澪Ultimate启动器,您可以按照以下步骤进行操作:1.打开您的网络浏览器,访问澪Ultimate启动器的官方网站或相关下载页面。2.在网站上找到适用于您的操作系统的下载选项。3.点击下...
- 苹果首次激活时间查询(iphone激活查询官网入口)
-
登陆苹果官网输入手机的序列号,查看手机的保修日期就可以了,一般保修到期的前一年就是手机的开机激活时间。查看第一次开机激活时间操作方法:1、首先打开设置2、点击通用3、点击关于本机...
- u盘启动哪个好用(u盘启动盘哪个最好)
-
大白菜超级U盘启动盘制作工具,打造你真正的万能U盘!安装后你在U盘里是看到什么文件的,是隐藏分区,这样你放存别的东西时也不会搞乱了。大白菜超级U盘启动盘制作工具,是纯傻瓜式制作U盘启动盘功能的超级万能...
- 腾达路由器高级设置在哪里(腾达路由器怎么设置安全性高)
-
方法/步骤分步阅读1/11打开新购的腾达路由器,查看路由器背面的默认IP和管理员密码。小提示:密码为:admin默认管理IP:192.168.0.12/11接好腾达路由器和插上电源通电,等待2-3分钟...
- dell新版bios设置恢复(戴尔bios恢复设置)
-
1)、开机后,在看到DELL图标时,按3下F2,进入BIOS。(灰色界面)2)、分别按键盘上的CapsLock,ScrollLock,以及NumLock三个键,使键盘上相应的三个指示灯点亮。3)、...
- 重装win7系统需要多少钱(重装一个win7系统要多少钱)
-
1、win7系统装完后需要占用C盘空间10-15GB,如果把常用软件也安装到C盘,大小超过20+。 2、在分区的时候根据硬盘大小,如果硬盘相对较小,一般建议设置50G,最低不能低于30G。因...
- 性价比笔记本推荐2025(性价比高的笔记本电脑2021年)
-
2023年联想推出的一款性价比高的笔记本电脑是联想Yoga7Carbon。它是一款轻薄便携的2合1笔记本,采用了高强度碳纤维材质打造,具有出色的抗撞击性和高端外观。配备了英特尔第11代酷睿处理器、...
- 华为和联想平板哪个好(华为平板和联想平板对比)
-
联想,是典型的组装厂,CPU不能造,屏幕不能造.而华为,拥有核心技术,大量有价值专利的,比如说:华为mediapad平板电脑小巧轻薄,7英寸便携机身让她成为出行必备,新推出的粉红炫彩版更集美貌与智慧于...
- win10休眠文件有必要删除吗(win10休眠文件有必要删除吗)
-
休眠文件的功能是保存当前内存中的所有数据至硬盘后关闭电源,电脑再次开启时还能够很快恢复到关机前的状态。通过保留存储,将留出一些磁盘空间以供更新、应用程序、临时文件和系统缓存使用。目标是通过确保关键的操...
- win10内核版本升级(win10 内核版本)
-
手机系统内核是Linux,linux内核是靠升级系统版本来升级内核的。升级方法:1、使用手机自带的系统更新功能:在安卓手机的设置--关于手机中,可以看到当前安卓手机的系统版本,另外这里也有自动检测更新...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
