整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

css盒子模型

、盒子模型

本章目标

  • 理解盒子模型及其构成
  • 会计算盒子模型尺寸
  • 会使用盒子模型的两种解析方式来布局网页
  • 会使用圆角属性给网页元素添加圆角效果
  • 会使用盒子阴影属性给网页元素添加阴影效果

3.1、什么是盒子模型

讲解盒子模型及属性,并说明边框、外边框和内边框都是四个边,最后介绍盒子模型的立体结构.

在这里插入图片描述

.文档流

  • 最底下的一层称为文档流,文档流是网页的基础,我们所创建的元素默认都是在文档流中进行排列
  • 对于我们来元素主要有两个状态 在文档流中 不在文档流中(脱离文档流)

1.1 元素在文档流中的特点

  • 块元素
    • 块元素会在页面中独占一行(自上向下垂直排列)
    • 默认宽度是父元素的全部(会把父元素撑满)
    • 默认高度是被内容撑开(子元素)
<div class="box1">我是div1</div>
<div class="box2">我是div2</div>
  • 行内元素
    • 行内元素不会独占页面的一行,只占自身的大小
    • 行内元素在页面中左向右水平排列,如果一行之中不能容纳下所有的行内元素 , 则元素会换到第二行继续自左向右排列(书写习惯一致)
    • 行内元素的默认宽度和高度都是被内容撑开
    <span>我是span1</span>
    <span>我是span2</span>
    <span>我是span2</span>
    <span>我是span2</span>
    <span>我是span2</span>
    <span>我是span2</span>
    <span>我是span2</span>
    <span>我是span2</span>


2. 盒模型

2.1 内容

  • 内容区(content),元素中的所有的子元素和文本内容都在内容区中排列
  • 内容区的大小由width 和 height两个属性来设置width 设置内容区的宽度 height 设置内容区的高度

2.2 边框

2.2.1 宽度

  • 边框的宽度 border-width
  • border-width可以用来指定四个方向的边框的宽度 值的情况 四个值:上 右 下 左 三个值:上 左右 下 两个值:上下 左右 一个值:上下左右
  • border-width还有一组 border-xxx-width xxx可以是 top right bottom left 用来单独指定某一个边的宽度
border-width: 10px;
border-top-width: 10px;
border-left-width: 30px;

2.2.2 颜色

  • 边框的颜色 border-color
  • border-color用来指定边框的颜色,同样可以分别指定四个边的边框规则和border-width一样
  • border-color也可以省略不写,如果省略了则自动使用color的颜色值
border-color: orange red yellow green;
border-color: orange;

2.2.3 样式

  • 边框的样式 border-style
  • border-style 指定边框的样式
    • solid 表示实线
    • dotted 点状虚线
    • dashed 虚线
    • double 双线
  • border-style的默认值是none 表示没有边框
border-style: solid dotted dashed double;
border-style: solid;

2.2.4 补充

  • border简写属性,通过该属性可以同时设置边框所有的相关样式,并且没有顺序要求
    • border-top
    • border-right
    • border-bottom
    • border-left
border-top: 10px solid red;
             border-left: 10px solid red;
             border-bottom: 10px solid red;

2.3 内边距

  • 内容区和边框之间的距离是内边距
  • 一共有四个方向的内边距:
    • padding-top
    • padding-right
    • padding-bottom
    • padding-left
  • 内边距的设置会影响到盒子的大小
  • 背景颜色会延伸到内边距上
padding-top: 100px;
            padding-left: 100px;
            padding-right: 100px;
            padding-bottom: 100px;
  • padding 内边距的简写属性,可以同时指定四个方向的内边距规则和border-width 一样
padding: 10px 20px 30px 40px;
             padding: 10px 20px 30px ;
             padding: 10px 20px ;
             padding: 10px ;

