简单认识CSS盒模型

175 阅读2分钟

盒模型

margin border padding content(width height)

标准盒模型(加doctype)

宽度 = 内容宽度

IE盒模型(不加doctype)

宽度 = 边框 + 内边距 + 内容宽度

box-sizing

  • content-box; 标准盒模型
  • border-box; IE盒模型

jsbin.com/nixaguvapa/…

border

border: 1px solid red;

margin

外边距可以为负值。

水平居中

margin: 0 auto;

外边距合并

两个或多个块级元素的上外边距下外边距有时候会发生合并

注意

  1. 水平外边距不会合并。
  2. 浮动元素和绝对定位元素的外边距不会合并。

相邻元素

示例:jsbin.com/kabicog/edi…

解决方法
  1. float
  2. 相邻元素合并可以不用特地解决外边距合并问题,注意设置好margin值就可以

父子元素

父子元素上下外边距发生合并

示例:jsbin.com/naqehip/edi…

解决方法
  1. border
  2. padding(推荐使用)
  3. overflow: hidden;

自己合并(空元素)

前提条件:有一个空元素,它有外边距,但是没有边框或填充。

注意:

  • div无相邻盒模型存在时,本身的margin并不会发生重叠。
  • 有了相邻盒模型存在,发生了外边距重叠。

示例:jsbin.com/cebutugiyi/…

display

块级元素:block list-item table
行内元素:inline inline-table inline-block
display: table;
display: flex; 弹性布局
display: grid;

outline

  • 轮廓不占据空间,它们被描绘于内容之上。
  • 轮廓可以是非矩形的,opera中绘制的是非矩形轮廓
outline: width style color;

示例:jsbin.com/ceboboroto/…

box-shadow

水平偏移 垂直偏移 模糊半径 color inset;

示例:jsbin.com/qemaned/edi…

overflow

overflow: visible; //不会被裁减
overflow: hidden; //会被裁减
overflow: scroll; //表示内容会被裁剪,滚动条

示例:jsbin.com/dahoris/edi…

单行文本溢出加 ...实现

  white-space: nowrap;
  overflow: hidden;
 *text-overflow: ellipsis;

示例:jsbin.com/gijawop/edi…

多行文本溢出加 ...实现

*-webkit-line-clamp:2;//指定行数,2行之后会被限制
 display: -webkit-box; //将对象作为弹性伸缩盒子模式显示
 -webkit-box-orient:vertical; //设置或检索伸缩盒对象的子元素的排列方式
 overflow:hidden; 
 text-overflow: ellipsis;

示例:jsbin.com/kinipidadu/…

块级元素和行内元素

块级元素

p hr h1~h6 div table th td tr form ul ol li dd dt dl
  • 可以包括其他block和inline元素。
  • 可以设置宽高、padding、margin属性。
  • 特例:<p>只能包含 inline 元素

行内元素

img a input em strong br span button label select textarea

inline-block

既呈现 inline 特性(不占据一整行,宽度由内容宽度决定),又呈现 block 特性 (可设置宽高,内外边距)

缝隙问题

给父元素设置font-size: 0;
 inline-block 元素上设置新的font-size
解决方法

示例:jsbin.com/luyayep/edi…

对齐问题

解决方法
设置vertical-align: top/middle/bottom;

示例:jsbin.com/xivoguk/edi…