深入理解 `box-sizing: border-box;`:CSS 布局的利器

news/2025/2/3 17:23:45 标签: css, css3, 前端

深入理解 `box-sizing: border-box;`:CSS 布局的利器

    • 默认行为
      • 示例代码
    • 使用 `box-sizing: border-box;`
      • 示例代码
    • 全局应用 `box-sizing: border-box;`
      • 示例代码
    • 实际应用场景
      • 1. 表单布局
      • 2. 网格布局
    • 总结

在 CSS 中,box-sizing 属性决定了元素的总宽度和高度是如何计算的。默认情况下,元素的宽度和高度只包括内容(content),不包括内边距(padding)和边框(border)。然而,box-sizing: border-box; 可以改变这种行为,使元素的宽度和高度包括内容、内边距和边框。本文将详细介绍 box-sizing: border-box; 的用法及其在实际开发中的应用。

默认行为

在默认情况下,元素的宽度和高度只包括内容部分。内边距和边框会增加元素的总尺寸。

示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Default Box Sizing</title>
    <style>css">
        .default-box {
            width: 200px;
            height: 100px;
            padding: 20px;
            border: 5px solid #0078d7;
            background-color: #f3f3f3;
        }
    </style>
</head>
<body>
    <div class="default-box">Default Box Sizing</div>
</body>
</html>

在这个示例中,.default-box 的总宽度是 200px(内容宽度) + 2 * 20px(内边距) + 2 * 5px(边框) = 250px。

使用 box-sizing: border-box;

当你将 box-sizing 设置为 border-box 时,元素的宽度和高度将包括内容、内边距和边框。这意味着你设置的宽度和高度将是元素的总尺寸。

示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Border Box Sizing</title>
    <style>css">
        .border-box {
            width: 200px;
            height: 100px;
            padding: 20px;
            border: 5px solid #0078d7;
            background-color: #f3f3f3;
            box-sizing: border-box;
        }
    </style>
</head>
<body>
    <div class="border-box">Border Box Sizing</div>
</body>
</html>

在这个示例中,.border-box 的总宽度是 200px(内容宽度 + 内边距 + 边框),而不是 250px。这意味着你设置的宽度和高度将是元素的总尺寸。

全局应用 box-sizing: border-box;

为了确保所有元素都使用 border-box 尺寸计算,你可以在全局样式中设置 box-sizing

示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Global Border Box Sizing</title>
    <style>css">
        * {
            box-sizing: border-box;
        }

        .global-box {
            width: 200px;
            height: 100px;
            padding: 20px;
            border: 5px solid #0078d7;
            background-color: #f3f3f3;
        }
    </style>
</head>
<body>
    <div class="global-box">Global Border Box Sizing</div>
</body>
</html>

在这个示例中,所有元素都使用 border-box 尺寸计算,包括 .global-box。这样可以确保所有元素的宽度和高度都包括内容、内边距和边框。

实际应用场景

1. 表单布局

在表单布局中,box-sizing: border-box; 可以帮助你更容易地控制输入框的尺寸,避免因为内边距和边框导致的布局问题。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Form Layout</title>
    <style>css">
        * {
            box-sizing: border-box;
        }

        .form-group {
            margin-bottom: 15px;
        }

        .form-group input {
            width: 100%;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 4px;
        }
    </style>
</head>
<body>
    <div class="form-group">
        <label for="username">Username</label>
        <input type="text" id="username" name="username">
    </div>
    <div class="form-group">
        <label for="password">Password</label>
        <input type="password" id="password" name="password">
    </div>
</body>
</html>

2. 网格布局

在使用 CSS 网格布局时,box-sizing: border-box; 可以确保网格项的尺寸一致,避免因为内边距和边框导致的布局问题。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Grid Layout</title>
    <style>css">
        * {
            box-sizing: border-box;
        }

        .grid-container {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 10px;
        }

        .grid-item {
            padding: 20px;
            border: 1px solid #ccc;
            background-color: #f3f3f3;
        }
    </style>
