玩转CSS盒子模型

Posted 程序喵正在路上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩转CSS盒子模型相关的知识,希望对你有一定的参考价值。

🔥 信仰:一个人走得远了,就会忘记自己为了什么而出发,希望你可以不忘初心,不要随波逐流,一直走下去
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🦄 本文由 程序喵正在路上 原创,CSDN首发!
💖 系列专栏:HTML5+CSS3+移动端前端
🌠 首发时间:2022年7月15日
✅ 如果觉得博主的文章还不错的话,希望小伙伴们三连支持一下哦

阅读指南

✨ 学习目标

  • 能够准确阐述盒子模型的 4 个组成部分
  • 能够利用边框复合写法给元素添加边框
  • 能够计算盒子的实际大小
  • 能够利用盒子模型布局模块案例
  • 能够给盒子设置圆角边框
  • 能够给盒子添加阴影
  • 能够给文字添加阴影

🧸 盒子模型

页面布局要学习三大核心:盒子模型、浮动和定位,学好盒子模型能非常好地帮助我们布局页面

1. 看透网页布局的本质

网页布局过程:

  1. 先准备好相关的网页元素,网页元素基本上都是盒子 Box
  2. 利用 CSS 设置好盒子样式,然后摆放到相应位置
  3. 往盒子里面装内容

网页布局的核心本质:就是利用 CSS 摆盒子

2. 盒子模型(Box Model)组成

所谓盒子模型:就是把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器

CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距和实际内容

3. 边框(border)

border 可以设置元素的边框,边框由三部分组成:边框宽度(粗细)、边框样式和边框颜色

语法:

border: border-width || border-style || border-color
属性作用
border-width定义边框粗细,单位是 px
border-style边框的样式
border-color边框颜色
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>盒子模型之边框</title>
    <style>
        div 
            width: 300px;
            height: 200px;
            border-width: 5px;
            /* 实线边框 */
            /* border-style: solid; */
            /* 虚线边框 */
            /* border-style: dashed; */
            /* 点线边框 */
            border-style: dotted;
            border-color: red;
        
    </style>
</head>

<body>
    <div></div>
</body>

</html>


边框简写:

border: 1px solid red;  /* 没有顺序之分 */

边框分开写法:

border-top: 1px solid red; /* 只设定上边框,其余同理 */

4. 表格的细线边框

border-collapse 属性控制浏览器绘制表格边框的方式,它控制相邻单元格的边框

语法:

border-collapse: collapse;
  • collapse 单词是合并的意思
  • border-collapse: collapse; 表示相邻边框合并在一起

对前面小说排行榜案例进行该进

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>今日小说排行榜</title>
    <style>
        table 
            width: 500px;
            height: 251px;
        

        th 
            height: 35px;
        

        table,
        td,
        th 
            border: 1px solid rebeccapurple;
            border-collapse: collapse;
            font-size: 14px;
            text-align: center;
        
    </style>
</head>

<body>
    <table align="center" cellspacing="0">
        <!-- 表格头部 -->
        <thead>
            <tr>
                <th>排名</th>
                <th>关键词</th>
                <th>趋势</th>
                <th>今日搜索</th>
                <th>最近七日</th>
                <th>相关链接</th>
            </tr>
        </thead>
        <!-- 表格主体 -->
        <tbody>
            <tr>
                <td>1</td>
                <td>鬼吹灯</td>
                <td>🟩</td>
                <td>37435</td>
                <td>1755523</td>
                <td><a href="https://tieba.baidu.com/f?ie=utf-8&kw=%E9%AC%BC%E5%90%B9%E7%81%AF&fr=search"
                        target="_blank">贴吧</a> <a
                        href="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Ftu1.whhost.net%2Fuploads%2F20190322%2F13%2F1553234347-WEUxvwmusH.jpg&refer=http%3A%2F%2Ftu1.whhost.net&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1659423152&t=213ca1853aeb315070cda482b002ba76"
                        target="_blank">图片</a> <a
                        href="https://baike.baidu.com/item/%E9%AC%BC%E5%90%B9%E7%81%AF/10790?fr=aladdin"
                        target="_blank">百科</a></td>
            </tr>
            <tr>
                <td>2</td>
                <td>盗墓笔记</td>
                <td>🟩</td>
                <td>86124</td>
                <td>675432</td>
                <td><a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a></td>
            </tr>
            <tr>
                <td>3</td>
                <td>西游记</td>
                <td>🛑</td>
                <td>39212</td>
                <td>547654</td>
                <td><a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a></td>
            </tr>
            <tr>
                <td>4</td>
                <td>东游记</td>
                <td>🛑</td>
                <td>27523</td>
                <td>756845</td>
                <td><a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a></td>
            </tr>
            <tr>
                <td>5</td>
                <td>甄嬛传</td>
                <td>🟩</td>
                <td>16321</td>
                <td>785676</td>
                <td><a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a></td>
            </tr>
            <tr>
                <td>6</td>
                <td>水浒传</td>
                <td>🛑</td>
                <td>57576</td>
                <td>1231421</td>
                <td><a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a></td>
            </tr>
            <tr>
                <td>7</td>
                <td>三国演义</td>
                <td>🛑</td>
                <td>22334</td>
                <td>762586</td>
                <td><a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a></td>
            </tr>
        </tbody>
    </table>