2.4 外边距

  • 外边距不会影响盒子可见框的大小
  • 但是外边距会影响盒子的位置
  • 一共有四个方向的外边距:
    • 左外边距,设置一个正值,元素会向右移动
    • 下外边距,设置一个正值,其下边的元素会向下移动
    • 默认情况下设置margin-right不会产生任何效果
    • 上外边距,设置一个正值,元素会向下移动
    • margin-top
    • margin-right
    • margin-bottom
    • margin-left
  • margin也可以设置负值,如果是负值则元素会向相反的方向移动
  • 元素在页面中是按照自左向右的顺序排列的,所以默认情况下如果我们设置的左和上外边距则会移动元素自身设置下和右外边距会移动其他元素
  • margin的简写属性margin 可以同时设置四个方向的外边距 ,用法和padding一样
  • margin会影响到盒子实际占用空间
/* margin-top: 100px;
            margin-left: 100px;
            margin-bottom: 100px; */

            /* margin-bottom: 100px; */
            /* margin-top: -100px; */
            /* margin-left: -100px; */
            /* margin-bottom: -100px; */

            /* margin-right: 0px; */

3. 水平布局

  • 元素的水平方向的布局:
    • margin-left
    • border-left
    • padding-left
    • width
    • padding-right
    • border-right
    • margin-right
    • 元素在其父元素中水平方向的位置由以下几个属性共同决定“
  • 一个元素在其父元素中,水平布局必须要满足以下的等式
  • margin-left+border-left+padding-left+width+padding-right+border-right+margin-right = 其父元素内容区的宽度
  • 水平居中
width:xxxpx;
margin:0 auto;

4. 垂直布局

  • 默认情况下父元素的高度被内容撑开
  • 子元素是在父元素的内容区中排列的,
    • 可选值:visible,默认值 子元素会从父元素中溢出,在父元素外部的位置显示hidden 溢出内容将会被裁剪不会显示scroll 生成两个滚动条,通过滚动条来查看完整的内容auto 根据需要生成滚动条
    • 如果子元素的大小超过了父元素,则子元素会从父元素中溢出
    • 使用 overflow 属性来设置父元素如何处理溢出的子元素
overflow: auto;

5. 外边距折叠

  • 垂直外边距的重叠(折叠)
    • 父子元素间相邻外边距,子元素的会传递给父元素(上外边距)
    • 父子外边距的折叠会影响到页面的布局,必须要进行处理
    • 兄弟元素间的相邻垂直外边距会取两者之间的较大值(两者都是正值)
    • 特殊情况:如果相邻的外边距一正一负,则取两者的和如果相邻的外边距都是负值,则取两者中绝对值较大的
    • 相邻的垂直方向外边距会发生重叠现象
    • 兄弟元素
    • 兄弟元素之间的外边距的重叠,对于开发是有利的,所以我们不需要进行处理
    • 父子元素
.box1{
           background-color: #bfa;

           /* 设置一个下外边距 */
           margin-bottom: 100px;
      }

       .box2{
           background-color: orange;

           /* 设置一个上外边距 */
           margin-top: 100px;
      }

       .box3{
           width: 200px;
           height: 200px;
           background-color: #bfa;
           /* padding-top: 100px; */
           /* border-top: 1px #bfa solid; */
      }

6.行内元素的盒模型

  • 行内元素不支持设置宽度和高度
  • 行内元素可以设置padding,但是垂直方向padding不会影响页面的布局
  • 行内元素可以设置border,垂直方向的border不会影响页面的布局
  • 行内元素可以设置margin,垂直方向的margin不会影响布局
width: 100px;
height: 100px;
padding: 100px;
border: 100px solid red;

6.1 display

  • 设置元素显示的类型
  • 可选值:
    • inline 将元素设置为行内元素
    • block 将元素设置为块元素
    • inline-block 将元素设置为行内块元素 , 行内块,既可以设置宽度和高度又不会独占一行
    • table 将元素设置为一个表格
    • none 元素不在页面中显示

6.2 visibility

  • 设置元素的显示状态
  • 可选值:
    • visible 默认值,元素在页面中正常显示
    • hidden 元素在页面中隐藏 不显示,但是依然占据页面的位置
display: block;

visibility: hidden;

