一. span和div的区别

1.span是行级元素,div是块级元素
2.span占用的宽度是内容的宽度,而div默认是一行。
所以一般在页面中,只有一行或不到一行文字用span,元素占据多行时用div。

二. 问题

下图是希望得到的效果
图片描述

div在两个span的下方,但是如果这么写,
图片描述

div和span的位置重叠,因为对span元素设置了float属性,从而导致浮动塌陷,解决办法是将span元素的高度计算进去,但是因为span元素是行级元素,无法设置高度,所以需要其他解决办法。

三. 解决办法

1. 设置div高度

图片描述

这样就可以了。

2. 设置div属性display

图片描述

将div设置为display: inline-block,使其既具有block元素的特性,可以设置宽度和高度,同时也具有inline元素的不换行的特性。
但是这是对第二个span元素设置的float: right属性不生效,因为display: inline-block会使元素按行依次排列,所以第二个span元素的float: right不生效,要想达到想要的效果,可以通过设置margin-left来实现。

图片描述

3. 设置div属性overflow

图片描述

将div设置为overflow: hidden,使其形成BFC,可以使div高度自动计算,从而和下面的div不会发生重叠。

4. 设置content属性position

图片描述

将content设置为position: absolute,所以content会去找第一个position属性不为static的父元素,即html<body>,于是就会相对于html<body>向下移动30px。

这种方法虽然也可以解决问题,但是也会带来新的问题,因为position: absolute会导致content元素脱离文档流,如果在content元素下面还有其他元素,那么其他元素位置可能会和content元素重叠。
例如,
图片描述

所以又发生了同样的问题,这种方法不推荐。

四. 总结

对于span和div都用时,同时span元素设置float属性时,还是对span外加div使其变成块级元素并设置高度,才不会使其后面的元素受到影响。


王娇
28 声望2 粉丝