CSS盒子模型

CSS 盒子模型(Box Model)

所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。

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

盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

 

CSS基础2

不同部分的说明:

  • Margin(外边距) - 清除边框外的区域,外边距是透明的。
  • Border(边框) - 围绕在内边距和内容外的边框。
  • Padding(内边距) - 清除内容周围的区域,内边距是透明的。
  • Content(内容) - 盒子的内容,显示文本和图像。

 最终元素的总宽度计算公式是这样的:总元素的宽度=宽度+左填充+右填充+左边框+右边框+左边距+右边距

元素的总高度最终计算公式是这样的:总元素的高度=高度+顶部填充+底部填充+上边框+下边框+上边距+下边距

CSS边框

border	简写属性,用于把针对四个边的属性设置在一个声明。
border-style	用于设置元素所有边框的样式,或者单独地为各边设置边框样式。
值	描述
none	定义无边框。
hidden	与 "none" 相同。不过应用于表时除外,对于表,hidden 用于解决边框冲突。
dotted	定义点状边框。在大多数浏览器中呈现为实线。
dashed	定义虚线。在大多数浏览器中呈现为实线。
solid	定义实线。
double	定义双线。双线的宽度等于 border-width 的值。
groove	定义 3D 凹槽边框。其效果取决于 border-color 的值。
ridge	定义 3D 垄状边框。其效果取决于 border-color 的值。
inset	定义 3D inset 边框。其效果取决于 border-color 的值。
outset	定义 3D outset 边框。其效果取决于 border-color 的值。


border-width	简写属性,用于为元素的所有边框设置宽度,或者单独地为各边边框设置宽度。
值	描述
thin	定义细的边框。
medium	默认。定义中等的边框。
thick	定义粗的边框。
length	允许您自定义边框的宽度。


border-color	简写属性,设置元素的所有边框中可见部分的颜色,或为 4 个边分别设置颜色。
值	说明
color	指定背景颜色。在CSS颜色值查找颜色值的完整列表
transparent	指定边框的颜色应该是透明的。这是默认


border-bottom	简写属性,用于把下边框的所有属性设置到一个声明中。
border-bottom-color	设置元素的下边框的颜色。
border-bottom-style	设置元素的下边框的样式。
值	说明
none	指定无边框
hidden	与"none" 相同。不过应用于表时除外,对于表,hidden 用于解决边框冲突。
dotted	指定点状边框
dashed	指定虚线边框
solid	指定实线边框
double	指定一个双边框
groove	定义双线。双线的宽度等于 border-width 的值
ridge	定义三维菱形边框。其效果取决于 border-color 的值
inset	定义三维凹边框。其效果取决于 border-color 的值
outset	定义三维凸边框。其效果取决于 border-color 的值

border-bottom-width	设置元素的下边框的宽度。
值	说明
thin	定义细的下边框
medium	默认值。定义中等的下边框
thick	定义粗的下边框
length	允许您自定义下边框的宽度


border-left	简写属性,用于把左边框的所有属性设置到一个声明中。
border-left-color	设置元素的左边框的颜色。
border-left-style	设置元素的左边框的样式。
border-left-width	设置元素的左边框的宽度。
border-right	简写属性,用于把右边框的所有属性设置到一个声明中。
border-right-color	设置元素的右边框的颜色。
border-right-style	设置元素的右边框的样式。
border-right-width	设置元素的右边框的宽度。
border-top	简写属性,用于把上边框的所有属性设置到一个声明中。
border-top-color	设置元素的上边框的颜色。
border-top-style	设置元素的上边框的样式。
border-top-width	设置元素的上边框的宽度。

CSS 轮廓(outline)

轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。

轮廓(outline)属性指定元素轮廓的样式、颜色和宽度。

outline	在一个声明中设置所有的轮廓属性
outline-color	设置轮廓的颜色
值	描述
color	指定轮廓颜色。在 CSS颜色值寻找颜色值的完整列表。
invert	默认。执行颜色反转(逆向的颜色)。可使轮廓在不同的背景颜色中都是可见。


