css--盒子模型/塌陷/元素溢出

盒子模型解释
元素在页面中显示成一个方块,类似一个盒子,CSS盒子模型就是使用现实中盒子来做比喻,帮助我们设置元素对应的样式。盒子模型示意图如下:

把元素叫做盒子,设置对应的样式分别为:盒子的边框(border)、盒子内的内容和边框之间的间距(padding)、盒子与盒子之间的间距(margin)。

设置边框
设置一边的边框,比如顶部边框,可以按如下设置:

border-top-color:red;    /* 设置顶部边框颜色为红色 */  
border-top-width:10px;   /* 设置顶部边框粗细为10px */   
border-top-style:solid;  /* 设置顶部边框的线性为实线,常用的有:solid(实线)  
  dashed(虚线)  dotted(点线); */

上面三句可以简写成一句:

border-top:10px solid red;

设置其它三个边的方法和上面一样,把上面的'top'换成'left'就是设置左边,换成'right'就是设置右边,换成'bottom'就是设置底边。

四个边如果设置一样,可以将四个边的设置合并成一句:

border:10px solid red;

设置内间距padding

设置盒子四边的内间距,可设置如下:

padding-top:20px;     /* 设置顶部内间距20px */ 
padding-left:30px;     /* 设置左边内间距30px */ 
padding-right:40px;    /* 设置右边内间距40px */ 
padding-bottom:50px;   /* 设置底部内间距50px */

上面的设置可以简写如下:

padding:20px 40px 50px 30px; /* 四个值按照顺时针方向,分别设置的是 上 右 下 左  
四个方向的内边距值。 */

padding后面还可以跟3个值,2个值和1个值,它们分别设置的项目如下:

padding:20px 40px 50px; /* 设置顶部内边距为20px,左右内边距为40px,底部内边距为50px */ 
padding:20px 40px; /* 设置上下内边距为20px,左右内边距为40px*/ 
padding:20px; /* 设置四边内边距为20px */

设置外间距margin

外边距的设置方法和padding的设置方法相同,将上面设置项中的'padding'换成'margin'就是外边距设置方法。

盒子模型的尺寸

