浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响?
浮动元素的主要特征是脱离普通流,根据设定的值向左或向右偏移,直到其边缘遇到父元素的边界或者另一个浮动元素的边框。
对父容器:如果父容器内的元素均设置了浮动,那么他们脱离普通流无法撑起父容器的高度,导致父元素的塌陷。
对其它浮动元素:同一父容器内的浮动元素按照设定的方向并排排列,当父元素的宽度不够时,后面的元素会向下移动,直到有足够的空间;如果浮动元素的高度不同,那么有可能挡住移动的路径。
对普通元素:无法辨别普通元素,有可能导致覆盖其它普通元素,占据其位置
对文字:文字能够识别浮动元素,会围绕浮动元素
清除浮动指什么? 如何清除浮动?
1.通过在浮动元素末尾添加一个空的带有clear:both属性的div标签
2.使用:after 伪元素 消除浮动
3.父元素也设置浮动 或者display-blocks(或者其它生成BFC的方式)
有几种定位方式,分别是如何实现定位的,参考点是什么,使用场景是什么?
inherit:继承父元素定位属性。
static:默认值,没有定位,元素出现在正常的文档流中。参考点是文档流中的位置。
relative:相对定位。相对于元素本身正常位置进行定位,通过top、bottom、left、right属性来设置偏移量。使用场景:为绝对定位设定参照物或对元素自身位置进行局部调整。
absolute:绝对定位。相对于static定位意外的第一个祖先元素进行定位,若都没有发现则以html标签为参考进行定位。使用场景:当想让元素参照特定参照物进行定位时使用。
fixed:固定定位。生成绝对定位元素,相对于viewport进行定位。
sticky:对象在常态时遵循普通流。它就像是relative和fixed的合体,当在屏幕中时按常规流排版,当卷动到屏幕外时则表现如fixed。兼容性不佳,不常用。
z-index 有什么作用? 如何使用?
当页面上出现多个由绝对定位(position:absolute)或固定定位(position:fixed)所产生的浮动层时,必然就会产生一个问题,就是当这些层的位置产生重合时,谁在谁的上面呢?或者说谁看得见、谁看不见呢?这时候就可以通过设置z-index的值来解决,这个值较大的就在上面,较小的在下面。
z-index的意思就是在z轴的顺序,如果说网页是由x轴和y轴所决定的一个平面,那么z轴就是垂直于屏幕的一条虚拟坐标轴,浮动层就在这个坐标轴上,那么它们的顺序号就决定了谁上谁下了。
z-index仅对定位元素有效。
position:relative和负margin都可以使元素位置发生偏移?二者有什么区别
position:relative和负margin都可以使元素位置发生偏移,二者的区别表现在:
margin会使元素在文档流中的位置发生偏移,它会放弃偏移之前占据的空间,紧挨其后的元素会填充这部分空间;
相对定位后元素位置发生偏移,它仍会坚守原来占据的空间,不会让文档流的其他元素流入。
BFC 是什么?如何生成 BFC?BFC 有什么作用?举例说明
BFC是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。
如何形成BFC :
浮动(none除外),绝对定位, display:inline-block|table-cells|table-captions, overflow的值不为visible时可以创建一个新的格式化上下文。根元素如html元素也可以触发BFC。
作用:
(1) 解决margin重叠问题,同一个BFC中,相邻元素之间的边距会合并,如果把这两个元素分别放在两个BFC中,他们的边距就不会合并。一般应用于嵌套。
(2)清除浮动。BFC不会重叠浮动元素。
举例:当父容器的子元素都采用浮动时父容器会塌陷,此时可以加入新的属性使容器形成BFC从而计算浮动元素的高避免塌陷
在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?
场景:
同一个BFC内,且同处于普通流中的垂直相邻元素外边距合并。
父子元素的外边距合并。如果块级父元素中,不存在border-top、padding-top、inline content、 清除浮动 这四条属性,会发生上外边距合并;若块级父元素的 margin-bottom 与它的最后一个子元素的margin-bottom 之间没有父元素的 border、padding、inline content、height、min-height、 max-height 分隔时,就会发生 下外边距合并 现象。
空元素的外边距合并。如果存在一个空的块级元素,其 border、padding、inline content、height、min-height 都不存在。那么此时它的上下边距中间将没有任何阻隔,此时它的上下外边距将会合并。
合并规则:
两个margin都是正值的时候,取两者的最大值;
当 margin 都是负值的时候,取的是其中绝对值较大的,然后,从0位置,负向位移;
当有正有负的时候,相加的和。
所有毗邻的margin要一起参与运算,不能分步进行。
不让相邻元素外边距合并的方法:
被非空内容、padding、border 或 clear 分隔开。
不在一个普通流中或一个BFC中。
margin在垂直方向上不毗邻。
父子元素外边距合并
如图 对box2设置margin-top后box2的位置并未相对于box1下移;而是发生外边距合并导致整体下移,box3由于margin-top小于box2的margin-top,所以50px未生效,与box2合并为50px。