CSS(三)---【盒子模型、边框、外边距合并】

零.前言

本篇主要介绍CSS中最重要的一种概念模型:“盒子模型”。

关于CSS的更多内容,可以查看作者之前的文章:

CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客

CSS(二)---【常见属性、复合属性使用】-CSDN博客

一.盒子模型

1.1基本介绍

CSS中,所有的标签都被认为是一个盒子,这个盒子有内容、盒子中的空隙、盒子的厚度、盒子外的距离

对应于CSS术语就是:“内容(content)”、“内边距(padding)”、“边框大小(bord)”、“外边距(margin)”。

如下图所示:

通过盒子模型,我们可以更精确的控制标签。

所以使用CSS来进行页面布局,可以认为就是将盒子摆在合适的位置

不过值得注意的是,盒子模型只是人为抽象出来的概念,实际在CSSHTML中并不存在盒子模型,但对于上述四个属性却是实际存在的。

1.2CONTENT

content不用多说,就是标签的内容,根据自己的业务需要编辑即可。

1.3PADDING(内边距)

padding用于设置content(内容)边框间距

padding是一个复合属性,下有四个子属性

  1. padding-top:上边子属性
  2. padding-right:右边子属性
  3. padding-bottom:下边子属性
  4. padding-left:左边子属性

注意到盒子模型是一个矩形,这说明盒子模型是有四条边的,对应着:“top(上边)、right(右边)、bottom(下边)、left(左边)”。

为此我们可以同时修改四个方向的内边距,也可以只修改某一个方向的内边距,具体根据业务逻辑实现就好。

注意:

在使用padding复合属性一次性设置单个或小于四个方向的属性时,四个方向的属性顺序默认是:“top -> right -> bottom -> left,即顺时针方向转动一圈”。

在这里,我们给定一个配对原则:“上下为一对”、“左右为一对”。

当我们只给定左边距没有给定右边距,那么右边距的值就找左边距的值。

当我们只给定上边距没有给定下边距,那么下边距的值就找上边距的值。

例如:

<!DOCTYPE html>
<html>
<head>
<style>
div {
  border: 1px solid black;
  padding: 25px 50px 75px;
  background-color: lightblue;
}
</style>
</head>
<body>

<h1>简写的内边距属性 - 3 个值</h1>

<div>这个 div 元素的上内边距是 25px,左右内边距是 50px,下内边距是 75px。</div>

</body>
</html>

效果:

例如::

<!DOCTYPE html>
<html>
<head>
<style>
div {
  border: 1px solid black;
  background-color: lightblue;
  padding-top: 50px;
  padding-right: 30px;
  padding-bottom: 50px;
  padding-left: 80px;
}
</style>
</head>
<body>

<h1>使用单独的内边距属性</h1>

<div>这个 div 元素的上内边距是 50px,右内边距是 30px,下内边距是 50px,左内边距是 80px。</div>

</body>
</html>

效果:

1.4BORDER(边框)

由于border边框的内容很多,我们在第二部分讲解。

1.5MARGIN(外边距)

margin主要用来给标签周围创建空间,默认是四个方向(上下左右)同时预留出一部分空白空间

margin是一个复合属性

margin四个子属性

  1. margin-top”:顶部外边距
  2. margin-right”:右部外边距
  3. margin-bottom”:底部外边距
  4. margin-left”:右部外边距

注意:

当使用margin复合属性来一次性设置四个方向的外边距的时候,遵循的方向是:“上右下左顺时针绕动一圈)”。

例如:

<!DOCTYPE html>
<html>
<head>
<style>
div {
  border: 1px solid black;
  margin-top: 100px;
  margin-bottom: 100px;
  margin-right: 150px;
  margin-left: 80px;
  background-color: lightblue;
}
</style>
</head>
<body>

<h1>使用单独的外边距属性</h1>

<div>这个 div 元素的上外边距为 100 像素,右外边距是 150 像素,下外边距是 100 像素,左外边距是 80 像素。</div>

</body>
</html>

 效果:

例如:

<!DOCTYPE html>
<html>
<head>
<style>
div {
  border: 1px solid black;
  margin: 25px 50px;
  background-color: lightblue;
}
</style>
</head>
<body>

<h1>简写属性 margin - 2 个值</h1>