按照下面代码制作页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>盒子的真实尺寸</title>
    <style type="text/css">
        .box01{width:50px;height:50px;background-color:gold;}
        .box02{width:50px;height:50px;background-color:gold;border:50px
         solid #000}
        .box03{width:50px;height:50px;background-color:gold;border:50px
         solid #000;padding: 50px;}
    </style>
</head>
<body>
    <div class="box01">1</div>
    <br />
    <div class="box02">2</div>
    <br />
    <div class="box03">3</div>
</body>
</html>

页面显示效果如下:

通过上面的页面得出结论:盒子的width和height设置的是盒子内容的宽和高,不是盒子本身的宽和高,盒子的真实尺寸计算公式如下:

  • 盒子宽度 = width + padding左右 + border左右
  • 盒子高度 = height + padding上下 + border上下

margin相关技巧
1、设置元素水平居中: margin:x auto;
2、margin负值让元素位移及边框合并

外边距合并

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。解决方法如下:

1、使用这种特性
2、设置一边的外边距,一般设置margin-top
3、将元素浮动或者定位

margin-top 塌陷

在两个盒子嵌套时候,内部的盒子设置的margin-top会加到外边的盒子上,导致内部的盒子margin-top设置失败,解决方法如下:

1、外部盒子设置一个边框
2、外部盒子设置 overflow:hidden
3、使用伪元素类:

.clearfix:before{
    content: '';
    display:table;
}

css元素溢出

当子元素的尺寸超过父元素的尺寸时,需要设置父元素显示溢出的子元素的方式,设置的方法是通过overflow属性来设置。

overflow的设置项:
1、visible 默认值。内容不会被修剪,会呈现在元素框之外。
2、hidden 内容会被修剪,并且其余内容是不可见的,此属性还有清除浮动、清除margin-top塌陷的功能。
3、scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
4、auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
5、inherit 规定应该从父元素继承 overflow 属性的值。 

 
 1 <!doctype html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport"
 6           content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 8     <title>css盒模型</title>
 9 
10     <style type="text/css">
11         .box{
12             width:300px;
13             height:80px;
14             background-color:gold;
15 
16             /* border-top-width:10px;
17             border-top-color:black;
18             实线:solid  虚线:dashed  点线:dotted
19             border-top-style:solid; */
20 
21             /* border-top:10px solid black;
22             border-left:10px dashed black;
23             border-right:10px dotted black; */
24 
25             border:10px solid black;
26 
27             /* padding-top:20px;
28             padding-right:30px;
29             padding-bottom:40px;
30             padding-left:50px; */
31 
32             padding:100px;
33 
34             /* margin-top:20px;
35             maging-right:20px;
36             margin-bottom:20px;
37             margin-left:20px; */
38 
39             /* 水平居中*/
40             margin:30px auto;
41              }
42 
43             .box1{
44                 width:400px;
45                 height:50px;
46                 border-top:1px solid #f00;
47                 border-bottom:3px solid #666;
48                 font-size:20px;
49                 font-family:'微软雅黑';
50                 text-indent:15px;
51                 line-height:50px;
52 
53             }
54 
55             .box2{
56                 width:700px;
57                 /* height:100px;  去掉高度,字体可以自动撑大盒子*/
58                 border:3px solid #666;
59                 margin:50px auto;
60             }
61 
62             .box2 div{
63                 text-indent:15px;
64                 /* border:3px solid #666; */
65                 margin:30px 15px;
66                 }
67 
68     </style>
69 </head>
70 <body>
71     <div class="box">啊哈哈哈哈哈哈哈哈哈或或或或或或或或或或或或或或或或或或或或或或或或或或或啊哈哈哈哈哈哈哈哈哈或或或或或或或或或或或或或或或或或或或或或或或或或或或</div>
72 
73     <br>
74     <div class="box1">新闻列表</div>
75 
76     <br>
77 
78     <div class="box2">
79         <div>设置其它三个边的方法和上面一样,把上面的'top'换成'left'就是设置左边,换成'right'就是设置右边,换成'bottom'就是设置底边。</div>
80         <div>设置其它三个边的方法和上面一样,把上面的'top'换成'left'就是设置左边,换成'right'就是设置右边,换成'bottom'就是设置底边。</div>
81         <div>设置其它三个边的方法和上面一样,把上面的'top'换成'left'就是设置左边,换成'right'就是设置右边,换成'bottom'就是设置底边。</div>
82         <div>设置其它三个边的方法和上面一样,把上面的'top'换成'left'就是设置左边,换成'right'就是设置右边,换成'bottom'就是设置底边。</div>
83         <div>设置其它三个边的方法和上面一样,把上面的'top'换成'left'就是设置左边,换成'right'就是设置右边,换成'bottom'就是设置底边。</div>
84     </div>
85 </body>
86 </html>

 

 

 

 1 <!doctype html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport"
 6           content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 8     <title>margin-top 塌陷</title>   /* 在两个盒子嵌套时候,内部的盒子设置的margin-top会加到外边的盒子上,导致内部的盒子margin-top设置失败 */
 9     <style type="text/css">
10         .box_f{
11             width:300px;
12             height:200px;
13             background-color:gold;
14             /* 方法一:外部盒子设置一个边框
15             border:1px solid gold; */
16 
17             /* 方法二:外部盒子设置一个边框
18             overflow:hidden;  */
19         }
20         .box_s{
21             width:100px;
22             height:50px;
23             background-color:red;
24             margin-top:50px;
25         }
26 
27         /* 方法三:使用伪元素类 */
28         .clearfix:before{
29             content:'';
30             display:table;
31         }
32 
33     </style>
34 </head>
35 <body>
36 
37 <div class="box_f clearfix">
38     <div class="box_s"></div>
39 </div>
40 
41 </body>
42 </html>

 

 1 <!doctype html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport"
 6           content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 8     <title>css元素溢出</title>
 9 
10     <style type="text/css"> /* 当子元素的尺寸超过父元素的尺寸时,需要设置父元素显示溢出的子元素的方式,设置的方法是通过overflow属性来设置。 */
11         .box_f{
12             width:600px;
13             height:400px;
14             border:1px solid black;
15             margin:50px auto 0;
16             /* overflow:hidden; */
17             /* overflow:scroll; */
18             overflow:auto;
19         }
20 
21         .box_s{
22             width:500px;
23             height:700px;
24             background-color:gold;
25             margin-top:50px;
26         }
27 
28     </style>
29 
30 </head>
31 <body>
32 
33 <div class="box_f">
34     <div class="box_s">嘻嘻嘻嘻嘻嘻哈哈哈哈哈啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
35 </div>
36 
37 </body>
38 </html>

posted on 2019-11-02 11:07  cherry_ning  阅读(1114)  评论(0)    收藏  举报

导航