CSS盒模型

html文档中的每个元素都没描绘成矩形盒子,这些矩形盒子通过一个模型来描述其占有用空间,这个模型称为盒模型

盒模型通过四个边界来描述:
  • margin(外边距)
  • border(边框)
  • padding(内边距)
  • content(内容区域)
盒模型.png
盒模型基础属性:
  • width(宽度)
    ├─ min-width
    ├─ max-width

  • height(高度)
    ├─ min-height
    ├─ max-height

  • padding(内边距)
    ├─ padding-top
    ├─ padding-right
    ├─ padding-bottom
    ├─ padding-left

  • border(边框)
    ├─ border-top
    ├─ border-right
    ├─ border-bottom
    ├─ border-left

  • margin(外边距)
    ├─ margin-top
    ├─ margin-right
    ├─ margin-bottom
    ├─ margin-left

1、padding,border,margin都是可选的,默认值为0,但浏览器会自行设置元素的margin和padding,通过在CSS样式表中设置,来覆盖浏览器样式。
*{
    margin:0;
    padding:0;
}
2、水平居中。

对于固定宽度的块级元素,设置margin-left:auto,margin-right:auto,即可实现水平居中。

<div class = "container">
  内容
</div>

.container{
    width:500px;/*max-width:500px*/
    margin:auto;
}
3、外边距合并

在正常流下,外边距会进行合并。

a、相邻元素边距会合并。

<h1>好好学习</h1>
<h2>天天旷课</h2>

h1 { margin: 20px 0; }
h2 { margin: 30px 0; }

b、父子元素合并。
c、浮动元素和绝对定位元素的外边距不会合并

4、外边距为负

设置 margin-left margin-right 为负数可以增加块状元素宽度。

<div class="T"></div>

<style>
  .T{
  width: 20px;
  height: 300px;
  margin: 50px auto;
  background: orange;
  }
  .T::after{
  content: '';
  height: 20px;
  margin: 0 -100px;
  display: block;
  background: red;
  }
</style>
外边距为负.png
5、box-sizing

box-sizing用于更改计算元素的宽度和高度的默认的CSS盒模型。
box-sizing:content-box;(默认值)

.box{
    width:200px;
    border:30px;
}

渲染出来的盒子宽度为:260px;

box-sizing:border-box;

.box{
   width: 300px;
   border: 10px;
   padding: 10px;
   box-sizing: border-box;
}

渲染出来的盒子宽度为:300px;

6、水平格式化

水平格式化的7大属性:
margin-left
border-left
padding-left
width
padding-right
border-right
margin-right
这7个属性值之和 = 父级元素width的值

其中 margin-left,margin-right,width可以设置为auto。

a、一个属性设置成auto

 <div class="parent">
    <div class="block">块级元素</div>
 </div>


 <style>
    .parent {
      width: 600px
    }

    div {
      background: red;
    }

    .block {
      background: yellow;
      margin-left: auto;
      margin-right: 100px;
      padding: 30px;
      width: 100px;
    }
  </style>

如果三个属性中某个属性设置为auto,其余两个为特定的值,那么设置auto的属性为确定所需的元素,从而使得元素框的宽度等于父级元素的width。


效果图.png
盒模型图.png

被设置为auto的margin-auto属性值为340px。
margin-left + border-left + padding-left + width + padding-right + border-right + margin-right = 父元素的width
↓↓↓
340+0+30+100+30+0+100=600

b、总和不等于父元素的width

使用auto可以弥补实际值与所需总和的差距,如果三个属性都设置特定的值,但是总和不等于父级元素的width。
修改上面例子中的margin-left为100px,即

    .block {
      background: yellow;
      margin-left: 100px;
      margin-right: 100px;
      padding: 30px;
      width: 100px;
    }
效果图.png
盒模型图.png

在上面的CSS中,margin-left,width,margin-right都设置了特定值,七大属性总和≠父级元素的width。

c、width设置为auto
如果margin-left和margin-right都设置特定的值,width设置为auto,则width将会等于某个特定值以达到父级元素的width。

.block {
  background: yellow;
  margin-left: 100px;
  margin-right: 100px;
  padding: 30px;
  width: auto;
}
效果
盒模型图

元素的width将被设定为340来使总和达到父级元素的width。

d、margin-left和margin-right设置成auto

如果margin-left和margin-right都设置为auto,则它们会设置相等的值,因此元素将在父级元素中居中,这是将块级元素居中的一种方法。(2有提过)
注意:text-align设置为center只适用于块级元素中的内联内容居中,并不能使块级元素居中。

.block {
  background: yellow;
  margin: 0 auto;
  padding: 30px;
  width: 100px;
}
效果
盒模型

margin-left和margin-right的值会被设置为相等(220px),使得元素居中

e、某个外边距和width设置为auto

如果设置某个外边距和width为auto,则设置为auto的外边距为0,width会设置为所需的值来填充父级元素。

效果
盒模型

设置margin-left和width为auto,则margin-left将被设置为0,width会被设置为440px来满足父级元素的width。

f、全设置为auto

如果margin和width都设置为auto,则两个外边距会设置为0,width会尽可能宽。

.block {
  background: yellow;
  margin-left: auto;
  margin-right: auto;
  padding: 30px;
  width: auto;
}
效果f
盒模型f

三个值都设置为auto,则两个外边距会设置为0,width会被设置为540px

g、负外边距

7个属性只要都是大于等于0的值,总和总是等于父级元素的width,不会超过父级元素的区域
但是可以通过制定负外边距来得到比父级元素width更大的区域

.block {
  background: yellow;
  margin-left: 100px;
  margin-right: -400px;
  padding: 30px;
  width: auto;
}

效果g
盒模型g

设置margin-right为-400px,则元素会大于父级元素width,因为100+0+30+840+30+0-400=600,元素的width为840px.

7、outline

如果你看到被选中的 <a> <input> <button> 周围有一圈黄或蓝色的外框,就是 outline了,可以通过设置 outline: 0outline: none 去除。

8、overflow

overflow用于控制内容溢出包含它的块状元素时的显示方式。
overflow-xoverflow-y分别用于控制水平溢出和垂直溢出。

  • visible 默认值 显示溢出的内容
  • hidden 内容被裁剪且不会出现滚动条
  • scroll 内容被裁剪但出现滚动条
  • auto 由浏览器决定
9、行内元素的盒模型

行内元素也是有盒模型的,但是有几点要注意:
a、对于非替换元素,比如a,span标签等

(1)可以设置margin-left和margin-right属性,无法设置margin-top和margin-bottom属性

(2)行内元素border和padding可以设置,但是border-top和padding-top到页面顶部后就不再增加

b、对于替换元素,比如input,img标签margin,
padding,border都有效果

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容