浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响?
- 浮动元素的特征:
- 不占据普通文档流的空间。
- 浮动元素的左(右)外边界不能超过其包含块的左(右)内边界。
- 浮动元素的左(右)外边界必须是源文档中之前出现的左浮动(右浮动)的元素的右(左)边界,除非后出现浮动元素的顶端在先出现浮动元素的底端下面。
- 左浮动元素的右外边界不会在其右边浮动元素的左外边界的右边。一个右浮动元素的左外边界不会在其左边任何左浮动元素的右外边界的左边。
- 一个浮动元素的顶端不能比其父元素的内顶端更高。
- 浮动元素的顶端不能比之前所有浮动元素或块级元素的顶端更高。
- 如果文档中一个浮动元素之前出现另一个元素,浮动元素的顶端不能比包含该元素所生成的框的任何行框的顶端更高。
- 如果浮动元素出现在另一个浮动元素的旁边,而因此可能导致超出包含块的话,这个浮动元素会向下浮动到之前浮动元素下面的某一点。
- 浮动元素必须尽可能高地放置。
- 左浮动元素必须向左尽可能远,右浮动元素必须向右尽可能远。
- inline元素设置浮动,改变inline的display使得它像个block-level。
- 在重叠上,浮动元素会遮盖block-level元素的背景,不会遮盖inline元素。
- 影响:
- 非BFC的正常文档流父元素会"感受"不到浮动元素的存在,从而产生"高度塌陷"。
- 其他浮动元素会"察觉"到浮动元素的存在按照从左到右的"正常文档流"排列。
- 普通元素(非inline-level)会无视浮动元素的存在,从而占据浮动元素的"原来的位置"。
- 文字(也既inline-level)级的元素会环绕浮动元素,表现的像是察觉到浮动元素一样。
清除浮动指什么? 如何清除浮动? 两种以上方法
清除浮动指元素的侧边不允许出现浮动元素,从而使得浮动元素的不占据普通文档流空间的使得父元素的高度塌陷问题得到解决,主要通过clear属性实现。
clear:指定一个元素是否可以在它之前的浮动元素旁边,或者必须向下移动(清除浮动) 在它的下面。clear 属性适用于浮动和非浮动元素。
当应用于非浮动块时,它将非浮动块的边框边界移动到所有相关浮动元素外边界的下方。这个行为作用时会导致margin collapsing不起作用。
当应用于浮动元素时,它将元素的外边界移动到所有相关的浮动元素外边界的下方。这会影响后面浮动元素的布局,后面的浮动元素的位置无法高于它之前的元素。
- 方法:
- 设置浮动包含块的父元素height值。
- 使得含块的父元素变成BFC。
- 通过添加:after伪元素,然后在伪元素上设置clear属性来实现。
有几种定位方式,分别是如何实现定位的,参考点是什么,使用场景是什么?
- inherit
从父元素继承position属性的值
一般不用 - static默认值,没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明
- relative
生成相对定位的元素,相对于元素本身正常位置进行定位
属性值:left, top,right ,bottom
应用于对其自身进行细微调整 - absolute
生成绝对定位的元素,相对于static定位以外的第一个祖先元素(offset parent)进行定位
属性值:left, top,right ,bottom - fixed
生成绝对定位的元素,相对于浏览器窗口进行定位。
属性值:left, top,right ,bottom
需要一直停留在窗口的元素 - sticky
兼容性较差,一般用JS实现
新的css3属性,它的表现类似position:relative和position:fixed的合体,目标区域在屏幕中可见时,它的行为就像position:relative; 而当页面滚动超出目标区域时,它的表现就像position:fixed,它会固定在目标位置。 - 注意:如果同时定义了left和right值,且width和height有值,那么left生效,right无效,同样,同时定义了top和bottom,top生效。
z-index 有什么作用? 如何使用?
层叠领域的黄金准则:
- 谁大谁上:当具有明显的层叠水平标示的时候,如识别的z-indx值,在同一个层叠上下文领域,层叠水平值大的那一个覆盖小的那一个。
- 后来居上:当元素的层叠水平一致、层叠顺序相同的时候,在DOM流中处于后面的元素会覆盖前面的元素。
层叠上下文有以下属性:
- 层叠上下文的层叠水平要比普通元素高;
- 层叠上下文可以阻断元素的混合模式;
- 层叠上下文可以嵌套,内部层叠上下文及其所有子元素均受制于外部的层叠上下文。
- 每个层叠上下文和兄弟元素独立,也就是当进行层叠变化或渲染的时候,只需要考虑后代元素。
- 每个层叠上下文是自成体系的,当元素发生层叠的时候,整个元素被认为是在父层叠上下文的层叠顺序中。
z-index规定了元素在Z轴(距离用户远近)上的顺序,值越大(需要同属于同一个层叠上下文关系)则越靠近用户,表现就是元素在最上面。
举例说明:
设置z-index:auto;不会形成一个层叠上下文,于是两个img的层叠关系不受父级元素的影响,套用层叠黄金准则("谁大谁上"),上面一张图片会叠在下面一张图片上面
设置z-index:0;建立了一个层叠上下文,根据层叠上下文的特性里面最后一条——自成体系,两个图片的层叠顺序比较变成了优先比较其父级层叠上下文元素的层叠顺序。这里,由于两者都是z-index:0,层叠顺序这一块两者一样大,此时,遵循层叠黄金准则的另外一个准则“后来居上”,根据在DOM流中的位置决定谁在上面,此时下面一张图片会叠在上面一张图片上面
z-index仅在设置了position非static属性的元素生效,且z-index的值只能在兄弟元素之间比较。
Z-index默认值为auto,则不建立层叠上下文。设置为0则会建立层叠上下文。
position:relative和负margin都可以使元素位置发生偏移?二者有什么区别
position:relative相对自己原本的位置偏移,不影响其它普通流中元素的位置。
margin:除了让元素自身发生偏移还影响其它普通流中的元素。
BFC 是什么?如何生成 BFC?BFC 有什么作用?举例说明
BFC:块格式化上下文(block formatting context) 是Web页面的可视CSS渲染的一部分。它是块盒子的布局发生及浮动体彼此交互的区域。首先BFC是一个名词,是一个独立的布局环境,我们可以理解为一个箱子(实际上是看不见摸不着的),箱子里面物品的摆放是不受外界的影响的。
形成条件:
- 根元素或其它包含它的元素
- 浮动 (元素的 float 不是 none)
- 绝对定位的元素 (元素具有 position 为 absolute 或 fixed)
- 内联块 inline-blocks (元素具有 display: inline-block)
- 表格单元格 (元素具有 display: table-cell,HTML表格单元格默认属性)
- 表格标题 (元素具有 display: table-caption, HTML表格标题默认属性)
- 块元素具有overflow ,且值不是 visible
- display: flow-root
应用:
- 自适应的两栏布局。
- 清除元素内部浮动。
- 嵌套元素margin边距合并问题的解决。
在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例
-
外边距合并出现的三个场景。
- 同一个BFC,且同处于普通流中的垂直相邻元素外边距合并。
- 父子元素的外边距合并。
- 空元素的外边距合并。
-
合并规则:
- 两个margin都是正值的时候,取两者的最大值;
- 当 margin 都是负值的时候,取的是其中绝对值较大的,然后,从0位置,负向位移;
- 当有正有负的时候,先取出负 margin 中绝对值中最大的,然后,和正 margin 值中最大的 margin 相加。
- 所有毗邻的margin要一起参与运算,不能分步进行。
-
不让相邻元素外边距合并的方法:
- 被非空内容、padding、border 或 clear 分隔开。
- 不在一个普通流中或一个BFC中。
- margin在垂直方向上不毗邻。
给个父子外边距合并的范例