outline-style	设置轮廓的样式
值	描述
none	默认。定义无轮廓。
dotted	定义点状的轮廓。
dashed	定义虚线轮廓。
solid	定义实线轮廓。
double	定义双线轮廓。双线的宽度等同于 outline-width 的值。
groove	定义 3D 凹槽轮廓。此效果取决于 outline-color 值。
ridge	定义 3D 凸槽轮廓。此效果取决于 outline-color 值。
inset	定义 3D 凹边轮廓。此效果取决于 outline-color 值。
outset	定义 3D 凸边轮廓。此效果取决于 outline-color 值。


outline-width	设置轮廓的宽度
值	描述
thin	规定细轮廓。
medium	默认。规定中等的轮廓。
thick	规定粗的轮廓。
length	允许您规定轮廓粗细的值。

CSS margin(外边距)

CSS margin(外边距)属性定义元素周围的空间。

margin 清除周围的(外边框)元素区域。margin 没有背景颜色,是完全透明的。

CSS基础2

margin-bottom	设置元素的下外边距。
margin-left	设置元素的左外边距。
margin-right	设置元素的右外边距。
margin-top	设置元素的上外边距。

CSS padding(填充)

CSS padding(填充)是一个简写属性,定义元素边框与元素内容之间的空间,即上下左右的内边距。

padding-bottom	设置元素的底部填充
padding-left	设置元素的左部填充
padding-right	设置元素的右部填充
padding-top	设置元素的顶部填充

CSS分组和嵌套

分组选择器
在样式表中有很多具有相同样式的元素。每个选择器用逗号分隔。
h1,h2,p
{
    color:green;
}

嵌套选择器
它可能适用于选择器内部的选择器的样式。
p{ }: 为所有 p 元素指定一个样式。
.marked{ }: 为所有 class="marked" 的元素指定一个样式。
.marked p{ }: 为所有 class="marked" 元素内的 p 元素指定一个样式。
p.marked{ }: 为所有 class="marked" 的 p 元素指定一个样式。

CSS尺寸

line-height	设置行高。
max-height	设置元素的最大高度。
max-width	设置元素的最大宽度。
min-height	设置元素的最小高度。
min-width	设置元素的最小宽度。
width	设置元素的宽度。
值	描述
none	默认。定义对元素的最大宽度没有限制。
length	定义元素的最大宽度值。
%	定义基于包含它的块级对象的百分比最大宽度。

CSS Display(显示) 与 Visibility(可见性)

隐藏元素 - display:none或visibility:hidden
隐藏一个元素可以通过把display属性设置为"none",或把visibility属性设置为"hidden"。但是请注意,这两种方法会产生不同的结果。

visibility:hidden可以隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间。也就是说,该元素虽然被隐藏了,但仍然会影响布局。
display:none可以隐藏某个元素,且隐藏的元素不会占用任何空间。也就是说,该元素不但被隐藏了,而且该元素原本占用的空间也会从页面布局中消失。

CSS Display - 块和内联元素
块元素是一个元素,占用了全部宽度,在前后都是换行符。
内联元素只需要必要的宽度,不强制换行。

可以更改内联元素和块元素,反之亦然,可以使页面看起来是以一种特定的方式组合,并仍然遵循web标准。
li {display:inline;}
span {display:block;}

注意:变更元素的显示类型看该元素是如何显示,它是什么样的元素。例如:一个内联元素设置为display:block是不允许有它内部的嵌套块元素。

CSS Position(定位)

position 属性指定了元素的定位类型。

position 属性的五个值:

static
relative
fixed
absolute
sticky
元素可以使用的顶部,底部,左侧和右侧属性定位。然而,这些属性无法工作,除非是先设定position属性。他们也有不同的工作方式,这取决于定位方法。

