Go to comments

HTML+CSS宝典 CSS基础 盒模型

什么叫盒模型?

盒模型是 css 里面的概念叫做 box,box叫做盒子,

box(盒子)意思是,每个元素在页面中都会生成一个矩形区域,这个矩形区域就叫做盒子(box)


我们学习盒模型,其实就是学习这个盒子的特点,

只有学习了每个元素它在页面中生成的矩形区域,有什么样的特点,

我们才能按照我们的想法,把页面布局成一块一块的区域,比如左右排列、上下排列等…,才能进行布局


那么这个盒子有什么样的特点呢?首先我们要学习 盒子类型 的知识


一、盒子类型

1、目前我们接触的盒子类型接触两种类型行了

1. 行盒类型

2. 块盒类型


行盒是指display属性值为 inline 的元素  display: inline 


元素在页面上生成盒子

1. 元素是 HTML 的概念

3. 盒子是 css 的概念,

    每个元素都会生成盒子,在页面上显示出来,因为盒子涉及到显示,显示肯定是CSS的概念


块盒是指 dispaly 属性等于 block 的元素  display: block 


2、行盒和块盒最重要的区别

行盒,在页面中不换行

块盒,独占一行


之前学的块级元素 和 行级元素,现在的正确叫法是 行盒 和 块盒

不应该叫元素了,因为显示出来的样子属于 css 的范畴了


例如,有些元素是独占一行的,有些元素并没有独占一行

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>行盒和块盒的区别</title>
</head>
<body>

  <h1>Lorem ipsum dolor sit amet consectetur adipisicing elit.</h1>

  <p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>

  <div>Lorem, ipsum dolor sit amet consectetur adipisicing elit.</div>
  
  <div>
    <span>Lorem.</span>
    <span>Similique?</span>
    <span>Minima?</span>
    <span>Unde!</span>
    <span>Obcaecati.</span>
    <span>Quae.</span>
    <span>Nisi!</span>
    <span>Perspiciatis?</span>
    <span>Pariatur.</span>
    <span>Eos.</span>
  </div>

</body>
</html>

选中h1元素,浏览器默认样式表里面是 display: block,意思是块盒独占一行

image.png

选中p元素,浏览器默认样式表是 display:block,块盒独占一行,

选中div元素,浏览器默认样式表是 display:block,块盒独占一行,

所以现在不存在行级元素 和 块级元素这种说法,正确的说法是行盒 块盒


为什么div元素独占一行,因为浏览默认样式表设置的是 display:block

image.png


选中div里面的span元素,发现span没有浏览器的默认样式,

span元素本身没有设置display属性,因为display属性的默认值是 inline

image.png

3、display属性的默认值是inline

属性值的计算的四步过程,

1. 声明值没有写,2. 就更不存在层叠,3. display属性是不能继承的,只能到第4步默认值


看一下 spsn 元素 display 属性的默认值,计算输出的结果(点击选项卡Computed),display的默认值为行盒 display: inlink

image.png

由于span是行盒,所以排列的没有独占一行,是依次排列的


4、盒子类型是可以更改的

span 元素改成块盒  display:block ,就独占一行,

h1元素、p元素、div元素改成行盒 display:inlink ,就排在一起了

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
  span{
    display:block
  }
  h1, p, div{
    display:inline;
  }
</style>
</head>
<body>
  <h1>Lorem ipsum dolor sit amet consectetur adipisicing elit.</h1>
  
  <p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>
  
  <div>Lorem, ipsum dolor sit amet consectetur adipisicing elit.</div>
  
  <div>
    <span>Lorem.</span>
    <span>Similique?</span>
    <span>Minima?</span>
    <span>Unde!</span>
    <span>Obcaecati.</span>
    <span>Quae.</span>
    <span>Nisi!</span>
    <span>Perspiciatis?</span>
    <span>Pariatur.</span>
    <span>Eos.</span>
  </div>
</body>
</html>

盒子的类型都是可以改的,只不过浏览器有默认的类型


5、元素的浏览器默认样式

浏览器默认样式表常见的块盒:

