CSS2 从入门到精通 (4)

在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。但是当为子元素设置浮动以后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷。由于父元素的高度塌陷了,则父元素下的所有元素都会向上移动,这样将会导致页面布局混乱。
所以在开发中一定要避免出现高度塌陷的问题,我们可以将父元素的高度写死,以避免塌陷的问题出现,但是一旦高度写死,父元素的高度将不能自动适应子元素的高度,所以这种方案是不推荐使用的。

3. 解决高度塌陷问题 1. 开启BFC

根据W3C的标准,在页面中元素都一个隐含的属性叫做Block Formatting Context简称BFC,该属性可以设置打开或者关闭,默认是关闭的。当开启元素的BFC以后,元素将会具有如下的特性:
1.父元素的垂直外边距不会和子元素重叠
2.开启BFC的元素不会被浮动元素所覆盖
3.开启BFC的元素可以包含浮动的子元素
如何开启元素的BFC
1.设置元素浮动使用这种方式开启,虽然可以撑开父元素,但是会导致父元素的宽度丢失而且使用这种方式也会导致下边的元素上移,不能解决问题。这是因为开启浮动的会计元素宽高都是默认被撑起来的,除非自动设置宽高。
2.设置元素绝对定位
3.设置元素为inline-block可以解决问题,但是会导致宽度丢失,不推荐使用这种方式
4.将元素的overflow设置为一个非visible的值
推荐方式:将overflow设置为hidden是副作用最小的开启BFC的方式。
是在IE6及以下的浏览器中并不支持BFC,所以使用这种方式不能兼容IE6。在IE6中虽然没有BFC,但是具有另一个隐含的属性叫做hasLayout,该属性的作用和BFC类似,所在IE6浏览器可以通过开hasLayout来解决该问题开启方式很多,我们直接使用一种副作用最小的:直接将元素的zoom设置为1即可

zoom表示放大的意思,后边跟着一个数值,写几就将元素放大几倍

zoom:1表示不放大元素,但是通过该样式可以开启hasLayout

zoom这个样式,只在IE中支持,其他浏览器都不支持

.parent{ zoom:1; overflow: hidden; } 2. 清除浮动

可以直接在高度塌陷的父元素的最后,添加一个空白的div, 然后在对其进行清除浮动, 由于这个div并没有受到浮动元素的影响,所以他应该处在原来的元素在的时候的位置这样就相当于原来的元素还在,所以是可以撑开父元素的高度的,这样可以通过这个空白的div来撑开父元素的 基本没有副作用使用这种方式虽然可以解决问题,但是会在页面中添加多余的结构。

.clear{ clear: both; } 3. 伪类

通过after伪类,选中父元素的后边可以通过after伪类向元素的最后添加一个空白的块元素,然后对其清除浮动,这样做和添加一个div的原理一样,可以达到一个相同的效果,而且不会在页面中添加多余的div,这是我们最推荐使用的方式,几乎没有副作用。

.clearfix:after{ /*添加一个内容*/ content: ""; /*转换为一个块元素*/ display: block; /*清除两侧的浮动*/ clear: both; } 4. 最佳实践 .clearfix:before, .clearfix:after{ content: ""; display: table; clear: both; } .clearfix{ zoom: 1; }

经过修改后的clearfix是一个多功能的,既可以解决高度塌陷,又可以确保父元素和子元素的垂直外边距不会重叠。子元素和父元素相邻的垂直外边距会发生重叠,子元素的外边距会传递给父元素 使用空的table标签可以隔离父子元素的外边距,阻止外边距的重叠

4. 清除浮动

由于受到box1浮动的影响,box2整体向上移动了100px
我们有时希望清除掉其他元素浮动对当前元素产生的影响,这时可以使用
clear可以用来清除其他浮动元素对当前元素的影响
可选值:
none,默认值,不清除浮动
left,清除左侧浮动元素对当前元素的影响
right,清除右侧浮动元素对当前元素的影响
both,清除两侧浮动元素对当前元素的影响清除对他影响最大的那个元素的浮动

10. 定位

定位指的就是将指定的元素摆放到页面的任意位置 通过定位可以任意的摆放元素 通过position属性来设置元素的定位
可选值:

static:默认值,元素没有开启定位

relative:开启元素的相对定位

absolute:开启元素的绝对定位

fixed:开启元素的固定定位(也是绝对定位的一种)

当开启了元素的定位(position属性值是一个非static的值)时, 可以通过left right top bottom四个属性来设置元素的偏移量

left:元素相对于其定位位置的左侧偏移量

right:元素相对于其定位位置的右侧偏移量

top:元素相对于其定位位置的上边的偏移量

bottom:元素相对于其定位位置下边的偏移量

通常偏移量只需要使用两个就可以对一个元素进行定位, 一般选择水平方向的一个偏移量和垂直方向的偏移量来为一个元素进行定位

1. 相对定位

当元素的position属性设置为relative时,则开启了元素的相对定位

当开启了元素的相对定位以后,而不设置偏移量时,元素不会发生任何变化

相对定位是相对于元素在文档流中原来的位置进行定位

相对定位的元素不会脱离文档流

相对定位会使元素提升一个层级

相对定位不会改变元素的性质,块还是块,内联还是内联

2. 绝对定位

当position属性值设置为absolute时,则开启了元素的绝对定位
绝对定位:

开启绝对定位,会使元素脱离文档流

开启绝对定位以后,如果不设置偏移量,则元素的位置不会发生变化

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxdwz.html