# 5.CSS

# 1.BFC ⭐

  • 1.定义:块级格式上下文,它是页面中的一块渲染区域,具有一定的渲染规则,决定了其中子元素的布局方式和与其他元素的相互作用和关系。

# 1.如何创建 BFC

  • 1.根元素 html 本身就是一个 BFC。

  • 2.浮动元素(元素的 float 不是 none)。

  • 3.绝对定位元素(元素的 position 为 absolute 或 fixed)。

  • 4.Display:inline-block。

  • 5.Overflow:overflow设置为不为 visible 的值(hidden、auto、scroll)。

# 2.BFC 的应用

  • 1.清除内部浮动:当内部有浮动元素时,可以设置父元素为BFC,避免高度塌陷。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>BFC Example</title>
    <style>
        .container {
            border: 3px solid red;
            /* 创建BFC */
            /* overflow: auto; */
        }

        .float-box {
            float: left;
            width: 50px;
            height: 50px;
            background-color: blue;
            margin: 5px;
        }
    </style>
</head>

<body>

    <div class="container">
        <div class="float-box"></div>
        <div class="float-box"></div>
    </div>

</body>

</html>
  • 2.避免外边距合并。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Margin Collapsing Example</title>
    <style>
        .box1 {
            height: 50px;
            background-color: salmon;
            margin-bottom: 20px;
        }

        .box2 {
            height: 50px;
            background-color: lightblue;
            margin-top: 30px;
        }

        .bfc-container {
            overflow: auto;
        }
    </style>
</head>

<body>

    <h3>Without BFC:</h3>
    <div class="box1"></div>
    <div class="box2"></div>

    <h3>With BFC:</h3>
    <div class="bfc-container">
        <div class="box1"></div>
    </div>
    <div class="box2"></div>

</body>

</html>
  • 3.阻止元素被浮动元素覆盖。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>BFC Float Interaction Example</title>
    <style>
        .float-box {
            float: left;
            width: 100px;
            height: 100px;
            background-color: salmon;
        }

        .normal-box {
            width: 150px;
            height: 150px;
            background-color: lightblue;
            margin-left: 50px;
            /* Intentionally overlap with .float-box without BFC */
        }

        .bfc-box {
            overflow: auto;
            /* This creates a new BFC */
        }
    </style>
</head>

<body>

    <h3>Without BFC:</h3>
    <div class="float-box"></div>
    <div class="normal-box"></div>

    <h3>With BFC:</h3>
    <div class="float-box"></div>
    <div class="normal-box bfc-box"></div>

</body>

</html>

# 2.flex:1 ⭐

当你在一个 flex 容器中的多个子元素上使用 flex: 1 时,这些元素将平均分配容器的空间,不管它们的原始大小如何。

  • 定义:flex: 1 是 flex-grow:1, flex-shrink:1, 和 flex-basis:0% 这三个属性的简写。

  • 1.flex-grow:定义了在 flex 容器中分配剩余空间的相对比例

  • 2.flex-shrink:定义了在flex 容器空间不足时的收缩能力

  • 3.flex-basis: 定义了 flex元素在主轴方向上的初始大小

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flex Example</title>
    <style>
        .flex-container {
            display: flex;
            height: 100px;
            border: 2px solid black;
        }

        .flex-item {
            flex: 1;
        }

        /* 下面是可选的,仅用于为每个flex item设置不同的背景色,使它们更容易区分 */
        .flex-item:nth-child(1) {
            background-color: lightblue;
        }

        .flex-item:nth-child(2) {
            background-color: lightcoral;
        }

        .flex-item:nth-child(3) {
            background-color: lightgreen;
        }
    </style>
</head>

<body>

    <div class="flex-container">
        <div class="flex-item">Item 1</div>
        <div class="flex-item">Item 2</div>
        <div class="flex-item">Item 3</div>
    </div>

</body>

</html>

# 3.position有哪些属性?

  • 1.static(默认值):没有定位,元素出现在正常的文档流中。不受 top, bottom, left, right 和 z-index 属性影响。

  • 2.relative:元素相对于其正常位置进行定位。

  • 3.absolute:元素脱离正常文档流,并相对于最近的已定位(非 static)祖先元素进行定位。

  • 4.fixed:元素脱离正常文档流,并相对于浏览器窗口进行定位。

# 4.盒模型

  • 1.标准盒模型大小:width = width+padding+border,box-sizing:content-box。

  • 2.ie盒模型大小:width = width,content = width - padding - border,box-sizing: border-box。

# 5.水平垂直居中

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox Centering Example</title>
    <style>
        .container {
            display: flex;
            justify-content: center;
            /* 水平居中 */
            align-items: center;
            /* 垂直居中 */
            height: 100vh;
            /* 使容器填满整个视口的高度 */
            border: 2px solid black;
            /* 为了更明显地看到居中效果,添加了边框 */
        }

        .centered-item {
            padding: 20px;
            background-color: salmon;
            border: 1px solid darkred;
        }
    </style>
</head>

<body>

    <div class="container">
        <div class="centered-item">我是居中的内容</div>
    </div>

</body>

</html>