<div>div 元素的上下外边距是 25 像素,左右外边距是 50 像素。</div>

<hr>

</body>
</html>

效果:

二.border【边框】

2.1border-style【边框样式】

border-style用来指定边框的形状,比如:“实线”、“虚线”、“点线”等等。

它的值可以取为:

  • dotted - 定义点线边框
  • dashed - 定义虚线边框
  • solid - 定义实线边框
  • double - 定义双边框
  • groove - 定义 3D 坡口边框。效果取决于 border-color 值
  • ridge - 定义 3D 脊线边框。效果取决于 border-color 值
  • inset - 定义 3D inset 边框。效果取决于 border-color 值
  • outset - 定义 3D outset 边框。效果取决于 border-color 值
  • none - 定义无边框
  • hidden - 定义隐藏边框

注意:隐藏边框也是存在的,只是我们看不到(隐身了)。

同时,我们也可以指定四条边不同的样式形状,遵循“上下左右配对原则和顺时针顺序

例如:

<!DOCTYPE html>
<html>
<head>
<style>
p.dotted {border-style: dotted;}
p.dashed {border-style: dashed;}
p.solid {border-style: solid;}
p.double {border-style: double;}
p.groove {border-style: groove;}
p.ridge {border-style: ridge;}
p.inset {border-style: inset;}
p.outset {border-style: outset;}
p.none {border-style: none;}
p.hidden {border-style: hidden;}
p.mix {border-style: dotted dashed solid double;}
</style>
</head>
<body>

<h1>border-style 属性</h1>

<p>此属性规定要显示的边框类型:</p>

<p class="dotted">点状边框。</p>
<p class="dashed">虚线边框。</p>
<p class="solid">实线边框。</p>
<p class="double">双线边框。</p>
<p class="groove">凹槽边框。</p>
<p class="ridge">垄状边框。</p>
<p class="inset">3D inset 边框。</p>
<p class="outset">3D outset 边框。</p>
<p class="none">无边框。</p>
<p class="hidden">隐藏边框。</p>
<p class="mix">混合边框。</p>

</body>
</html>

效果:

2.2border-width【边框宽度(厚度)】

border-width用来设置边框的宽度,单位可以是:“px(像素)”、“英文单词(thin、medium、thick等)”。

border-width也可以同时指定四条边的宽度不同,遵循:“配对原则顺时针原则”。

例如:

<!DOCTYPE html>
<html>
<head>
<style>
p.one {
  border-style: solid;
  border-width: 5px 20px; /* 上、下边框 5 像素,左、右边框 20 像素 */
}

p.two {
  border-style: solid;
  border-width: 20px 5px; /* 上、下边框 20 像素,左、右边框 5 像素 */
}

p.three {
  border-style: solid;
  border-width: 25px 10px 4px 35px; /* 上 25 像素、右 10 像素、下 4 像素、左 35 像素 */
}
</style>
</head>
<body>

<h1>border-width 属性</h1>

<p>border-width 属性可接受一到四个值(依次对应上、右、下、左边框):</p>

<p class="one">一些文本。</p>
<p class="two">一些文本。</p>
<p class="three">一些文本。</p>

</body>
</html>

效果:

2.3border-color【边框颜色】

border-color用来设置边框的颜色,属性值可以是:“英文单词(yellow、blue等)”、“RGB值”、“十六进制值”、“HSL值”。

border-color也可以同时设置四条边不同的颜色,遵循:“配对原则顺时针原则”。

例如:

<!DOCTYPE html>
<html>
<head>
<style>
p.one {
  border-style: solid;
  border-color: red;
}

p.two {
  border-style: solid;
  border-color: green;
} 

p.three {
  border-style: dotted;
  border-color: blue;
} 

p.four {
  border-style: dotted;
  border-color: red green blue yellow;
} 
</style>
</head>
<body>

<h1>border-color 属性</h1>

<p>此属性规定四条边框的颜色:</p>

<p class="one">红色实线边框</p>
<p class="two">绿色实线边框</p>
<p class="three">蓝色点状边框</p>
<p class="four">四种颜色点状边框</p>

<p><b>注释:</b>border-color 属性单独使用时不起作用。请首先使用 border-style 属性设置样式。</p>

</body>
</html>