7.盒子的尺寸

  • 默认情况下,盒子可见框的大小由内容区、内边距和边框共同决定
  • box-sizing 用来设置盒子尺寸的计算方式(设置width和height的作用)
    • content-box 默认值,宽度和高度用来设置内容区的大小
    • border-box 宽度和高度用来设置整个盒子可见框的大小
    • 可选值:
    • width 和 height 指的是内容区 和 内边距 和 边框的总大小
.box1{
           width: 100px;
           height: 100px;
           background-color: #bfa;
           padding: 10px;
           border: 10px red solid;
  box-sizing: border-box;
      }

8. 轮廓和圆角

8.1 阴影box-shadow

  • box-shadow 用来设置元素的阴影效果,阴影不会影响页面布局
    • 第一个值 水平偏移量 设置阴影的水平位置 正值向右移动 负值向左移动
    • 第二个值 垂直偏移量 设置阴影的水平位置 正值向下移动 负值向上移动
    • 第三个值 阴影的模糊半径
    • 第四个值 阴影的颜色
box-shadow: 0px 0px 50px rgba(0, 0, 0, .3) ;

8.2 轮廓线outline

  • outline 用来设置元素的轮廓线,用法和border一模一样
  • 轮廓和边框不同的点,就是轮廓不会影响到可见框的大小
.box1:hover{
           outline: 10px red solid;
      }

8.3 圆角 border- redius

  • border-radius: 用来设置圆角 圆角设置的圆的半径大小
  • border-radius 可以分别指定四个角的圆角
    • 四个值 左上 右上 右下 左下
    • 三个值 左上 右上/左下 右下
    • 两个个值 左上/右下 右上/左下

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

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

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

1.1 盒子模型

在学习盒子模型之前,先来看一个生活中的例子。假如墙上排列着几幅画。对于每幅画来说,都有一个边框,在英文中称为border;每个画框中,画和边框通常都会有一定的距离,这个距离称为内边距,在英文中称为padding;每一幅画间也不是紧挨着的,也存在一些距离称为外边距,在英文中称为margin。

在CSS中,一个独立的盒子模型由content(页面内容)、border(边框)、padding(内边距)、margin(外边距)四部分组成

1.content:位于最中间,页面的主要显示内容,也就是这幅画的本身2.border:位于内边距外面,如果没有内边距就是包着内容的外框。它一般具有一定的厚度,也就是这幅画的画框3.padding:位于边框内部的空隙,是内容与边框的距离,也就是画框和图之画之间的空隙4.margin:位于边框内部空隙,边框外面周围的距离,也就是每幅画之间的空隙

1.1.1 边框

边框(border)有三个属性,分别是color(颜色)、width(粗细)和style(样式)。在网页中设置边框样式时,尝尝需要将这三个属性很好地配合起来,才能达到良好的页面效果。在使用CSS设置边框时,分别使用border-color、border-width和border-style设置边框的颜色、粗细和样式

border-color

border-color的设置方法与文本的color属性或背景颜色bancground-color属性的设置方法完全一样,也是使用十六进制设置边框的颜色,如红色为#FF0000,也可以使用RGBA的颜色表示方法。

由于盒子模型分为上、下、左、右四个边框,因此在设置边框颜色时,可以按上、右、下、左的顺序来设置四个边框颜色,也可以同时设置四个边框的颜色。border-color属性设置方法如下:

属性说明举例border-top-color设置上边框颜色border-top-color:#369border-right-color设置右边框颜色border-right-color:#369border-bottom-color设置下边框颜色border-bottom-color:#FAE45Bborder-left-color设置左边框颜色border-left-color:#EEFF34border-color设置四个边框颜色为同一个颜色border-color:#EEFF34

当使用border-color属性同时设置四条边框颜色时,设置顺序按顺时针方向上、右、下、左设置边框颜色,属性值之间以空格隔开。没有设置属性值的找对边

例如:border-color:#369 #000 #F00 #00F;四个属性按上、右、下、左依次对号入座。

例如:border-color:#369 #000 #F00;三个属性值按上、右、下、左依次对号入座。#369对应上边框,#000对应右边框,#F00对应下边框,发现到“左”的时候没有属性值了,这时候找它的对边。因为“左”的对边是“右”所以#000对应左边框

