CSS(四)display和float

display

display 属性用于控制元素的显示类型,用的 display 值包括:

  • block :块级元素

    • 使元素成为块级元素,占据一整行,前后有换行
    • 宽度默认为父容器的 100%,可以设置宽高,支持 marginpaddingborder 等属性
    • 常见的块级元素<div>, <h1> - <h6>, <p>, <form>, <section>, <article>
  • inline:行内元素

    • 行内元素不会占据一整行,它只会占据内容所需的空间,元素之间没有换行。
    • 行内元素的特点是:不支持设置宽度和高度,不能使用 margin-topmargin-bottom
    • 常见的行内元素<span>, <a>, <strong>, <em>
  • inline-block:行内块级元素

    • blockinline 的结合体,它不换行,但可以设置宽度和高度,支持 marginpadding 等。
    • 常见用法:常用来让导航条的列表项水平排列,或者需要在一行中放置多个块元素

例如:

css 复制代码
ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

li {
  display: inline-block;
  margin-right: 10px;
}

以上代码会让导航栏中的 li 元素排成一行

Float

浮动是将元素从正常的文档流中脱离出来,其他元素(比如文本)将围绕其周围排布,通常用于实现网页的布局效果

float 的属性包括

  • left:元素浮动到容器的左侧,其他元素会围绕在其右侧
  • right:元素浮动到容器的右侧,其他元素会围绕在其左侧
  • none:默认值,元素不会浮动,保持在正常文档流中

例如:

css 复制代码
img {
  float: left; /* 将图片浮动到左侧 */
  margin-right: 10px; /* 给图片右侧添加间距 */
}

这段代码让图片浮动到左侧,文字将会围绕着图片排布

父级边框塌陷问题

当使用 float 来布局元素时,浮动的元素脱离了正常的文档流,其他元素会忽略浮动元素的存在,直接排布在它们的旁边

假设有一个浮动的div元素:

html 复制代码
<div class="container">
  <div class="float-item">浮动元素</div>
  <div class="normal-item">普通元素</div>
</div>

其对应的css为:

css 复制代码
.container {
  border: 1px solid #000;
}

.float-item {
  float: left;
  width: 50%;
  background-color: #f0f0f0;
}

.normal-item {
  background-color: #ccc;
}

在这个例子中,float-item 会浮动到容器的左边,而 normal-item 会在其旁边显示。但是,.container 元素不会自动扩展以包含 .float-item,因为 .float-item 脱离了正常的文档流。结果,.container 元素的高度可能为 0,导致外观上看不到边框,这就是父级边框塌陷问题

增加父级元素高度(不建议)

为了解决父级边框塌陷问题,我们可以选择直接为父级元素设置足够的高度,使浮动的子元素能够包含在内。例如直接将父容器设置为height:300px; 但是,这种方法无法动态适应子元素的高度,如果浮动的子元素内容发生变化,则需要手动调整父元素的高度。

使用空div标签

在父容器的最后插入一个空的清除浮动元素 div,并通过 CSS 设置其 clear: both; 来清除浮动。这样可以确保父容器的高度扩展到浮动元素的高度。

clear:清除浮动,可以让块既有浮动的效果,也排成标准文档流的样式

  • right:右侧不允许有浮动
  • left:左侧不允许有浮动
  • both:两侧都不允许有浮动

例如:

html 复制代码
<div id="father">
  <div class="child">浮动元素1</div>
  <div class="child">浮动元素2</div>
  <div class="clear"></div> <!-- 清除浮动 -->
</div>
css 复制代码
.clear {
  clear: both;
  margin: 0;
  padding: 0;
}

这种方法通过插入一个额外的空 div 来清除浮动。缺点是每次都需要手动插入比较麻烦。

使用 overflow 属性

通过在父容器上使用 overflow 属性,可以解决父容器塌陷的问题。设置 overflow 的值为 hiddenauto 会迫使父容器扩展到包含所有浮动子元素的大小,从而避免塌陷。

css 复制代码
#father {
  overflow: hidden;
}

overflow 的值:

  • hidden:溢出的部分会被隐藏。如果容器内的浮动元素超出容器范围,这些部分会被裁剪掉,不显示。
  • scroll:如果容器内的内容超出容器范围,会出现滚动条,用户可以通过滚动查看超出的内容。
  • auto:如果内容超出容器的范围,则会自动显示滚动条。

overflow: hidden; 虽然能够解决父容器塌陷问题,但它会裁剪掉溢出部分的内容。因此,这种方法适用于容器内内容不会超出父容器的场景

使用 ::after 伪类

通过为父容器添加 ::after 伪元素,相当于在父类后面添加了一个宽、高都为0的小块,该小块不允许周围有浮动,逻辑和添加div标签差不多

清除的方法:

css 复制代码
.container::after {
  content: "";
  display: block;
  clear: both;
}
  • content: "":创建一个空的伪元素
  • display: block:确保伪元素是块级元素,能够触发清除浮动的效果。
  • clear: both:清除左右浮动,使得父容器能够包裹所有浮动元素
相关推荐
鑫~阳1 小时前
html + css 淘宝网实战
前端·css·html
Catherinemin1 小时前
CSS|14 z-index
前端·css
2401_882727573 小时前
低代码配置式组态软件-BY组态
前端·后端·物联网·低代码·前端框架
NoneCoder3 小时前
CSS系列(36)-- Containment详解
前端·css
anyup_前端梦工厂3 小时前
初始 ShellJS:一个 Node.js 命令行工具集合
前端·javascript·node.js
5hand3 小时前
Element-ui的使用教程 基于HBuilder X
前端·javascript·vue.js·elementui
GDAL4 小时前
vue3入门教程:ref能否完全替代reactive?
前端·javascript·vue.js
六卿4 小时前
react防止页面崩溃
前端·react.js·前端框架
z千鑫4 小时前
【前端】详解前端三大主流框架:React、Vue与Angular的比较与选择
前端·vue.js·react.js
m0_748256145 小时前
前端 MYTED单篇TED词汇学习功能优化
前端·学习