效果:

2.4border【复合属性】

border复合属性允许我们一次写出“单独的某条边”、“所有的边”的所有属性

但不允许我们一次写出两条三条边的所有属性,这是不被认可的。

border属性有三个子属性:

  • border-width
  • border-style(必需)
  • border-color

如果我们想要一次性写出所有边的属性为:“宽度5px、实线、蓝色”,则可以这样写:

<!DOCTYPE html>
<html>
<head>
<style>
p {
  border: 5px solid blue;
}
</style>
</head>
<body>

<h1>border 属性</h1>

<p>此属性是 border-width、border-style 以及 border-color 的简写属性。</p>

</body>
</html>

效果:

如果我们只想给上边一个:“宽度5px、点线、蓝色”,那么可以这样写:

<!DOCTYPE html>
<html>
<head>
<style>
p {
  border-top: 5px solid blue;
}
</style>
</head>
<body>

<h1>border 属性</h1>

<p>此属性是 border-width、border-style 以及 border-color 的简写属性。</p>

</body>
</html>

效果:

注意,在我们想要编辑上面某条边的时候,我们没有用到border复合属性,因为border复合属性默认操作的是所有的边,我们只要操作一条边,所以要使用border的子属性“border-top”表示上边。

那如果我想要给上边使用:“宽度5px、实线、蓝色”,下边使用:“宽度5px、点线、蓝色”,可能有些读者会这样写:

//错误用法
<style>
p {
  border: 5px solid dotted blue;    //这样是错误的,因为border默认操作所有边,同时赋予solid和dotted两种边框样式会让程序出错无法正常显示
}
</style>
//正确用法
p {
  border-top: 5px solid blue;   
  border-right: 5px dotted blue;
}
</style>

2.5border-radius【圆角边框】

使用border-radius可以使我们的边框变得更圆滑,而不是方方正正的。

border-radius的属性值是一个数值长度,单位是:“px(像素)

数值越大,边框越圆

例如:

<!DOCTYPE html>
<html>
<head>
<style>
p.normal {
  border: 2px solid red;
}

p.round1 {
  border: 2px solid red;
  border-radius: 5px;
}

p.round2 {
  border: 2px solid red;
  border-radius: 8px;
}

p.round3 {
  border: 2px solid red;
  border-radius: 12px;
}
</style>
</head>
<body>

<h1>border-radius 属性</h1>

<p>此属性用于为元素添加圆角:</p>

<p class="normal">普通边框</p>
<p class="round1">圆角边框</p>
<p class="round2">角更圆的边框</p>
<p class="round3">角最圆的边框</p>

</body>
</html>

效果:

三.外边距合并【重要

外边距合并的意思是:

当两个垂直外边距相遇时,它们将合并成一个外边距,合并后的外边距的高度等于合并前两者的最大值”。

例如:

3.1两个垂直方向上盒子相遇:

3.2一个盒子包含另一个盒子时:

当一个盒子包含一个盒子,并且外部盒子没有设置内边距就会发生合并:

<html>
<head>

<style type="text/css">
* {
  margin:0;
  padding:0;
  border:0;
}

#outer {
  width:300px;
  height:300px;
  background-color:red;
  margin-top:20px;
}

#inner {
  width:50px;
  height:50px;
  background-color:blue;
  margin-top:10px;
}

</style>
</head>

<body>

<div id="outer">
  <div id="inner">
  </div>
</div>

<p>注释:请注意,如果不设置 div 的内边距和边框,那么内部 div 的上外边距将与外部 div 的上外边距合并(叠加)。</p>
</body>
</html>

效果:

但当外部盒子设置了内边距,就不会发生合并了。

<html>
<head>

<style type="text/css">
* {
  margin:0;
  padding:0;
  border:0;
}

#outer {
  width:300px;
  height:300px;
  background-color:red;
  margin-top:20px;
  padding: 10px;
}

#inner {
  width:50px;
  height:50px;
  background-color:blue;
  margin-top:30px;
}

</style>
</head>

<body>

<div id="outer">
  <div id="inner">
  </div>
</div>

<p>注释:设置 div内边距和边框,那么内部div的上边距将不会发生合并,并且此时内部div的上边距实际上是div上边距加外部div的内边距的和</p>
</body>
</html>