</body>

</html>

5. 边框会影响盒子的实际大小

边框会额外增加盒子的实际大小,因此我们有两种方案解决:

  1. 测试盒子大小的时候,不量边框
  2. 如果测量的时候包含了边框,则需要 width/height 减去边框宽度

6. 内边距(padding)

padding 属性用于设置内边距,即边框与内容之间的距离

属性作用
padding-left左内边距
padding-right右内边距
padding-top上内边距
padding-bottom下内边距
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>盒子模型之内边距</title>
    <style>
        div 
            width: 200px;
            height: 200px;
            background-color: skyblue;
            padding-left: 20px;
            padding-top: 20px;
        
    </style>
</head>

<body>
    <div>
        content盒子内容
    </div>
</body>

</html>


padding 属性(简写属性)可以有一到四个值(重点)

值的个数表达意思
padding: 5px;1个值,代表上下左右都有5像素内边距
padding: 5px 10px;2个值,代表上下内边距是5像素,左右内边距是10像素
padding: 5px 10px 20px;3个值,代表上内边距5像素,左右内边距10像素,下内边距20像素
padding: 5px 10px 20px 30px;4个值,依次代表上右下左,顺时针方向

以上4种情况,我们实际开发都会遇到

当我们给盒子指定 padding 值之后,发生了两件事情:

  1. 内容和边框有了距离,添加了内边距
  2. padding 影响了盒子实际大小

也就是说,如果盒子已经有了宽度和高度,此时再指定内边距,会撑大盒子

解决方案:

如果保证盒子跟效果图大小保持一致,则让 width/height 减去多出来的内边距大小即可

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>盒子模型之内边距</title>
    <style>
        div 
            width: 160px;
            height: 160px;
            background-color: skyblue;
            padding: 20px;
        
    </style>
</head>

<body>
    <div>
        padding会影响盒子实际大小
    </div>
</body>

</html>

案例:新浪导航–padding影响盒子好处

padding 内边距可以撑开盒子,我们可以做非常巧妙的运用

因为每个导航栏里面的字数不一样多,我们可以不用给每个盒子宽度了,直接给 padding 最合适

案例相关取值:

  1. 上边框为 3 像素,颜色为 #ff8500
  2. 下边框为 1 像素,颜色为 #edeef0
  3. 盒子高度为 41 像素,背景颜色为 #fcfcfc
  4. 文字颜色为 #4c4c4c
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>新浪导航</title>
    <style>
        .nav 
            height: 41px;
            border-top: 3px solid #ff8500;
            border-bottom: 1px solid #edeef0;
    

以上是关于玩转CSS盒子模型的主要内容,如果未能解决你的问题,请参考以下文章

HTML5+CSS——11盒子模型-边框、内边距、外边距

css盒子模型的深入理解,在块级、行内元素的区别和特性

改变盒子模型外边距的是

CSS盒子模型

web前端开发超详细讲解CSS盒子模型

css盒子模型