什么是BFC? CSS 使用伪元素清除浮动的方法

BFC(Block Formatting Context,块级格式化上下文)是 CSS 中的一个概念。它是一个独立的渲染区域,拥有自己的渲染规则。在一个 BFC 中,所有的元素按照一定的规则进行排布,这些规则可以帮助我们解决很多常见的页面布局问题。以下是BFC的相关属性和触发方式:

触发BFC的方式

  • 根元素或其他包含它的元素
  • 浮动:float 的值不是 none
  • 绝对定位:position 的值不是 staticrelative
  • 行内块:display 的值变为 inline-block
  • 表格单元格:display 的值变为 table-celltable-captioninline-table
  • overflow 的值不是 visible

BFC的特性

  • 内部的 Box 会在垂直方向,一个接一个地放置
  • Box 垂直方向的距离由 margin 决定。属于同一个 BFC 的两个相邻 Box 的 margin 会发生重叠
  • 常见的清除浮动现象(父元素因为子元素浮动导致高度坍塌)不再存在,除非是用来达到这种效果的特殊方式
  • 不会与浮动元素重叠
  • 计算 BFC 的高度时,浮动元素也参与计算

BFC布局方式可以解决很多问题,比如让容器自适应内容的高度,防止margin重叠等。

接下来,我们谈一下使用伪元素清除浮动的方法。但首先我们来看一下什么是浮动。

什么是浮动

浮动是CSS中一种常用的定位方式,本质上就是让元素脱离文档流,并沿着父元素的边缘进行浮动定位。

浮动往往用于实现文本环绕效果或者图片的流动布局,但是由于浮动元素脱离文档流,所以可能引起一些布局上的问题。

我们常用的情况是将两个块级元素并排放置,代码如下:

<div class="container">
  <div class="left">1</div>
  <div class="right">2</div>
</div>
.left {
  float: left;
  width: 50%;
  height: 100px;
  background-color: red;
}

.right {
  float: left;
  width: 50%;
  height: 100px;
  background-color: blue;
}

这个时候,你会发现.container元素的高度为0,页面布局出现问题,这时候我们就需要清除浮动来解决这个问题。

伪元素清除浮动的方式

我们可以使用空的块级元素或者清除浮动的技巧来清除浮动,不过这两种方式都比较繁琐,而且会在文档流中增加一些不必要的标记。

另外,我们还可以使用伪元素来清除浮动,这是一种更为简单、优雅的方式。

代码如下:

.container::after {
  content: "";
  display: block;
  clear: both;
}

我们在.container元素的后面添加一个伪元素::after,并设置其content属性为空、display属性为blockclear属性为both,这样就可以清除.container元素的浮动了。

除主流浏览器都支持伪元素,有些古老的浏览器可能会有问题,不过并不影响这种方式的使用。

下面提供一个较为完整的示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>BFC and Clearfix</title>

  <style>
    .container {
      background: #f5f5f5;
    }
    .left {
      width: 50%;
      height: 100px;
      background-color: red;
      float: left;
    }
    .right {
      width: 50%;
      height: 100px;
      background-color: blue;
      float: left;
    }
    .clearfix::after {
      content: "";
      display: block;
      clear: both;
    }
  </style>
</head>
<body>
  <div class="container clearfix">
    <div class="left">1</div>
    <div class="right">2</div>
  </div>
</body>
</html>

我们给.container元素添加了.clearfix.container两个class,.clearfix用于添加::after伪元素来清除浮动,.container用于添加背景颜色。

在实际使用中,我们只需要将需要清除浮动的元素的父元素添加一个.clearfix的类即可。

除此之外,我们还可以使用BFC来清除浮动,这种方式更为常用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:什么是BFC? CSS 使用伪元素清除浮动的方法 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 纯CSS打字动画的实现示例

    下面是“纯CSS打字动画的实现示例”的完整攻略: 1. 前置知识 在学习本攻略前,需要掌握以下前置知识: HTML和CSS基础语法 CSS动画基础知识 CSS选择器 2. 实现步骤 2.1 创建HTML结构 首先,需要创建一个含有文字的HTML元素,如下所示: <p class="typing-text">这是一段需要打字动画…

    css 2023年6月9日
    00
  • DIV重叠 CSS让DIV层叠 两个DIV或多个DIV顺序重叠加

    下面我就来详细讲解一下“DIV重叠 CSS让DIV层叠 两个DIV或多个DIV顺序重叠加”的完整攻略。 概述 在网页设计中,经常会遇到需要将多个DIV重叠在一起的场景,这样可以实现一些特殊的效果。针对这种需求,我们可以通过CSS样式来实现DIV层叠效果。 方法1:使用z-index属性 z-index 属性指定元素的层叠顺序,数值越大越靠前,即越靠近用户。一…

    css 2023年6月9日
    00
  • Bootstrap学习笔记之css组件(3)

    Bootstrap是一种流行的前端框架,具有易于使用、易于个性化定制以及具有响应式布局等特点。其中,尤其值得注意的是Bootstrap的一系列CSS组件,它们以通用的方式实现了诸如搜索框、导航条、模态框等常见的UI组件,提高了开发效率和页面质量。 本文将继续讲解Bootstrap的CSS组件,分类介绍其中的风格、用法和注意点。其中,将排版、图标、按钮和表格四…

    css 2023年6月10日
    00
  • 利用React实现虚拟列表的示例代码

    接下来我会为你详细讲解“利用React实现虚拟列表的示例代码”的攻略。 什么是虚拟列表 虚拟列表是一种优化长列表性能的方式,通常用于在前端渲染海量数据的场景。它的基本思路是只渲染可见区域的数据,而不是渲染整个列表内容。 如何利用React实现虚拟列表 以下是基于React实现虚拟列表的示例代码及其详细讲解: 步骤一:设置列表数据和列表项高度 根据虚拟列表的思…

    css 2023年6月10日
    00
  • DreamWeaver操作技巧大全(16条技能)

    首先是该攻略的完整攻略: DreamWeaver操作技巧大全(16条技能) 前言 DreamWeaver是一款常用于Web开发的集成开发环境。了解并掌握DreamWeaver的操作技巧,可以提高开发效率。本文总结了16条DreamWeaver操作技巧,供开发者参考。 目录 关闭代码自动补全和高亮 调试JavaScript代码 设置代码折叠 代码行间距隙调整 …

    css 2023年6月9日
    00
  • css 透明边框background-clip妙用

    下面是关于“CSS透明边框background-clip妙用”的详细攻略: 1. 什么是background-clip属性 background-clip 属性控制背景的显示区域,可以取多种值:border-box、padding-box、content-box 和 text,指定不同的区域展现背景图或颜色。具体解释如下: border-box:背景延伸到边…

    css 2023年6月9日
    00
  • Vue实现动态圆环百分比进度条

    实现动态圆环百分比进度条的主要过程分为以下几步: 引入Vue、SVG等需要的依赖和工具 搭建Vue组件结构和布局 动态计算圆环的半径、圆心坐标等关键参数 使用SVG绘制圆环进度条 通过Vue数据驱动更新圆环的进度值 下面详细讲解每一步的实现过程。 1. 引入依赖和工具 首先需要引入Vue、SVG等需要的依赖和工具,可以在<head>标签中引入下列…

    css 2023年6月10日
    00
  • angular内置provider之$compileProvider详解

    Angular 内置 Provider 之 $compileProvider 详解 在 AngularJS 中,提供了很多内置的提供者(provider)来帮助我们进行 MVC 开发。其中 $compileProvider 是 Angular 中一个非常重要的内置提供者,它负责编译 HTML 模板。 什么是 $compileProvider $compile…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部