效果:

3.3外边距自我合并

一个标签的外边距甚至可以发生自我合并,这取决与标签是否设置了边框,如果没有设置边框,那么外边距就会自我合并。 

3.4注意

只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框绝对定位之间的外边距不会合并

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

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

相关文章

基于AI网关的光伏电站在线监测方案

光伏电站作为利用太阳能的重要方式&#xff0c;凭借其环保、高效和可持续性的优势&#xff0c;在全球范围内得到广泛应用。然而&#xff0c;光伏电站的运营和维护也面临着诸多难点和痛点。在这一背景下&#xff0c;AI智能网关的应用为光伏电站的运营和维护带来了新的突破。 光伏…

天梯算法Day3整理

浮点数解析 炸鱼题掠过 冲突值 题面 解析 方法一 —— 并查集 按照边值排序&#xff0c;然后按边值从大到小遍历&#xff0c;通过并查集判断能否将所有点无冲突地归于两个集合。在判断时&#xff0c;若有两个点不得不产生冲突&#xff0c;则输出这两个点之间的边值并结束。…

linux 网卡配置 vlan/bond/bridge/macvlan/ipvlan/macvtap 模式

linux 网卡模式 linux网卡支持非vlan模式、vlan模式、bond模式、bridge模式&#xff0c;macvlan模式、ipvlan模式等&#xff0c;下面介绍交换机端及服务器端配置示例。 前置要求&#xff1a; 准备一台物理交换机&#xff0c;以 H3C S5130 三层交换机为例准备一台物理服务器&…

变分信息瓶颈

变分信息瓶颈和互信息的定义 1 变分信息瓶颈 定义&#xff1a;变分信息瓶颈&#xff08;Variational Information Bottleneck&#xff09;是一种用于学习数据表示的方法&#xff0c;它旨在通过最小化输入和表示之间的互信息来实现数据的压缩和表示学习。这种方法通常用于无监…

OpenHarmony:全流程讲解如何编写ADC平台驱动以及应用程序

ADC&#xff08;Analog to Digital Converter&#xff09;&#xff0c;即模拟-数字转换器&#xff0c;可将模拟信号转换成对应的数字信号&#xff0c;便于存储与计算等操作。除电源线和地线之外&#xff0c;ADC只需要1根线与被测量的设备进行连接。 一、案例简介 该程序是基于…

Java基础语法(三)| 循环语句

前言 Hello&#xff0c;大家好&#xff01;很开心与你们在这里相遇&#xff0c;我是一个喜欢文字、喜欢有趣的灵魂、喜欢探索一切有趣事物的女孩&#xff0c;想与你们共同学习、探索关于IT的相关知识&#xff0c;希望我们可以一路陪伴~ 1. if语句 1.1 格式一 if (关系表达式) …

探讨企业邮箱安全问题:必须关注的四个关键要点

近年来&#xff0c;虽然出现了微信、企微等沟通方式&#xff0c;但电子邮件无疑仍然是公司对内对外沟通的首选方式。根据Statista的研究&#xff0c;每天大约有3330亿封电子邮件被发送和接收&#xff0c;预计这一数字在未来几年还会增长。然而&#xff0c;邮件诈骗的问题也一直…

SiameseRPN原理详解(个人学习笔记)

参考资源&#xff1a; 视觉目标跟踪SiamRPNSiameseRPN详解CVPR2018视觉目标跟踪之 SiameseRPN 目录&#xff09; 1. 模型架构1.1 Siamese Network1.2 RPN 2. 模型训练2.1 损失函数2.2 端到端训练2.3 正负样本选择 3. 跟踪阶段总结 SiamRPN是在SiamFC的基础上进行改进而得到的一…

web布局——说清楚fixed布局

极限省流 想要fixed做导航页面&#xff1a;指定清楚top、left、right、bottom&#xff0c;没指定清楚布局位置就会采用默认的方式&#xff1a; 0&#xff09;父元素的padding&#xff1a;fixed元素相对位移 1&#xff09;同级元素是fixed元素&#xff1a;覆盖 2&#xff09…

unrealbuildtool 无法找到,执行 Generate Visual Studio Project 错误