1. 常见的容器元素全部都是块盒,比如 div, header, article, section, aside 都是块盒,

2. 还包括文字元素里面的 h1~h6 元素

3. p 元素这些都是块盒


浏览器默认样式表常见的行盒:

通常是一些文元素,比如 span、a、img、video、audio,就是跟内容相关的元素


二、盒子的组成部分(重点)

无论是行盒还是块盒,都由下面四个部分组成,从内到外分别是:

1. 内容 content

2. 填充(内边距)padding

3. 边框 border,盒子本身边框

4. 外边距 margin,盒子与盒子之间的距离


一个盒子始终由这四部分组成,不论是行盒还是块盒,但是他们肯定是有些区别的,我们先学块盒再学行盒


1、内容盒 content-box

内容涉及到的属性,有宽 width 和高 height,这两个属性设置的是盒子内容的宽高

<h1 style="width:300px;height:200px;">内容盒</h1>

点击 Comptuted,盒模型的蓝色的区域表示内容区,我们设置的宽高是内容部分的宽高

image.png

内容部分通常叫做整个盒子的内容盒,英文单词是 content-box


2、填充盒 padding-box

填充区 + 内容区 = 填充盒 ,填充区也叫内边距 padding

填充盒指的是 盒子边框盒子内容的距离,既然是距离就是尺寸,这个尺寸我们可以通过 padding 属性设置


padding-left         左内边界

padding-right       右内边距

padding-top         上内边距

padding-bottom  下内边距


设置左内边距 padding-left: 90px

<h1 style="background:lightblue;padding-left:90px;">
  h1元素
</h1>

边框 距离 内容部分,有90像素的距离

h1元素

盒模型 padding 区域左边距显示的是 90 像素( 绿色区域表示padding区域 )

image.png


同样可以设置上内边距 padding-top: 100px

<h1 style="background:lightblue;padding-left:90px;padding-top:100px;">
  h1元素
</h1>

h1元素

上内边距显示的是100像素,没有设置的默认值为0

image.png


设置四个方向padding属性

padding-left: 90px;

padding-top: 100px;

padding-right: 100px;

padding-bottom: 100px;

<h1 style="background:lightblue; padding-left: 90px; padding-top: 100px; padding-right:100px; padding-bottom: 100px;">
  h1元素
</h1>

h1元素

绿色区域是padding填充区

image.png


不设置padding属性默认0

<h1 style="background:lightblue;>
    h1元素
</h1>

不设置默认是0

image.png


 padding: 上  右  下  左  

简写属性可以同时设置多个值,比如同时设置四个方的值,顺序像顺时针的时钟一样,从12点种方向转一圈

<h1 style="width:100px;background:lightblue;padding:50px 30px 50px 30px;">
  h1元素
</h1>

padding: 50px 30px 50px 30px 同时设置 上、右、下、左 四个方向的值

h1元素


四个方向:上、右、下、左

image.png


注意这个速写属性,

它最终转化成四个方向的属性,计算样式 Computed 搜索 paddding 属性,没有这个速写属性,转换后是四个方向的属性

padding-top: 50px;

padding-right: 30px;

padding-bottom: 50px;

padding-left: 30px;


 padding: 50px 30px 

还可以设置两个值,第一个表示上下,第二个表示左右

<h1 style="width:100px;background:lightblue;padding: 50px 30px;">
  h1元素
</h1>

image.png


 padding: 上  左右  下 

设置三个值

<h1 style="width:100px;background:lightblue;padding:30px 50px 20px;">
  h1元素
</h1>


3、边框盒 border-box 

边框包含三个信息

border-style   边框样式

border-width 边框宽度(边框粗细)

border-color  边框颜色


 border-width: 4px  设置边框4像素宽度

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>边框</title>
<style>
  div{
    width:100px;
    height:100px;
    background-color:lightblue;
    border-width: 4px;
  }
</style>
</head>
<body>

  <div></div>

</body>
</html>

边框没有设置样式,光设置宽度边框不会显示出来



