10 盒模型

在CSS中,"box model"这一术语是用来设计和布局时使用,而后在网页中基本上都会显示一些方方正正的盒子。咱们称为这种盒子叫盒模型css

 

盒模型示意图 :html

 

盒模型的属性 :布局

  width: 内容的宽度。盒子不设置宽度就是内容的宽度,若是设置宽度,内容太多,就会溢出。最好不设置ui

  height: 内容的高度spa

  padding: 内边距,边框到内容的距离设计

  border: 边框,就是指的盒子的宽度code

  margin:  外边距,盒子边框到附近最近盒子的距离htm

 

盒模型的计算blog

若是一个盒子设置width,height,padding,border,margin(我们先不要设置margin,margin有坑,后面课程会讲解)文档

不加margin

盒子的真实宽度 = width+2*padding+2*border

盒子的真实宽度 = height+2*padding+2*border

标准盒模型,width不等于盒子真实的宽度。width是content的宽度。

1. padding(内边距) 

padding:就是内边距的意思,它是边框到内容之间的距离。另外padding的区域是有背景颜色的。而且背景颜色和内容的颜色同样。也就是说background-color这个属性将填充全部的border之内的区域

 

padding的设置

padding有四个方向,分别描述4个方向的padding。描述的方法有两种

(1)写小属性,分别设置不一样方向的padding

padding-top: 30px;
padding-right: 30px;
padding-bottom: 30px;
padding-left: 30px;

(2)写综合属性,用空格隔开

/*上 右 下 左*/
padding: 20px 30px 40px 50px ;
 
/*上 左右  下*/
padding: 20px 30px 40px;
 
/* 上下 左右*/
padding: 20px 30px;
             
/*上下左右*/
padding: 20px;

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        div {
            width: 160px;
            height: 160px;
            border: 1px solid red;
            padding-left: 20px;
            padding-right: 20px;
            padding-bottom: 20px;
            padding-top: 20px;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

网页效果:

上面的4行padding代码能够缩减为一行代码:padding: 20px;

一些标签默认有padding

好比ul标签,有默认的padding-left值。那么咱们通常在作站的时候,是要清除页面标签中默认的padding和margin。以便于咱们更好的去调整元素的位置。

2. border(边框) 

border:边框的意思,描述盒子的边框

边框有三个要素: 粗细 线性样式 颜色  

        border: 1px solid red;

 

属性:

border-width:4个边框宽度
border-style:
---none 默认 无轮廓
---dotted 点轮廓
---dashed 虚线轮廓
---solid 实线轮廓,使用较多
---double 双线轮廓
border-color
border-right
border-left
border-bottom
border---top
border-radius
border-shadow


若是颜色不写,默认是黑色。若是粗细不写,不显示边框。
 

若是只写线性样式,默认的有上下左右 3px的宽度,而且黑色的边框实体样式。

 

按照3要素来写border 

border-width: 3px;

border-style: solid;

border-color: red;

/*
border-width: 5px 10px;
border-style: solid dotted double dashed;
border-color: red green yellow;
*/

按照方向划分

border-top-width: 10px;
border-top-color: red;
border-top-style: solid;

border-right-width: 10px;
border-right-color: red;
border-right-style: solid;
 
border-bottom-width: 10px;
border-bottom-color: red;
border-bottom-style: solid;

border-left-width: 10px;
border-left-color: red;
border-left-style:solid;

另外还能够这样:

border-top: 10px solid red;
border-right: 10px solid red;
border-bottom: 10px solid red;
border-left: 10px solid red;

设置圆角 border-radius: 5px 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        div{
            width: 100px;
            height: 100px;
            border: 1px solid red;
            /*设置圆角*/
            border-radius: 5px;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

网页效果:

 

若是为50%,表示一个圆 border-radius: 50%

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        div{
            width: 100px;
            height: 100px;
            border: 1px solid red;
            /*圆*/
            border-radius: 50%;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

网页效果:

 

border:none;或者border:0;表示border没有设置样式。

3. margin

  外边距的意思。表示边框到最近盒子的距离。

/*表示四个方向的外边距离为20px*/
margin: 20px;

/*表示盒子向下移动了30px*/
margin-top: 30px;

/*表示盒子向右移动了50px*/
margin-left: 50px;

 

 先来2个div 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        div{
            width: 100px;
            height: 100px;
        }
        .box1 {
            background: red;
        }
        .box2 {
            background: green;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
</body>
</html>

网页效果:

移动50px

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        div{
            width: 100px;
            height: 100px;
        }
        .box1 {
            background: red;
            margin-left: 50px;
        }
        .box2 {
            background: green;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
</body>
</html>

网页效果:

 

上移动-50px

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        div{
            width: 100px;
            height: 100px;
        }
        .box1 {
            background: red;
            margin-left: 50px;
        }
        .box2 {
            background: green;
            margin-top: -50px;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
</body>
</html>

网页效果:

 

 

并排展现:用到浮动

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        div{
            width: 100px;
            height: 100px;
        }
        .box1 {
            background: red;
            float: left;
        }
        .box2 {
            background: green;
            float: left;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
</body>
</html>

网页效果:紧密挨在一块儿

 

 

margin 水平方向(塌陷问题)

margin描述兄弟之间的距离。标准文档流下,垂直方向会出现塌陷问题。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="content-Type" charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
    <style>
        div{
            width: 200px;
            height: 200px;

        }
        div.box{
            background-color: red;
            margin-bottom: 20px;
        }
        div.wrap{
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="box"></div><div class="wrap"></div>
</body>
</html>

网页效果:红色盒子往下推了绿色盒子20px

 

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="content-Type" charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            background-color: red;

        }

        p{
            margin-top: 100px;
        }

    </style>
</head>
<body>
    <div class="box">
        <p>日天</p>
    </div>
</body>
</html>

网页效果,总体往下塌陷100,而父盒子和子内容相对位置不变。p和div是父子盒。因此,对子盒子应用margin,是总体移动,而不是p单独移动。

 

 

解决方案1:父盒子设置border

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="content-Type" charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            background-color: red;
            border: 1px solid transparent;
        }

        p{
            margin-top: 100px;
        }

    </style>
</head>
<body>
    <div class="box">
        <p>日天</p>
    </div>
</body>
</html>

上面解决方案给盒子增长边框了,虽然解决了短暂问题,但不是最优方案

 

解决方案2:父盒子使用超出额隐藏功能,解决塌陷问题

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="content-Type" charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            background-color: red;
            overflow: hidden
        }

        p{
            margin-top: 100px;
        }

    </style>
</head>
<body>
    <div class="box">
        <p>日天</p>
    </div>
</body>
</html>

 

解决方案3:浮动。由于浮动型的盒子不是标准文档盒子,不受约束

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="content-Type" charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            background-color: red;
            float: left;
        }

        p{
            margin-top: 100px;
        }

    </style>
</head>
<body>
    <div class="box">
        <p>日天</p>
    </div>
</body>
</html>

总结一句话:任何标签只要设置浮动了,均可以设置宽和高。另一个div元素,若是设置浮动以后,不设置宽高,会发现,它收缩了,变成了内容的宽度(有点像行内元素)

相关文章
相关标签/搜索