以后无论给出几个属性值都按照“上、右、下、左”“没有找对边”的方式来对应

border-width

border-width用来指定border的粗细程度,它的值有thin、medium、thick和像素值

thin :设置细的边框

medium:默认值,设置中等的边框一般的浏览器都将其解析为2px

thick:设置粗的边框

像素值:表示具体的数值,自定义设置边框的宽度,如1px、5px等

border-style

border-style用来指定border的样式,它的值有none、hidden、dotted、dashed、solid、double、groove、ridge和outset,其中none、dotted、dashed、solid在实际网页制作中是经常用到的值。none表示无边框,dotted表示点线边框,dashed表示虚线边框,solid表示实现边框。由于dotted和dashed在大多数浏览器显示为实线,因此在实际网页中,为了浏览器兼容性,常用none和solid。

值含义none默认无边框dotted定义一个点线边框dashed定义一个虚线边框solid定义实线边框double定义两个边框。 两个边框的宽度和 border-width 的值相同groove定义3D沟槽边框。效果取决于边框的颜色值ridge定义3D脊边框。效果取决于边框的颜色值inset定义一个3D的嵌入边框。效果取决于边框的颜色值outset定义一个3D突出边框。 效果取决于边框的颜色值

示例

<!DOCTYPE html><html><headlang="en"><metacharset="UTF-8"><title></title><style>div{        width: 200px;        height: 200px;        border: 1px solid black;  /*设置div边框,1px黑色的实线边框*/    }    p:nth-of-type(1){        width: 100px;        border: 1px dotted red;  /*设置第一个p标签边框为1px的点状虚线*/    }    p:nth-of-type(2){        width: 100px;        border: 1px dashed yellow;/*设置第二个p标签边框为1px的虚线边框*/    }    p:nth-of-type(3){        width: 100px;        border: 4px double blue;/*设置第三个p标签边框为4px的双线边框*/    }</style></head><body><div><p>第一段落</p><p>第二段落</p><p>第三段落</p></div></body></html>

1.1.2 外边距

外边距(margin)位于盒子边框外,指与其他盒子之间的距离,也就是指网页中元素与元素之间的距离,例如示例1效果图中标题与div上边框之间的距离,以及标题与下方表单之间的距离都是由h2外边距产生的。从图中也可以看到页面内容并没有紧贴浏览器,而是与浏览器有一定的距离,这就是因为body本身也是一个盒子,也有一个外边距,这也是由body的外边距产生的。

外边距与边框一样,也分为上外边距、右外边距、下外边距、左外边距,使用方法和border-color方法一样。

1.1.3 内边距

内边距(padding)用于控制内容与边框之间的距离,以便精确控制内容在盒子中的位置。内边距与外边距一样,也分为上内边距、右内边距、下内边距、左内边距,设置方式和设置顺序也都一样,请参照border-color设置方法。

示例

<!DOCTYPE html><html><headlang="en"><metacharset="UTF-8"><title></title><style>div{        width: 200px;        height: 200px;        border: 1px solid black;  /*设置div边框,1px黑色的实线边框*/    }    p:nth-of-type(1){        width: 100px;        border: 1px dotted red;  /*设置第一个p标签边框为1px的点状虚线*/margin-top: 30px; /*距离顶部的距离30px*/padding: 40px;   /*所有填充都是40px*/    }    p:nth-of-type(2){        width: 100px;        border: 1px dashed yellow;/*设置第二个p标签边框为1px的虚线边框*/margin-left: 20px;  /*距离左侧的距离20px*/    }    p:nth-of-type(3){        width: 100px;        border: 4px double blue;/*设置第三个p标签边框为1px的双线边框*/margin: 50px;  /*4个边距50px*/    }</style></head><body><div><p>第一段落</p><p>第二段落</p><p>第三段落</p></div></body></html>

1.1.4 盒子模型的尺寸

在CSS中,width和height指的是内容区域的宽度和高度。增加了边框、内边距和外边距后不会影响内容区域的尺寸,但是会增加盒子模型的总尺寸。

示例