static 定位
HTML元素的默认值,即没有定位,元素出现在正常的流中。
静态定位的元素不会受到 top, bottom, left, right影响。

fixed 定位
元素的位置相对于浏览器窗口是固定位置。
即使窗口是滚动的它也不会移动
Fixed定位使元素的位置与文档流无关,因此不占据空间。
Fixed定位的元素和其他元素重叠。

relative 定位
相对定位元素的定位是相对其正常位置。
移动相对定位元素,但它原本所占的空间不会改变。

absolute 定位
绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于<html>
absolute 定位使元素的位置与文档流无关,因此不占据空间。
absolute 定位的元素和其他元素重叠。

sticky 定位
sticky 英文字面意思是粘,粘贴,所以可以把它称之为粘性定位。
position: sticky; 基于用户的滚动位置来定位。
粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。
它的行为就像 position:relative; 而当页面滚动超出目标区域时,它的表现就像 position:fixed;,它会固定在目标位置。
元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。
这个特定阈值指的是 top, right, bottom 或 left 之一,换言之,指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。
注意: Internet Explorer, Edge 15 及更早 IE 版本不支持 sticky 定位。 Safari 需要使用 -webkit- prefix (查看以下实例)。

重叠的元素
元素的定位与文档流无关,所以它们可以覆盖页面上的其它元素
z-index属性指定了一个元素的堆叠顺序(哪个元素应该放在前面,或后面)
一个元素可以有正数或负数的堆叠顺序:
bottom	定义了定位元素下外边距边界与其包含块下边界之间的偏移。
值	描述
auto	默认值。通过浏览器计算底部的位置。
%	设置以包含元素的百分比计的底边位置。可使用负值。
length	使用 px、cm 等单位设置元素的底边位置。可使用负值。

clip	剪辑一个绝对定位的元素
值	描述
shape	设置元素的形状。唯一合法的形状值是:rect (top, right, bottom, left)
auto	默认值。不应用任何剪裁。

cursor	显示光标移动到指定的类型
值	描述
url	需使用的自定义光标的 URL。
注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标。
default	默认光标(通常是一个箭头)
auto	默认。浏览器设置的光标。
crosshair	光标呈现为十字线。
pointer	光标呈现为指示链接的指针(一只手)
move	此光标指示某对象可被移动。
e-resize	此光标指示矩形框的边缘可被向右(东)移动。
ne-resize	此光标指示矩形框的边缘可被向上及向右移动(北/东)。
nw-resize	此光标指示矩形框的边缘可被向上及向左移动(北/西)。
n-resize	此光标指示矩形框的边缘可被向上(北)移动。
se-resize	此光标指示矩形框的边缘可被向下及向右移动(南/东)。
sw-resize	此光标指示矩形框的边缘可被向下及向左移动(南/西)。
s-resize	此光标指示矩形框的边缘可被向下移动(北/西)。
w-resize	此光标指示矩形框的边缘可被向左移动(西)。
text	此光标指示文本。
wait	此光标指示程序正忙(通常是一只表或沙漏)。
help	此光标指示可用的帮助(通常是一个问号或一个气球)。

left	定义了定位元素左外边距边界与其包含块左边界之间的偏移。
值	描述
auto	默认值。通过浏览器计算左边缘的位置。
%	设置以包含元素的百分比计的左边位置。可使用负值。
length	使用 px、cm 等单位设置元素的左边位置。可使用负值。

overflow 设置当元素的内容溢出其区域时发生的事情。
值	描述
visible	默认值。内容不会被修剪,会呈现在元素框之外。
hidden	内容会被修剪,并且其余内容是不可见的。
scroll	内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
auto	如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容