默认情况下边框的宽度为0,

 border-style: none  边框样式默认是 none,表示没有样式,没有样式意味着边框就没法显示


border-style 边框的样式有很多

1. solid     实线

2. dashed 虚线(小横杠组成)

3. dotted  虚线(圆点组成)

4. double  双实线

5. groove  立体的线条

6. hidden  表示隐藏

7. inset      往内陷的线条

8. unset     往外突的线条


 border-style: solid  设置边框样式为实线

边框的颜色是这样的,如果没有设置颜色,边框颜色默认是字体的颜色

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>边框</title>
<style>
  div{
    width: 100px;
    height: 100px;
    background-color: lightblue;
    border-width: 4px;
    border-style: solid;
    color: red;
  }
</style>
</head>
<body>

  <div></div>

</body>
</html>

字体的颜色是红色的,边框的颜色也是红色



 border-color: #008c8c  可以手动去设置边框的颜色 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>边框</title>
<style>
  div{
    width:100px;
    height:100px;
    background-color:lightblue;
    border-width: 4px;
    border-style: solid;
    border-color: #008c8c;
  }
</style>
</head>
<body>

  <div></div>

</body>
</html>

4像素宽、马尔斯绿色、实线边框



边框的宽度、样式、颜色,这三个属性全部都是速写属性(简写属性),

只要看到属性后面有黑三角 ,表示这个属性是速写属性,点击黑三角是属性实际的写法

image.png


border-width 跟 padding 是一样的,也可以设置四个方向(上 左下 右) border-width: 10px 5px 20px 30px 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>边框</title>
<style>
  div{
    width:100px;height:100px;background-color:lightblue;
    border-width: 10px 5px 20px 30px;
    border-style: solid;
    border-color: #008c8c;
  }
</style>
</head>
<body>

  <div></div>

</body>
</html>

四个边框宽度的效果



边框样式 border-style 也是一个简写属性,比如(上 左 下 右) border-style: solid dashed dotted groove 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>边框</title>
<style>
  div{
    width:100px;height:100px;background-color:lightblue;
    border-width: 10px 5px 20px 30px;
    border-style: solid dashed dotted groove;
    border-color: #008c8c;
  }
</style>
</head>
<body>

  <div></div>

</body>
</html>

边框四个不同样式



border-color 边框颜色也是一样的,四个方向的颜色

image.png

简写属性也叫做速写属性,它是一个语法糖,它会转化成真实的写法


如果边框四个方向都是一样的颜色、一样的样式、一样的粗细,

可以用一个速写属性 border,统一设置四个方向  border: 4px dashed #008c8c 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>边框</title>
<style>
  div{
    width:100px;
    height:100px;
    background-color:lightblue;
    border:4px dashed #008c8c;
  }
</style>
</head>
<body>

  <div></div>

</body>
</html>

简写属性 border



点击黑三角展开,相当于用了下面的写法

image.png


边框 + 填充区 + 内容区 =  边框盒 ,英文叫 border-box


4、外边距 margin

边框 其它盒子的距离,


设置

margin-top 上外边距

margin-left 左外边距

margin-right 右外边距

margin-bottom 下外边距

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>margin</title>
<style>
  div{
    width:100px;
    height:100px;
    background-color:lightblue;
    border:4px solid #008c8c;
  }
  .box1{
    margin-bottom:50px;
  }
  .box2{
    margin-left:51px;
  }
</style>
</head>
<body>

  <div class="box1">box1</div>
  <div class="box2">box2</div>

</body>
</html>


也可以设置速写属性  margin: 上 下 左 右; 


外边距有点特殊,在布局的时候在详细说,现在暂时理解外边距是盒子与盒子之间的距离


回顾一下,这四个方向上的属性

1. 内容用 width属性、height属性来设置

2. 填充区是 padding 属性来设置

3. 边框用 border 属性来设置

4. 外边距用 margin 属性来设置


现在学的都是块盒,行盒其实也有这四个部分的属性,但是行盒在设置的过程中,可能有些场景不是很一样,行盒后面单独来学。



Leave a comment 0 Comments.

Leave a Reply

换一张