<!DOCTYPE html><html><headlang="en"><metacharset="UTF-8"><title></title><style>div{        width:100px;/*div宽度100px*/height:100px;/*div高度100px*/padding:5px;/*div上右下左外边距5px*/margin:10px;/*div上右下左内边距10px*/border:1px solid #000;/*div上右下左边框为1px*/    }</style></head><body><div></div></body></html>

运行之后会发现div的实际总宽度为112px而不是100px这说明把宽度width设置为100px是不能达到最终要求的盒子总宽度为100px的。

修改上面代码如下:

div{        width:88px;/*div宽度100px*/height:88px;/*div高度100px*/padding:5px;/*div上右下左外边距5px*/margin:10px;/*div上右下左内边距10px*/border:1px solid #000;/*div上右下左边框为1px*/    }

盒子模型的计算方法:

盒子模型内盒总尺寸=border(上下/左右)+padding(上下/左右)+内容宽度

1.1.5 box-sizing拯救布局

为了解决上述问题CSS3添加了一个盒子模型属性box-sizing,能够事先定义盒子模型的尺寸解析方式

box-sizing 属性允许您以特定的方式定义匹配某个区域的特定元素。

box-sizing: content-box|border-box|inherit:

值说明content-box这是 CSS2.1 指定的宽度和高度的行为。指定元素的宽度和高度(最小/最大属性)适用于box的宽度和高度。元素的填充和边框布局和绘制指定宽度和高度除外border-box指定宽度和高度(最小/最大属性)确定元素边框。也就是说,对元素指定宽度和高度包括了 padding 和 border 。通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。inherit指定 box-sizing 属性的值,应该从父元素继承

示例

div {        width:100px;        height:100px;        padding:5px;        margin:10px;        border:1px solid #000;        -webkit-box-sizing: border-box;        -moz-box-sizing: border-box;        box-sizing: border-box;    }

2.1 圆角边框

在 CSS2 中添加圆角矩形需要技巧。我们必须为每个圆角使用不同的图片。

在 CSS3 中,创建圆角是非常容易的。

在 CSS3 中,border-radius 属性用于创建圆角:

2.1.1 圆角边框语法

border-radius:length{1,4}

注意: 每个半径的四个值的顺序是:左上角,右上角,右下角,左下角。如果省略左下角,右上角是相同的。如果省略右下角,左上角是相同的。如果省略右上角,左上角是相同的。

1.border-radius:length{1}设置一个属性值表示top-left,top-right,bottom-right和bottom-left四个值是一样的,也就是元素四个圆角效果一样

2.border-radius:length{2}设置两个属性值表示top-left等于bottom-right,并且取第一个值,top-right等于bottom-left,并且取第二个值,也就是左上角和右下角取第一个值,右上角和左下角取第二个值

3.border-radius:length{3}设置三个属性值,第一个值是top-left,第二个值是top-right和bottom-left,第三个只是bottom-right

4.border-radius:length{4}设置四个属性值,第一个值是top-left,第二个值是top-right第三个值bottom-right第四个值bottom-left

示例

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>div{       width:100px;       height:100px;       border:10px solid red;       -webkit-border-radius:20px;       -moz-border-radius:20px;       border-radius:20px;/*div四个角都是圆角,值为20px*/   }</style></head><body><div></div></body></html>

2.1.2 使用border-radius制作特殊图形

制作圆形

利用border-radius属性制作圆角时有两个要点

1.元素的宽度和高度必须相同 2.圆角的半径为元素宽度的一般,或者直接设置圆角半径值为50%

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>div{       width:100px;       height:100px;       border:4px solid red;       -webkit-border-radius:50%;       -moz-border-radius:50%;       border-radius:50%;/*div四个角都是圆角,值为20px*/   }</style></head><body><div></div></body></html>

制作半圆

利用border-radius属性制作半圆的方法和制作圆形的方法一样,只是元素的宽度与圆角的方为要配合一直,不同的宽度和高度比例,以及圆角的方位,可以制作上半圆、下半圆、左半圆、右半圆

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>div{       background: red;       margin:30px;   }    div:nth-of-type(1){        width:100px;        height:50px;        -webkit-border-radius:50px50px00;        -moz-border-radius:50px50px00;        border-radius:50px50px00;    }   div:nth-of-type(2){        width:100px;        height:50px;        -webkit-border-radius: 0050px50px;        -moz-border-radius: 0050px50px;        border-radius: 0050px50px;    }   div:nth-of-type(3){        width:50px;        height:100px;        -webkit-border-radius:050px50px0;        -moz-border-radius:050px50px0;        border-radius:050px50px0;    }   div:nth-of-type(4){        width:50px;        height:100px;        -webkit-border-radius:50px0050px;        -moz-border-radius:50px0050px;        border-radius:50px0050px;    }</style></head><body><div></div><div></div><div></div><div></div></body></html>

制作半圆形的要点:

1.当制作上半圆或下半圆时,元素的宽度是高度的2倍,而且圆角半径为元素的高度值2.当制作左半圆或右半圆时,元素的高度是宽度的2倍,而且圆角半径为元素的宽度值

制作扇形

遵循“三通,一不同”原则,“三同”是元素宽度、高度、圆角半径相同,“一不同”是圆角取值位置不同

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>div{       background: red;       margin:30px;   }    div:nth-of-type(1){        width:50px;        height:50px;        -webkit-border-radius:50px000;        -moz-border-radius:50px000;        border-radius:50px000;    }   div:nth-of-type(2){        width:50px;        height:50px;        -webkit-border-radius: 050px00;        -moz-border-radius: 050px00;        border-radius: 050px00;    }   div:nth-of-type(3){        width:50px;        height:50px;        -webkit-border-radius:0050px0;        -moz-border-radius:0050px0;        border-radius:0050px0;    }   div:nth-of-type(4){        width:50px;        height:50px;        -webkit-border-radius: 00050px;        -moz-border-radius: 00050px;        border-radius: 00050px;    }</style></head><body><div></div><div></div><div></div><div></div></body></html>

3.1 盒子阴影

box-shadow:inset x-offset y-offset blur-radius color;

1.inset:阴影类型,可选值,如果不设置,默认的投影方式是外阴影;如果设置了inset表示内阴影

2.x-offset:X轴位移,用来指定阴影水平位移量,其值可以是正值,也可以是负值,如果问正值,阴影在对象的右边;反之,阴影在对象的左边

3.y-offset:Y轴位移,用来指定因应垂直位移量,其值可以是正值,也可以是负值,如果为正值,阴影在对象的底部;反之,阴影在对象的右边

4.blur-radius:阴影模糊半径,代表阴影向外模糊的模糊范围,值越大阴影向外模糊的范围就越大,阴影的边缘就越模糊。这个值只能是正值,如果为0,则表示不具有模糊效果,是可选值

5.color:阴影颜色,定义绘制阴影时所使用的颜色。阴影颜色可以是十六进制颜色,RGB、RGBA透明色等,不写这个值会用浏览器的默认色代替,由于浏览器默认色不一样,因此建议不要省略这个值

与用图片来制作盒子阴影相比,利用box-shadow属性修改阴影效果要方便的多,并且从box-shadow的语法上可以看出它的每个属性值都是可以自由设置的,这就意味着我们可以随意设置出不同的阴影效果

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>div{        width:100px;        height: 100px;        border:1px solid red;        -webkit-border-radius:8px;        -moz-border-radius:8px;        border-radius:8px;        margin:20px;        -webkit-box-shadow:  20px10px#06C;        -moz-box-shadow:  20px10px#06C ;        box-shadow:  20px10px#06C ;    }</style></head><body><div></div></body></html>

4.1 总结

1.盒子模型的概念、盒子模型的边框、外边距和内边距在网页中的使用方法2.使用border、padding、margin美化图片、div、列表、表单元素等网页元素3.精确计算盒子模型的尺寸,并且可以通过box-sizing选择盒子模型的解析方式4.使用border-radius给元素添加圆角效果,以及制作特殊的图形5.使用box-shadow给元素添加内、外阴影效果

免费学习视频欢迎关注云图智联:https://e.yuntuzhilian.com/