参考链接 Generate cpp project Couldnt find UnrealBuildTool - Pipeline & Plugins / Plugins - Epic Developer Community Forums (unrealengine.com) 错误提示如下图&#xff1a; 解决方案&#xff1a; 打开 UnrealBuildTool&#xff0c;生成解决方案就可以了

解决Veeam做replication复制或备份任务时速度很慢问题

在网络层面配置无问题&#xff0c;比如都是万兆网情况下&#xff0c;发现对一个10T大小Linux虚拟机执行replication复制任务时&#xff0c;每次都需要30几个小时才可以跑完。如下图&#xff1a; 如何能让它更快一点跑完任务呢&#xff1f; 解决方法&#xff1a;登录Veeam,进入…

Verilog语法回顾--门级和开关级模型

目录 门和开关的声明 门和开关类型 支持驱动强度的门 延迟 实例数组 and&#xff0c;nand&#xff0c;nor&#xff0c;or&#xff0c;xor&#xff0c;xnor buf&#xff0c;not bufif1&#xff0c;bufif0&#xff0c;notif1&#xff0c;notif0 MOS switches Bidirecti…

Ubuntu20.04LTS+uhd3.15+gnuradio3.8.1源码编译及安装

文章目录 前言一、卸载本地 gnuradio二、安装 UHD 驱动三、编译及安装 gnuradio四、验证 前言 本地 Ubuntu 环境的 gnuradio 是按照官方指导使用 ppa 的方式安装 uhd 和 gnuradio 的&#xff0c;也是最方便的方法&#xff0c;但是存在着一个问题&#xff0c;就是我无法修改底层…

2013年认证杯SPSSPRO杯数学建模A题(第一阶段)护岸框架全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 A题 护岸框架 原题再现&#xff1a; 在江河中&#xff0c;堤岸、江心洲的迎水区域被水流长期冲刷侵蚀。在河道整治工程中&#xff0c;需要在受侵蚀严重的部位设置一些人工设施&#xff0c;以减弱水流的冲刷&#xff0c;促进该处泥沙的淤积&…

在Windows中部署redis

下载redis Windows版redis在GitHub开源&#xff0c;由microsoftarchive维护,项目地址为 https://github.com/microsoftarchive/redis 找到releases&#xff0c;然后在latest中选择msi&#xff0c;或者zip进行下载 安装 msi安装包安装 下载完成后双击运行&#xff0c;同意协…

【御控物联】JavaScript JSON结构转换(11):数组To数组——综合应用

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON数组 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

公司服务器被.rmallox攻击了如何挽救数据?

公司服务器被.rmallox攻击了如何挽救数据&#xff1f; .rmallox这种病毒与之前的勒索病毒变种有何不同&#xff1f;它有哪些新的特点或功能&#xff1f; .rmallox勒索病毒与之前的勒索病毒变种相比&#xff0c;具有一些新的特点和功能。这种病毒主要利用加密技术来威胁用户&am…

消费盲返:新型返利模式引领购物新潮流

消费盲返&#xff0c;一种引领潮流的新型消费返利模式&#xff0c;其核心在于&#xff1a;消费者在平台选购商品后&#xff0c;不仅能享受优惠价格&#xff0c;更有机会获得后续订单的部分利润作为额外奖励。这种创新的返利机制&#xff0c;既提升了消费者的购物体验&#xff0…

小赢科技公布2023年业绩:业绩稳健增长,服务“触角”有效延伸

近日&#xff0c;金融科技公司小赢科技&#xff08;NYSE:XYF&#xff09;发布了2023年第四季度及全年未经审计的财务业绩。 财报显示&#xff0c;小赢科技2023年全年总净营收约为48.15亿元&#xff0c;同比增长35.1%&#xff1b;净利润约为11.87亿元&#xff0c;同比增长46.2%…

CCSDS CONVOLUTIONAL CODING 卷积码 规范

文章目录 3 CONVOLUTIONAL CODING3.1 overview3.2 general3.2.1 ATTACHED SYNC MARKER3.2.2 DATA RANDOMIZATION3.2.3 FRAME VALIDATION3.2.4 QUANTIZATION 3.3 BASIC CONVOLUTIONAL CODE SPECIFICATION3.4 PUNCTURED CONVOLUTIONAL CODES matlab中的 comm.ConvolutionalEncode…