overflow-y 指定如何处理顶部/底部边缘的内容溢出元素的内容区域
overflow-x 指定如何处理右边/左边边缘的内容溢出元素的内容区域
值	描述
visible	不裁剪内容,可能会显示在内容框之外。
hidden	裁剪内容 - 不提供滚动机制。
scroll	裁剪内容 - 提供滚动机制。
auto	如果溢出框,则应该提供滚动机制。
no-display	如果内容不适合内容框,则删除整个框。
no-content	如果内容不适合内容框,则隐藏整个内容。

position	指定元素的定位类型
值	描述
absolute	
生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。
元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
fixed	
生成固定定位的元素,相对于浏览器窗口进行定位。
元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
relative	
生成相对定位的元素,相对于其正常位置进行定位。
因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。
static	默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
sticky	
粘性定位,该定位基于用户滚动的位置。
它的行为就像 position:relative; 而当页面滚动超出目标区域时,它的表现就像 position:fixed;,它会固定在目标位置。
注意: Internet Explorer, Edge 15 及更早 IE 版本不支持 sticky 定位。 Safari 需要使用 -webkit- prefix (查看以下实例)。

right	定义了定位元素右外边距边界与其包含块右边界之间的偏移。
top	定义了一个定位元素的上外边距边界与其包含块上边界之间的偏移。
值	描述
auto	默认值。通过浏览器计算右边缘的位置。
%	设置以包含元素的百分比计的右边位置。可使用负值。
length	使用 px、cm 等单位设置元素的右边位置。可使用负值。

z-index	设置元素的堆叠顺序
值	描述
auto	默认。堆叠顺序与父元素相等。
number	设置元素的堆叠顺序。

CSS 布局 - Overflow

CSS overflow 属性可以控制内容溢出元素框时在对应的元素区间内添加滚动条。

overflow属性有以下值:

值	描述
visible	默认值。内容不会被修剪,会呈现在元素框之外。
hidden	内容会被修剪,并且其余内容是不可见的。
scroll	内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
auto	如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
注意:overflow 属性只工作于指定高度的块元素上。

overflow: visible
默认情况下,overflow 的值为 visible, 意思是内容溢出元素框:

CSS Float(浮动)

CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列。

Float(浮动),往往是用于图像,但它在布局时一样非常有用。

clear	指定不允许元素周围有浮动元素。
值	描述
left	在左侧不允许浮动元素。
right	在右侧不允许浮动元素。
both	在左右两侧均不允许浮动元素。
none	默认值。允许浮动元素出现在两侧。

float	指定一个盒子(元素)是否可以浮动。
值	描述
left	元素向左浮动。
right	元素向右浮动。
none	默认值。元素不浮动,并会显示在其在文本中出现的位置。

CSS 布局 - 水平 & 垂直对齐

元素居中对齐
要水平居中对齐一个元素(如 <div>), 可以使用 margin: auto;。
设置到元素的宽度将防止它溢出到容器的边缘。
元素通过指定宽度,并将两边的空外边距平均分配:
注意: 如果没有设置 width 属性(或者设置 100%),居中对齐将不起作用。


文本居中对齐
如果仅仅是为了文本在元素内居中对齐,可以使用 text-align: center;


图片居中对齐
要让图片居中对齐, 可以使用 margin: auto; 并将它放到 块 元素中:

左右对齐 - 使用定位方式
我们可以使用 position: absolute; 属性来对齐元素:
注释:绝对定位元素会被从正常流中删除,并且能够交叠元素。
左右对齐 - 使用 float 方式
我们也可以使用 float 属性来对齐元素:

我们可以在父元素上添加 overflow: auto; 来解决子元素溢出的问题:

垂直居中对齐 - 使用 padding
CSS 中有很多方式可以实现垂直居中对齐。 一个简单的方式就是头部顶部使用 padding:

如果要水平和垂直都居中,可以使用 padding 和 text-align: center:

垂直居中 - 使用 line-height
垂直居中 - 使用 position 和 transform
除了使用 padding 和 line-height 属性外,我们还可以使用 transform 属性来设置垂直居中:

 

相关文章: