CSS 常见问题梳理

119 阅读4分钟

1,margin重叠问题

块的上外边距跟下外边距,有时会合并为一个边距。其中合并的距离,由其中最大的边距值为准。这个现象称为 外边距重叠

如果没有边框border ,内边距padding ,行内内容,也没有创建 块级格式上下文(BFC)或清除浮动 ,内部元素也会根据上面的规则跟父元素发生外边距重叠问题。

2,margin负值问题

margin是允许设置负值的,对于负值的现象。当margin-top,margin-left这两个属性为负值时,他们会往上,左移动,同时如果上,左的元素跟该元素没有之间没有距离有,会发成重叠。有点类似相对定位。

如果是margin-bottom,margin-right这两个属性为负值时,它的右,下方元素会往它身上挤,没有距离时,也会发生重叠。

3,盒模型宽度计算

  • offestWidth: 只读属性,返回元素的布局宽度,值是四舍五入后的整数。计算公式offsetWidth = 水平线上border + 水平线上padding + 内容宽度。语法const offsetWidth = element.offsetWidht;
  • clientWidth: 只读属性,返回内部宽度。对于 内联元素 以及 没有设置css样式 的元素,其值为0。值是四舍五入后的整数。计算公式clientWidth = 水平线上padding + 内容宽度。语法const clientWidth = element.clientWidth;
  • scrollWidth: 只读属性,元素内容宽度的一种度量,包括overflow上溢出的不可见区域的内容宽度。没有水平滚动时宽度跟 clientWidth 一样。语法const scrollWidth = element.scrollWidth;。

4,BFC理解与应用

块格式化上下文(block formatting context, bfc),它是一种影响块级元素布局的一种方法。

使用BFC后会产生一下效果:

包含内部浮动(元素)、排除外部浮动(外部元素的浮动影响不到它)、防止外边距重叠(margin纵向重叠问题)。

触发BFC的方法有很多种,常用的方法有:

根元素(<html>)、设置浮动元素(float值不为node)、绝对定位元素(position值为absolute或fixed)、overflow值不为【visible,clip】的块元素、display为【inline-block,table-cell,flex,grid等(由于比较多,可自行查看)】.

5,float布局之圣杯布局,双飞翼布局

圣杯布局和双飞翼布局,两者功能相同,都是为了实现,两侧固定宽度,中间宽度自适应的三栏布局。

其中的特点有如下:

1,两侧宽度固定,中间宽度自适应

2,重要内容优先,以便先行渲染(例如编写代码时,先写中间元素(center),再写左边(left)跟右边(right)的)。

3,允许三列中任意一列成为最高列。

值得注意的是,虽然圣杯布局跟双飞翼布局功能相同,但是html的布局还是差异。

下面是示例代码。

6,清除浮动

.clearfix:after {
  content: '';
  display: table;
  clear: both;
}
.clearfix {
  *zoom: 1; /* 兼容 IE 低版本 */
}

7,flex布局

常用语法回顾,并且使用flex画一个筛子。

注意:设置flex布局之后,子元素的float、clear、vertical-align 属性将消失。

8,css定位,水平垂直居中

9,css图文样式,line-height继承问题

在说line-height继承之前,先罗列一下默认继承的属性:

  • 所有元素可继承:visibility 和 cursor
  • 内联元素可继承:letter-spacing、word-spacing、white-space、line-height、color、font、 font-family、font-size、font-style、font-variant、font-weight、text- decoration、text-transform、direction
  • 块级元素可继承:text-indent和text-align
  • 列表元素可继承:list-style、list-style-type、list-style-position、list-style-image
  • 表格元素可继承:border-collapse

关于样式的继承,可以设置关键字 initial,inherit,unset,revert 来实现该属性是否继承。可参考文档: github.com/chokcoco/iC…

言归正传, 现在我们来讲讲line-height继承中需要注意的问题:

我们知道line-height的值可以设置为百分比,常规数值,以及带单位的数值

  • 如果line-height的值是百分比或者带单位的数值,子元素就会继承计算后的值
  • 如果值是 常规数值 ,则会继承这个常规数值
  • codepen.io/kejinbo/pen…

10,响应式布局

我们先了解一下,css中的单位,以及单位的含义

  • px:物理像素(绝对长度单位,与其他东西无关。)
  • em:相对于当前元素的font-size尺寸,如:当前 font-size: 16px; 则1em = 16px; 同理 1.5em = 24px 。
  • rem:相对于根元素 <html> 的font-size,不管当前元素的font-size是什么都与他无关。换算规则跟 em 的一样。
  • vw/vh:视口宽度/高度的1%。

codepen.io/kejinbo/pen…