【前端学习之HTML&CSS】-- CSS第五篇 -- 盒模型及其应用

【前端学习之HTML&CSS】-- CSS第五篇 – 盒模型及其应用


本文具体内容参考了B站渡一教育的课程,原课程链接如下:
渡一教育课程

lc own

前言

html与css以及今后我们将会学到的js共同构成了前端技术中最重要的三种语言,在学习过程中,我们首先从html出发,在html的学习过程中深入了解css,在步入学期末尾阶段再进行js的学习。
本篇文章将会是CSS学习中第二个重要的知识点,盒模型,毫无疑问是CSS学习中掌握多种多样样式结构的基础和灵魂,我们将会从基本概念出发,以行盒模型为主,在学习到模型的基本结构后简单介绍了一些盒模型的应用。

lc

一、盒模型

1. 含义

  • box:盒子,每个元素在页面中都会生成一个矩形区域
    lc

2. 盒子类型

  • 1* 行盒: display属性等于inline的元素;(不换行

浏览器默认行盒:span、a、img、video、audio;(浏览器没有设置display,故**浏览器默认为inline**)
  • 2* 块盒: display属性等于block的元素;(独占一行

在这里插入图片描述

浏览器默认样式表设置的块盒:**容器元素**(div、header、article、aside、section)、**文本元素**(h1、p等);
**注意:盒子类型是CSS样式,可以修改**

3. 盒子的组成部分

无论是行盒还是块盒,都由下面四个部分组成,从内到外分别是:

  • 1* 内容 content: 包裹里的内容(元素的内容盒 content-box)

    涉及属性:width、weight,设置盒子内容宽高;
    lc

  • 2* 填充 padding: 包裹里的泡沫塑料(内边距)

    盒子边框到盒子内容的距离/尺寸:
    padding-left、padding-right、padding-top、padding-bottom(默认为0)
    【属性简写:padding:上 右 下 左】
    lc

    填充盒 padding-pox = 填充区 + 内容区

  • 3* 边框 border: 包裹本身
    lc

    边框 = 边框样式(border-style) + 边框宽度(border-width) + 边框颜色(border-color)

    边框盒 border-box = 边框 + 填充区 + 内容区

  • 4* 外边距 margin: 包裹和包裹之间的距离
    lc

    边框到其他盒子的距离:
    margin-left、margin-right、margin-top、margin-bottom

    <h2 style="width: 300px; height: 50px; padding: 50px 30px; 
    border-style: solid; border-width: 3px; border-color: #008c8c;">这里用来测试盒子模型</h2>
    <!-- padding两两相同可省略 padding: 50px 30px 50px 30px -->
    <!-- border:先设置样式才能显示,样式默认为none,边框颜色默认与字体适配 -->
    <!-- border的style、width、color都是速写的属性,可以展开为上右下左 -->
    <h2 style="border-style: solid; border-width: 3px; border-color: #008c8c; margin: 20px 10px 20px 10px;">用于测试外边距margin</h2>

二、行盒

1. 常见的行盒:

  • 包含具体内容的元素;eg.span、strong、em、i、img、video、audio

2. 显著特点

  • 1* 盒子沿着内容延伸,内容截断盒子就截断;

  • 2* 两个行盒之间直接连接,在同一行内头尾相连
    lc
    【上图中上方为块盒,下方为行盒,可看到存在明显差距】

  • 3* content:行盒的宽高无法设置,宽高根据内容适配
    【调整行盒的宽高,应该使用字体大小、行高、字体类型间接调整】

  • 4* padding:水平方向有效,垂直方向仅会影响背景,不会实际占据空间
    在这里插入图片描述

  • 5* border:同padding;
    在这里插入图片描述

  • 6* margin: 同padding;
    在这里插入图片描述

3. 行块盒

  • 含义:display = inline-block
  1. 不独占一行(水平连续排列);
  2. 盒模型中所有尺寸都有效

应用实践:百度的页面提示效果:

    .pager a{
        border: 1px solid #e1e2e3;
        /* 消除下划线 */
        text-decoration: none;
        color: #38f;
        width: 34px;
        height: 34px;
        /* 行块盒,保证宽高有效 */
        display: inline-block;
        /* 水平居中 */
        text-align: center; 
        /* 垂直居中 */
        line-height: 34px;
    }
    .pager a:hover{
        /* 鼠标移动变化 */
        border-color: #38f;
        background-color: #f2f8ff;
    }
    .pager a.selected{
        /* 当前页的变化,注意保证层叠有效 */
        border: none;
        color: black;
        background-color: initial;
    }
    <!-- a元素的特殊操作 -->
    <div class="pager">
        <a href="" class="selected">1</a>
        <a href="">2</a>
        <a href="">3</a>
        <a href="">4</a>
        <a href="">5</a>
        <a href="">6</a>
        <a href="">7</a>
        <a href="">8</a>
        <a href="">9</a>
        <a href="">10</a>
    </div>

在这里插入图片描述

空白折叠,发生在行盒(行块盒)内部或行盒之间,故上述效果中才会出现空表间隙;
由于在书写代码时有换行–实际上为多个空格–无法避免存在间隙;

4. 可替换元素

分类

  • 非可替换元素:页面上显示的结果,取决于元素内容
    eg.div、p、span等大多数元素;

  • 可替换元素:页面上显示的结果,取决于元素属性
    eg.img、video、audio;

特点

  • 绝大部分可替换元素均为行盒
    可替换元素类似于行块盒,所有尺寸都可修改

  • 图片大小会默认适应宽高修改本身大小,修改方法:object-fit:

contain:纵横比不变,适应宽高修改,且不能溢出;
fill:完全适应宽高变化(默认);
cover:保证把区域填充满,不能打破比例,故会牺牲图片信息;
在这里插入图片描述
如果高度没有设置,高度会自动跟随宽度变化按比例而变化;

三、盒模型的应用

1. 改变宽高范围

问题所在

  • 默认情况下,width和height设置的是内容盒的宽高;
    【页面重构师:将psd文件(设计稿)制作为静态页面】
  • 设计稿中的一个盒子的宽高实际上是边框盒的宽高,但是在我们的实际操作往往会把这一长度当做内容盒的宽高,这样就会导致设置padding和border之后,盒子的宽高与要求不符;

处理方法:

  1. 精确计算,即直接考虑边框盒的宽高,拆分设计;
  2. CSS3:box-sizing 通过设定具体是那个盒子模型来设计;

box-sizing的默认值为content-box,导致width和height为内容盒
如果设置为border-box,则width和height就会直接影响border-box的属性,直接满足设计稿要求;

2. 改变背景覆盖范围

  • 问题:默认情况下,背景覆盖整个边框盒,包括内容区、填充、边框全部;
    lc
  • 修改:添加属性backg-clip: border-box, 将此处盒子修改,实现覆盖范围;

3. 溢出处理

  • 问题:盒子的内容超过设定区域(自行设计宽高);
    【在没有设定宽高时,区域大小会自行变化,自己适应内容】
    在这里插入图片描述

  • 处理:overflow,控制内容溢出边框盒的处理方式;

默认情况下:超出部分的文本是可见,属性为visible;
overflow:hidden(隐藏)、scroll(生成滚动条)、auto(不需要滚动条不出现,需要时自动出现)
【只出现竖向滚动条:overflow-y:scroll】

4. 断词规则(换行)

  • CSS样式:word-break,影响文字在什么位置被截断换行;

取值:

normal:普通,针对于CJK(中日韩)字符,在文字位置截断,其他字符,在单词位置截断;
lc

break-all:所有字符都在文字处截断;
lc

keep-all:所有字符都在单词处截断;(需要空格)
lc

5. 空白处理(不换行)

  • 做法:只能控制单行文本,多行文本需要js
    lc
    li{
        border-bottom: 1px dashed #ccc;
        line-height: 2;
        border-left: 3px solid #008c8c;
        padding-left: 10px;
        margin: 1em 0;
        /* 上下为1em,左右为0 */
        width: 400px;
        /* 空白处理 */
        white-space: nowrap;
        /* 超出隐藏 */
        overflow: hidden;
        /* 文本溢出,三点表示省略 */
        text-overflow: ellipsis;
    }
    <ul>
        <li>Lorem ipsum dolor sit amet consectetur.</li>
        <li>Voluptas atque tempora praesentium nostrum voluptatem.</li>
        <li>A optio architecto totam possimus adipisci.</li>
        <li>Non doloribus necessitatibus vero architecto soluta.</li>
        <li>Sapiente quas exercitationem consequatur laborum dolorum.</li>
        <li>Accusamus porro et praesentium earum illum?</li>
        <li>Necessitatibus iure recusandae tempore unde nobis.</li>
        <li>Dolore obcaecati repellendus cupiditate maiores ad.</li>
    </ul>

总结

对于知识的学习仅从文字来看总是不够透彻的,想要更加深刻的体会盒模型的用法和特点,我们需要进行大量的联系,在后续的博客中我们将会学习视觉格式化模型,即页面中的多个盒子排列规则/布局规则,整个CSS的最重要部分就是下几篇博客的内容,在后续博客中我们也会不断提出一些练习的内容,希望大家深刻领悟,敬请期待。

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生如昭诩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值