</head>
<body>
    <div class="grid-container">
        <div class="grid-item">Item 1</div>
        <div class="grid-item">Item 2</div>
        <div class="grid-item">Item 3</div>
        <div class="grid-item">Item 4</div>
        <div class="grid-item">Item 5</div>
        <div class="grid-item">Item 6</div>
    </div>
</body>
</html>

总结

box-sizing: border-box; 是一个非常有用的 CSS 属性,可以帮助你更容易地控制元素的总尺寸。通过将 box-sizing 设置为 border-box,你可以确保元素的宽度和高度包括内容、内边距和边框,从而简化布局和样式设计。


http://www.niftyadmin.cn/n/5840952.html

相关文章

蓝桥杯单片机第七届省赛

前言 这套题不难&#xff0c;相对于第六套题这一套比较简单了&#xff0c;但是还是有些小细节要抓 题目 OK&#xff0c;以上就是全部的题目了&#xff0c;这套题目相对来说逻辑比较简单&#xff0c;四个按键&#xff0c;S4控制pwm占空比&#xff0c;S5控制计时时间&#xff0…

机器学习7-全连接神经网络3-过拟合与超参数

机器学习6-全连接神经网络3-过拟合欠拟合 过拟合应对过拟合-最优方案&#xff1a;获取更多的训练数据应对过拟合-次优方案&#xff1a;正则化应对过拟合-次优方案2&#xff1a;随机失活综合考量 超参数超参数优化方法 过拟合 机器学习的根本问题是优化和泛化的问题。优化——是…

Vue.js组件开发-实现图片浮动效果

使用Vue实现图片浮动效果 实现思路 将使用Vue的单文件组件&#xff08;.vue&#xff09;来实现图片浮动效果。主要思路是通过CSS的transform属性结合JavaScript的定时器来改变图片的位置&#xff0c;从而实现浮动效果。 代码实现 <template><!-- 定义一个包含图片…

java练习(4)

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 public class Solution {public String longestCommonPrefix(String[] strs) {// 如果数组为空&#xff0c;直接返回空字符串if (strs null || strs.length 0)…

PVE 中 Debian 虚拟机崩溃后,硬盘数据怎么恢复

问题 在 PVE 中给 Debian 虚拟机新分配硬盘后&#xff0c;通过 Debian 虚拟机开启 Samba 共享该硬盘。如果这个 Debian 虚拟机崩溃后&#xff0c;怎么恢复 Samba 共享硬盘数据。 方法 开启 Samba 共享相关知识&#xff1a;挂载硬盘和开启Samba共享。 新建一个虚拟机&#xf…

深入解析 CSS 中不常用属性及其相互作用

深入解析 CSS 中不常用属性及其相互作用 **1. CSS 自定义属性&#xff08;CSS Variables&#xff09;****属性示例****作用****布局相关的作用** **2. box-sizing: border-box;****属性示例****作用****布局相关的作用** **3. Flexbox 布局****属性示例****作用****布局相关的作…

剑指offer 链表 持续更新中...

文章目录 1. 实现单链表的插入和删除2. 从尾到头打印链表2.1 题目描述2.2 方法1&#xff0c;直接逆转2.3 方法2&#xff0c;使用栈方法3&#xff0c;递归 1. 实现单链表的插入和删除 #include <iostream>struct ListNode {explicit ListNode(int val_p 0, ListNode *ne…

记录 | 基于MaxKB的仿小红书旅游文章AI制作(含图文、视频)

目录 前言一、创建应用Step1 表单Step2 AI对话生成旅游攻略提炼场景Step3 图片生成Step4 视频生成Step5 指定回复二、检验效果三、整体结构视图更新时间前言 参考文章: 自己的感想 想复现文章的内容你需要先学习下我之前的三篇文章中的记录。 1、记录 | Docker的windows版安装…