关于css盒子边框、内边距、外边距

html-css025

关于css盒子边框、内边距、外边距,第1张

使用width来设置盒子内容区的宽度 使用height来设置盒子内容区的高度 width和height只是设置的盒子内容区的大小,而不是盒子的整个大小,盒子可见框的大小由内容区,内边距和边框共同决定为元素设置边框 要为一个元素设置边框必须指定三个样式border-width:边框的宽度border-color:边框颜色border-style:边框的样式使用border-width可以分别指定四个边框的宽度 如果在border-width指定了四个值 则四个值会分别设置给上、右、下、左,按照顺时针的方向设置的 如果指定三个值 则三个值会分别设置给上、左右、下 如果指定两个值 则两个值会分别设置给上下、左右 如果指定一个值,则四边全都是该值 除了border-width,CSS中还提供了四个border-xxx-width xxx的值可能是top right bottom left 专门用来设置指定边的宽度* 设置边框的颜色 * 和宽度一样,color也提供四个方向的样式,可以分别指定颜色 例如:border-color: red /*border-color: red yellow orange blue*/ /*border-color: red yellow orange*/ /*border-color: red yellow*/ 格式和边框设置颜色相同.* 设置边框的样式 * 可选值: * none,默认值,没有边框 * solid 实线 * dotted 点状边框 * dashed 虚线 * double 双线 * * style也可以分别指定四个边的边框样式,规则和width一致,同时它也提供border-xxx-style四个样式,来分别设置四个边设置边框 大部分的浏览器中,边框的宽度和颜色都是有默认值,而边框的样式默认值都是none */ /* border-width: 10px border-color: red border-style: solid*/ /* border - 边框的简写样式,通过它可以同时设置四个边框的样式,宽度,颜色 - 而且没有任何的顺序要求 - border一指定就是同时指定四个边不能分别指定 border-top border-right border-bottom border-left 可以单独设置四个边的样式,规则和border一样,只不过它只对一个边生效 */ /*border: red solid 10px*/ /*border-left: red solid 10px*/内边距: 内边距(padding),指的是盒子的内容区与盒子边框之间的距离,一共有四个方向: padding-top padding-right padding-bottom padding-left 内边距会影响盒子的可见框的大小,元素的背景会延伸到内边距 盒子的大小由内容区、内边距和边框共同决定 盒子可见框的宽度 = border-left-width + padding-left + width + padding-right + border-right-width 盒子可见框的高度 = border-top-width + padding-top + height + padding-bottom + border-bottom-width */ /*设置上内边距*/ /*padding-top: 100px*/ /*设置右内边距*/ /*padding-right: 100px padding-bottom: 100px padding-left: 100px*/ /* 使用padding可以同时设置四个边框的样式,规则和border-width一致 */ /*padding: 100px*/ /*padding: 100px 200px*/ /*padding: 100px 200px 300px*/外边距: 外边距指的是当前盒子与其他盒子之间的距离,他不会影响可见框的大小,而是会影响到盒子的位置 盒子有四个方向的外边距: margin-top margin-right margin-bottom margin-left 由于页面中的元素都是靠左靠上摆放的,所以注意当我们设置上和左外边距时,会导致盒子自身的位置发生改变,而如果是设置右和下外边距会改变其他盒子的位置 */ /*设置上外边距,即盒子的上边框与其他盒子的距离*/ /*margin-top: 100px*/ /*左外边距*/ /*margin-left: 100px*/ /*设置右和下外边距*/ /*margin-right: 100px margin-bottom: 100px*/ /* 外边距也可以指定为一个负值,如果外边距设置的是负值,则元素会向反方向移动 */ /*margin-left: -100px margin-top: -100px margin-bottom: -100px*/ /*margin-bottom: -100px*/ /* margin还可以设置为auto,auto一般只设置给水平方向的margin 如果只指定,左外边距或右外边距的margin为auto则会将外边距设置为最大值 垂直方向外边距如果设置为auto,则外边距默认就是0 如果将left和right同时设置为auto,则会将两侧的外边距设置为相同的值,就可以使元素自动在父元素中居中 所以我们经常将左右外边距设置为auto,以使子元素在父元素中水平居中 */ /*margin-left: auto margin-right: auto*/ /*margin-top: auto*/ /* 外边距同样可以使用简写属性 margin,可以同时设置四个方向的外边距,规则和padding一样 */ /*margin: 10px 20px 30px 40px*/ 为上边的元素设置一个下外边距:margin-bottom: 100px 为下边的元素设置一个上外边距:margin-top: 100px垂直外边距的重叠 在网页中相邻的垂直方向的外边距会发生外边距的重叠 所谓的外边距重叠指兄弟元素之间的相邻外边距会取最大值而不是取和 如果父子元素的垂直外边距相邻了,则子元素的外边距会设置给父元素.box3{ width: 200px height: 100px background-color: yellow /*为box3设置一个上边框*/ /*border-top: 1px red solid*/ /*padding-top: 1px*/ padding-top: 100px}.box4{ width: 100px height: 100px background-color: yellowgreen /*为子元素设置一个上外边距,使子元素的位置下移*/ /*margin-top: 100px*/浏览器为了在页面中没有样式时,也可以有一个比较好的显示效果,所以为很多的元素都设置了一些默认的margin和padding,而它的这些默认样式,正常情况下我们是不需要使用的。 所以我们往往在编写样式之前需要将浏览器中的默认的margin和padding统统的去掉 格式: *{ margin: 0 padding: 0}

在CSS中,所有元素被“ 盒子 ”所包围,利用盒模型的基本原理来实现CSS准确布局,元素排列等处理

CSS广泛使用的两种盒子,其在页面流和元素之间的关系表现为不同的行为:

对于定义为块级盒子(block)的元素会表现出以下行为:

对于定义为内联盒子(inline)的元素会表现出以下行为:

通过对盒子设置display的属性值,来控制盒子的外部显示类型

外部显示类型与内部显示类型

外部显示类型:决定盒子是块级还是内联,即决定了盒子之间的布局方式

内部显示类型:决定了盒子内部的元素是如何布局的,默认情况是按照正常文档流布局,也可以通过设置display值为flex和grid来改变内部元素之间的布局方式

不同显示类型的例子

block:

图中段落里的 <span>word </span>被设置为 display:block

因此其独占一行,宽度填满整个父元素

flex:

图中的列表被设置为 display:block ,每个列表是一个块级元素 —— 像段落一样 —— 会充满整个容器的宽度并且换行

inline-flex与inline

图中的列表被设置为 display:inline-flex ,使得在一些flex元素外创建一个内联框

最后设置两个段落为 display: inline , inline flex 容器和两个段落在同一行上,而不是像块级元素一样换行

CSS组成一个盒模型需要以下几个部分:

在标准模型中,如果你给盒设置 width 和 height,实际设置的是 content box。 padding 和 border 再加上设置的宽高一起决定整个盒子的大小

如果使用标准模型宽度 = 410px (350 + 25 + 25 + 5 + 5),高度 = 210px (150 + 25 + 25 + 5 + 5),padding 加 border 再加 content box

如果使用替代模型,一切都将变得简单很多,此时的 width 和 height 就是盒子可见的宽度与高度,无论怎么改变 padding 或 border 的值,都会通过压缩 conten box 的大小来保持 width 和 height 的值不变

如需使用,只需要声明以下CSS样式:

外边距是盒子周围一圈看不到的空间。它会把其他元素从盒子旁边推开。 外边距属性值可以为正也可以为负。设置负值会导致和其他内容重叠。无论使用标准模型还是替代模型,外边距总是在计算可见部分后额外添加

CSS:

html:

结果如下:因为上外边距设置为负值,所以两个边框会重叠

外边距折叠

理解外边距的一个关键是外边距折叠的概念。如果你有两个外边距相接的元素,这些外边距将合并为一个外边距,即最大的单个外边距的大小

结果如下,中间间隔的部分为50px

如下图所示,对内联盒子设置 width 和 height 都不会生效,虽然margin,padding和border会生效,但不会改变与其它内联盒子的关系,因此其内边距和边框会与段落的其它元素重叠

要避免上述情况,只需要将内联盒子的display值设置为inline-block即可

设置之后的效果为:

但因其保留有inline的特征,所以它不会跳转到新行

float可以使得当前元素脱离正常文本流,并吸附到父元素的左边(left)或者右边(right)正常布局中位于该浮动元素之下的内容,此时会围绕着浮动元素进行排列

基本的常见用途在于图片与文字环绕排版以及首字母下沉:

重点是这个,元素浮动具有一定的规则与限制

设置如下三个盒子(均以块级元素方式呈现):

将box1设置为向右浮动:

因为box1脱离正常文档流,所以box2和box3会向上填补box1的空位,box1浮动到父元素(body)的最右边

设置box1向左浮动:

同理,box1脱离正常文档流,box2与box3向上填补box1的空位,此时box1浮动到父元素(body)的最左边,所以会覆盖掉box2(浮动元素在正常流文档的上方)

设置box2向左浮动:

可以看到box3因为box2脱离正常文档流而向上填充其空位,box2因为浮动到左边覆盖了box3,然而box1仍处于正常文档流中,并且在html文件中最先声明,所以box2只能在box1的下方进行浮动(即使box2设置为向右浮动也是一样)

设置box1、box2与box3都向左浮动:

可以看到三个盒子均向左浮动,直到碰到前一个浮动框的边缘为止(对于box1来说是碰到父元素的边缘),因此呈现如此的排列状况

如果当父元素太窄,无法包含三个盒子的宽度,则无法容纳的元素向下移动,直到有足够的空间使得其能向某个方向浮动,如下图所示:

如果浮动元素的高度不同,那么当它们向下移动时可能被其它浮动元素“卡住”

相关参考:

https://zhuanlan.zhihu.com/p/21286019?refer=miaomiaoji

https://www.jianshu.com/p/fe1052f1a8b6

浮动的规则先讨论到此

高度塌陷

在父元素container内设置一个盒子box1,此时没有设置浮动,box1会撑起父元素container的高度

如果此时设置box1浮动,因为其脱离了正常文档流,无法撑起盒子的高度,所以将发生高度塌陷:

为了解决这个问题,在此提供三种方法:

1. 添加额外标签

首先在父元素内添加空白内容的额外标签clearfix

然后再CSS规则中添加以下内容:

通过清除父元素内空白元素的浮动,使得父元素边框重新包含浮动内容

2. 父级元素添加overflow属性

直接在父元素内添加overflow属性:

同样可以清除浮动,结果如下:

3. after伪元素

html文档改为:

在CSS规则里添加:

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

值的个数 /表达意思

padding:5px 1个值,代表上下左右都有5像素内边距;

padding:5px 10px 2个值,代表上下内边距是5像素 左右内边距是10像素;

padding:5px 10px 20px3个值,代表上内边距5像素,左右内边距10像素,下内边距20像素;

padding:5px 10px 20px 30px 4个值,上是5像素,右是10像素,下是20像素,左是30像素,顺时针。

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

给指定盒子添加padding值之后: