CSS盒子模型

什么是盒子模型

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

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

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

下面的图片说明了盒子模型(Box Model):

box-model

元素显示模式

元素的显示模式通俗来说就是元素以什么形式在网页显示,常见的显示模式有块元素和行内元素、以及行内块元素。不同的显示模式拥有各自独特的属性,可以在网页显示中搭配出非常完美的效果。

块元素

常见的块元素有<h1>~<h6><p><div><ul><ol><li>等,其中<div> 标签是最典型的元素。

  1. 块级元素的特点:

  2. 自己独占一行。

  3. 高度,宽度、外边距以及内边距都可以控制。

  4. 宽度默认是容器(父级宽度)的100%。

  5. 是一个容器及盒子,里面可以放行内或者块级元素。

注意:

  • 文字类的元素内不能使用块级元素

  • <p> 标签主要用于存放文字,因此<p> 里面不能放块级元素,特别是不能放<div>

  • 同理,<h1>~<h6>等都是文字类块级标签,里面也不能放其他块级元素

行内元素

常见的行内元素有<a><strong>、<b>、<em>、<i><del><s><ins><u><span>等,其中

<span> 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。

行内元素的特点:

  1. 相邻行内元素在一行上,一行可以显示多个。
  2. 高、宽直接设置是无效的。
  3. 默认宽度就是它本身内容的宽度。
  4. 行内元素只能容纳文本或其他行内元素。

注意:

  1. 链接里面不能再放链接
  2. 特殊情况链接<a> 里面可以放块级元素,但是给<a> 转换一下块级模式最安全

行内块元素

在行内元素中有几个特殊的标签——<img /><input /><td>,它们同时具有块元素和行内元素的特点。

有些资料称它们为行内块元素。

行内块元素的特点:

  1. 和相邻行内元素(行内块)在一行上,但是他们之间会有空白缝隙。一行可以显示多个(行内元素特点)。
  2. 默认宽度就是它本身内容的宽度(行内元素特点)。
  3. 高度,行高、外边距以及内边距都可以控制(块级元素特点)。

元素类型转换

  1. 转换为块元素:display:block;
  2. 转换为行内元素:display:inline;
  3. 转换为行内块:display: inline-block;

元素属性

高度宽度元素属性

高度宽度只在块级元素或者行内块元素中有效,行内元素想要使用下列属性需要将行内元素转换成块级元素:

height:元素高度属性

weight:元素宽度属性

例如想要设置一个高度为40,宽度为60的盒子:

<head>
    <style>
        div {
            height: 40px;
            width: 60px;
        }
    </style>
</head>
<body>
    <div></div>
</body>

边框(border)

border可以设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框样式边框颜色。

语法:

border : border-width || border-style || border-color

边框样式border-style 可以设置如下值:

  • none:没有边框即忽略所有边框的宽度(默认值)
  • solid:边框为单实线(最为常用的)
  • dashed:边框为虚线
  • dotted:边框为点线
描述
border-width 规定边框的宽度。参阅:border-width 中可能的值。
border-style 规定边框的样式。参阅:border-style 中可能的值。
border-color 规定边框的颜色。参阅:border-color 中可能的值。

例如,我们设置div的边框为一像素的黑色实线边框

<head>
    <style>
        div {
            border: 1px solid #000;
        }
    </style>
</head>
<body>
    <div></div>
</body>

CSS 边框属性允许你指定一个元素边框的样式和颜色。

边框简写:

border: 1px solid red; /* 没有顺序*/

边框分开写法:

border-top: 1px solid red; /* 只设定上边框,其余同理*/

border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。

语法:

border-collapse:collapse;
  • collapse 单词是合并的意思
  • border-collapse: collapse; 表示相邻边框合并在一起

注意:边框会额外增加盒子的实际大小

内边距

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

属性 说明
padding 使用简写属性设置在一个声明中的所有填充属性
padding-bottom 设置元素的底部填充
padding-left 设置元素的左部填充
padding-right 设置元素的右部填充
padding-top 设置元素的顶部填充

padding 属性(简写属性)可以有一到四个值。

padding:25px 50px 75px 100px;
  • 上填充为25px
  • 右填充为50px
  • 下填充为75px
  • 左填充为100px
padding:25px 50px 75px;
  • 上填充为25px
  • 左右填充为50px
  • 下填充为75px
 padding:25px 50px;
  • 上下填充为25px
  • 左右填充为50px
 padding:25px;
  • 所有的填充都是25px

当我们给盒子指定padding 值之后,发生了2 件事情:

  1. 内容和边框有了距离,添加了内边距。
  2. padding影响了盒子实际大小。
    也就是说,如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子。

外边距

margin 属性用于设置外边距,即控制盒子和盒子之间的距离。

属性 描述
margin 简写属性。在一个声明中设置所有外边距属性。
margin-bottom 设置元素的下外边距。
margin-left 设置元素的左外边距。
margin-right 设置元素的右外边距。
margin-top 设置元素的上外边距。

margin 简写方式代表的意义跟padding 完全一致。

外边距可以让块级盒子水平居中,但是必须满足两个条件:

  1. 盒子必须指定了宽度(width)。
  2. 盒子左右的外边距都设置为auto 。
<head>
    <style>
        div {
            width: 1200px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div></div>
</body>

注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加text-align:center 即可。

外边距合并

使用margin 定义块元素的垂直外边距时,可能会出现外边距的合并。
主要有两种情况:

  1. 相邻块元素垂直外边距的合并
  2. 嵌套块元素垂直外边距的塌陷

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

使用margin 定义块元素的垂直外边距时,可能会出现外边距的合并。

当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top ,则他们之间的垂直间距不是margin-bottom 与margin-top 之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并。

解决方案:
尽量只给一个盒子添加margin 值。

image-20210508232350609

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

对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。

解决方案:

  1. 可以为父元素定义上边框。
  2. 可以为父元素定义上内边距。
  3. 可以为父元素添加overflow:hidden。
  4. 盒子内设置属性尽量用内边距不要用外边距

image-20210508232558544

还有其他方法,比如浮动、固定,绝对定位的盒子不会有塌陷问题。

其他元素属性

圆角边框

在CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。

border-radius 属性用于设置元素的外边框圆角。

语法:

border-radius:length;
  1. 参数值可以为数值或百分比的形式
  2. 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为50%
  3. 该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角
  4. 分开写:border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和
    border-bottom-left-radius
  5. 兼容性ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用

盒子阴影

CSS3 中新增了盒子阴影,我们可以使用box-shadow 属性为盒子添加阴影。

语法:

box-shadow: h-shadow v-shadow blur spread color inset;
说明
h-shadow 必需的。水平阴影的位置。允许负值
v-shadow 必需的。垂直阴影的位置。允许负值
blur 可选。模糊距离
spread 可选。阴影的大小
color 可选。阴影的颜色。在CSS颜色值寻找颜色值的完整列表
inset 可选。从外层的阴影(开始时)改变阴影内侧阴影
div
{
	box-shadow: 10px 10px 5px #888888;
} 

注意:

  1. 默认的是外阴影(outset), 但是不可以写这个单词,否则造成阴影无效
  2. 盒子阴影不占用空间,不会影响其他盒子排列。

文字阴影

在CSS3 中,我们可以使用text-shadow 属性将阴影应用于文本。

语法:

text-shadow: h-shadow v-shadow blur color;
描述
h-shadow 必需。水平阴影的位置。允许负值。
v-shadow 必需。垂直阴影的位置。允许负值。
blur 可选。模糊的距离。
color 可选。阴影的颜色。参阅 CSS 颜色值
h1
{
    text-shadow: 2px 2px #ff0000;
} 
posted @ 2021-05-09 00:38  JSW79  阅读(93)  评论(0编辑  收藏  举报
隐藏目录