CSS:盒子模型

CSS:盒子模型

    • 盒子模型
      • 盒子模型的组成
      • 盒子内容
      • 边框 border
      • 内边距 padding
      • 盒子实际大小计算
        • CSS3的盒子类型
          • content-box
          • border-box
      • 外边距 margin
        • 外边距合并
          • 相邻块元素垂直外边距合并
          • 嵌套块元素垂直外边距塌陷
      • 行内元素的内外边距
    • 盒子相关属性
      • 圆角边框
      • 盒子阴影


盒子模型

所谓盒子模型,其实就是把HTML中的布局元素看作是一个矩形的盒子,或者承装内容的容器。
盒子模型在页面布局中,可以起到嵌套,堆叠,布局的效果。

盒子模型的组成

在这里插入图片描述
盒子模型主要由五个元素组成,分别是盒子内容 - content盒子内边距 - padding盒子边框 - border盒子外边距 - margin。接下来我们一一介绍:


盒子内容

所谓盒子的内容,其实就是盒子可以存放内容的区域,在没有学习盒子模型前,其实我们就已经会设置盒子内容的大小了。
盒子模型中,盒子的大小由宽高:heightwidth来定义。
当宽高不足放下其内容物时,其内容区域就会被内容物撑开,此时盒子的内容就是不可控的了,所以在给宽高时就应该给足,保证每一个盒子都在预料之中。


边框 border

border属性可以设置盒子的边框,边框主要由边框粗细,边框样式,边框颜色组成:
属性:

属性作用
border-width设置边框粗细,单位是px
border-style设置边框样式
border-color设置边框颜色

边框样式 border-style的属性值

属性值效果
none没有边框(默认值)
solid实线边框
dashed虚线边框
dotted点线边框

边框样式效果如下:
在这里插入图片描述
边框简写:
边框的三个属性是可以连写在同一个border属性中的,但是要按照指定的顺序:边框粗细,边框样式,边框颜色。
示例:
在这里插入图片描述
边框单方向设置:
边框样式是可以指定方向的,四个方向分别对应:top,bottom,left,right。直接衔接在border后面即可:border-topborder-bottomborder-leftborder-right

示例:
在这里插入图片描述


内边距 padding

padding用于设置盒子的内边距,即边框与内容之间的距离。
padding的属性值为px。

chrome浏览器可以开启调试窗口,查看每个盒子五大属性,后面讲解边距问题时,都会结合调试窗口来讲解:
在这里插入图片描述
我们先来看看内边距的效果:
请添加图片描述
可以看到,在内边距增加的过程中,我们的盒子变大啦,内部的文字距离边框也越来越远。
其中绿色的区域就是内边距的区域,内边距的两个主要作用就是:撑开盒子大小,以及控制边框与内容的距离。

与border一样,也有可以在四个方向单独设置内边距的方法:padding-toppadding-bottompadding-leftpadding-right
示例:
请添加图片描述


盒子实际大小计算

从先前对盒子内边距的改变,我们发现整个边框都变大了,可以知道,盒子的大小不仅仅是内容的大小,而是由多部分的组成。
在默认情况下,盒子的大小为:(内容宽度 + 左右内边距+ 左右边框粗细) × (内容高度 + 上下内边距+ 上下边框粗细)
简单来说就是盒子的长×宽。

比如下面的盒子:
在这里插入图片描述
这个盒子的宽高都是100px,上下左右边框各5px,上下左右内边距各20px。最后的大小就是:(100 + 5 + 5 + 20 + 20)* (100 + 5 + 5 + 20 + 20)

CSS3的盒子类型

在CSS3中,增添了一种盒子类型,我们刚才的计算公式,是针对于content-box,CSS3增添了一种border-box。
接下来我为大家介绍一下:
盒子类型的切换,是通过border-sizing属性,属性值默认为content-box。

content-box

这种盒子类型,在设置宽高width和height时,作用于内容content区域,也就是说,后续在设置内边距和边框时,都是在content区域往外拓展,保证content是指定的宽高。
效果如下:

请添加图片描述

可以看到,不论我们怎样修改边距和边框,content的大小都是恒定的。

border-box

conten-box是宽高作用域content,那么border-box就是宽高作用于边框了。在这种盒子类型下,设置的宽高会作用于边框,后续在设置内边距和边框时,都会在边框区域向内拓展,保证边框的值是指定的宽高。
效果如下:
请添加图片描述
在这种盒子模型下,我们的外部蓝色边框没有发生过大小改变,后续调整内边距和边框大小,反而是压缩了内容的区域。

第二种盒子的实际大小非常容易计算,就是指定的width × height


外边距 margin

以上内容都是用于控制盒子本身是属性,而外边距,则是控制盒子之间的距离。
外边距通过margin属性来控制,单位是px。
也可以指定固定的方向的外边距:margin-topmargin-bottommargin-leftmargin-right

我们先来看一下外边距的效果:

请添加图片描述

此处橙色的区域就是外边距,我们通过外边距,撑开了盒子之间的距离,这就是外边距的主要作用。

margin属性,除了可以用px以外,还有一个属性值:auto,其代表居中。

外边距合并

我们看到刚刚的外边距的图片:
在这里插入图片描述
这张图有一个端倪,我们发现,上面盒子的下外边距,和下面盒子的上外边距合并了。如果没有合并,两个盒子的距离本应该是到侧边距离的两倍才对。这就是外边距合并问题。

相邻块元素垂直外边距合并

刚刚展示的是相邻块级元素的外边距合并,这种边距合并是难以避免的,在开发时,我们最好只设置一个方向的边距值,不要让相邻元素交界的地方设置两个外边距。
比如刚刚的两个盒子,如果想让其距离为100px,可以将上面盒子的margin-bottom = 100px; 下面盒子的margin-top = 0;。这样就没有边距的合并,我们的盒子间距就更可控了。


嵌套块元素垂直外边距塌陷

我们先看案例:

在这里插入图片描述
在上面的代码中,出现了一个问题,就是我们为粉色盒子设置了50px外边距,它与页面边界是50px没有问题;但是我们的蓝色盒子有10px的外边距,上方的外边距却没有生效。这就是嵌套块元素的塌陷问题:
对于两个嵌套关系的块元素,父元素有上外边距的同时,子元素也有上外边距,此时父元素的上外边距会变成两个上外边距之间较大的,子元素的上外边距会变成0

那遇到这个问题,应该如何解决?
有很多种解决方法,在此介绍几种目前能理解的:

1.为父级元素设置上边框
2.为父级元素设置上内边距

在这里插入图片描述
第一张图片为塌陷状态,第二张图使用了上内边距,第三张图片使用的上边框。

此处有的时候上边框带着颜色会让我们的盒子不美观,可以使border-color属性值为transparent,代表颜色为透明色,即第四张图片的情况。


行内元素的内外边距

行内元素的内外边距,并非全部有效,遵循以下规则:

水平方向的margin和padding布局是有效的
垂直方向的margin和padding布局是无效的


盒子相关属性

圆角边框

在CSS3中,新增了圆角边框样式border-radious。
属性值有两种形式,分别是数值形式和百分比形式。
这个地方的属性值是指一个圆的半径,将这个半径的圆形贴合到四个角落,得到的曲线就是一个圆角边框。
在这里插入图片描述

如果是正方形,想要设置为一个圆,把数值修改为高度或宽度的一半即可,或者直接写为50%


盒子阴影

CSS3新增了盒子阴影box-shadow。
语法:
box-shadow: h-shadow v-shadow blur spread color inset;
属性值:

属性值效果
h-shadow必需,水平阴影位置,允许负值
v-shadow必须,垂直阴影位置,允许负值
blur可选,模糊距离
spread可选,阴影尺寸
color可选,阴影颜色
inset;可选,控制阴影内外,outsite为外部阴影(默认)

h-shadow 和v-shadow:
改变阴影位置:
请添加图片描述

blur:
改变阴影模糊度:
请添加图片描述

spread:
改变阴影扩散范围:
请添加图片描述

color:
改变阴影颜色:
请添加图片描述

inset:
将阴影放在盒子内部:
请添加图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/262660.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python之导入.py文件

目录 1、文件结构 2、导入.py文件 2.1同一层内文件夹内的导入 2.2不同层内文件夹内的导入 1、文件结构 Paint_master是一个工程的根目录,忽略一些文件及文件夹后,其文件结构如下: src util ImageUtil.py view BaseAdjustDialog.py MainW…

字符串函数的模拟实现(部分字符串函数)

strlen函数模拟 size_t my_strlen(const char* arr) {int count 0;while(*arr){arr;count;}return count;} int main() { printf( " %zd", my_strlen("adsshadsa"));}//模拟实现strlen函数 strcpy函数模拟 char* my_strcpy(char* arr1, const char* ar…

Python算法例21 交错正负数

1. 问题描述 给出一个含有正整数和负整数的数组,将其重新排列成一个正负数交错的数组。 2. 问题示例 给出数组[-1,-2,-3,4,5,6],重新排序之后,变成[-1,5,-…

Web前端-JavaScript(对象)

文章目录 1.对象1.1 概念1.2 创建对象三种方式**对象字面量创建对象**:new Object创建对象构造函数创建对象 1.3 遍历对象 2.作用域1.1 概述1.2 全局作用域1.3 局部作用域1.4 JS没有块级作用域1.5 变量的作用域1.6 作用域链1.7 预解析 1.对象 1.1 概念 什么是对象 …

Ubuntu 磁盘管理DF命令用法

Linux磁盘空间管理是系统运维中的核心环节,它直接影响到系统的稳定运行、数据的安全性和业务的连续性。 通过实施有效的磁盘空间管理策略,系统管理员可以确保系统的高效运作,满足不断变化的业务需求,并为用户提供可靠的服务。 因此…

【YOLOv8新玩法】姿态评估解锁找圆心位置

前言 Hello大家好,今天给大家分享一下如何基于深度学习模型训练实现圆检测与圆心位置预测,主要是通过对YOLOv8姿态评估模型在自定义的数据集上训练,生成一个自定义的圆检测与圆心定位预测模型 制作数据集 本人从网络上随便找到了个工业工件…

自动标注软件AnyLabeling安装

AnyLabeling自动标注软件介绍 该工具作为一个具有Segment Anything和YOLO模型的智能标签工具,可以快速、准确地对图像进行标注。 AnyLabeling LabelImg Labelme Improved UI Auto-labeling 在Python终端运行 pip install anylabeling启动AnyLabeling anylabe…

危险品内陆运输相关知识_箱讯科技

危险品拖车 危险品拖车运输是一项涉及到高度危险物质的专业工作,需要确保合法合规的运输,并提供必要的信息以保障公共安全。进行这类运输时,需要携带一系列文件和具备特定的资质。 什么样的车适合做危险品拖车? 1、车辆类型:通…

长三角安防行业盛会“2024杭州安博会”4月份在杭州博览中心召开

作为中国安防行业的盛会,2024杭州安博会将于4月份在杭州国际博览中心隆重召开。本届安博会将汇聚全球最先进的安防技术和产品,为来自世界各地的安防从业者、爱好者以及投资者提供一个交流、展示和合作的平台。 据了解,2024杭州安博会将会展示…

Windows11系统下如何通过.cab文件更新PL2303串口驱动?

Windows11系统下如何通过.cab文件更新PL2303串口驱动? 首先,在微软官方网站上下载所需版本的.cab文件,具体链接如下: https://www.catalog.update.microsoft.com/Search.aspx?q=Prolific%20USB-to-Serial%20Comm%20Port 如下图所示,进入该网站后,找到自己所需的驱动版…

IPD产品开发的三类变更的含义和在流程中的位置

在基于IPD的产品开发过程中,变更仍然不可避免,甚至变更比基于传统流程的产品开发更多,因为IPD的产品开发是盯着市场变化、快速响应市场需求的,而这个世界唯一的不变就是变。那么,我们如何对产品开发过程中的变更进行分…

智能网络与网络安全:全球发展与未来趋势

导言 随着数字化时代的到来,智能网络和网络安全成为科技领域的研究热点。本文将深入研究智能网络与网络安全的发展过程、遇到的问题、解决过程,以及未来的可用范围。同时,关注各国在这一领域的应用情况和未来研究的趋势,以便在全球…

期货交易策略模拟测试-基于CLBISO01策略-2023.12.22

采取与昨天同样的策略进行盘中模拟测试,今天行情还可以,挺“顺溜”。

Xcode15 iOS 17 Simulator 离线安装,模拟器安装

Xcode 15 安装包的大小相比之前更小,因为除了 macOS 的 Components,其他都需要动态下载安装,否则提示 iOS 17 Simulator Not Installed。 如果不安装对应的运行模拟库 无法真机和模拟器运行,更无法新建项目。但是由于模拟器安装包…

拖拽列表简单实现

样式部分&#xff1a; <style>.item {width: 500px;text-align: center;margin-bottom: 5px;height: 40px;line-height: 40px;border-radius: 5px;color: #fff;margin: 5 auto;background-color: red;}.item.moving {background: transparent;color: transparent;border…

JNI学习(二)

静态注册 接着上篇博客学习 JNI函数 JNIEXPORT void JNICALL Java_com_example_jnidemo_TextDemo_setText(JNIEnv *env, jobject this, jstring string){ __android_log_print(ANDROID_LOG_ERROR, "test", "invoke set from C\n");char* str (char*)(*e…

【mongoose】 Model.create() no longer accepts a callback 报错解决

在最新版的 mongoose 操作 MongoDB 数据库的时候&#xff0c;当我们插入一条数据时候&#xff0c;会报错 &#xff1a;Model.create() no longer accepts a callback&#xff0c;看了很多文章都说是&#xff0c;版本太高&#xff0c;都妥协选择了降低回旧版本&#xff0c;但我就…

HotRC DS600遥控器+F-06A接收机

PWM原理说明 DS600遥控器说明 DS600遥控器的默认高电平是1.5ms 1通道 左右 2通道 前后 3通道 接管 上电后是1ms &#xff0c;按一下是2ms&#xff0c;1ms和2ms切换 DS600接收机说明 */ #include "ps2.h" #include "common.h"#define LEFT_RIGHT_CHAN…

centos7安装开源日志系统graylog5.1.2

安装包链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1Zl5s7x1zMWpuKfaePy0gPg?pwd1eup 提取码&#xff1a;1eup 这里采用的shell脚本安装&#xff0c;脚本如下&#xff1a; 先使用命令产生2个参数代入到脚本中&#xff1a; 使用pwgen生成password_secret密码 …

数据库——事务

智能2112杨阳 一、目的与要求&#xff1a; 1.熟悉提交事务 2.回滚事务 3.检查点技术 注&#xff1a;可以用可视化软件来实现 二、内容&#xff1a; 基于现有数据库设计事务提交、事务回滚、及检查点实验&#xff0c;观察比较提交前后执行结果并分析。 源码&#xff1a…