文档流
定义
文档流指的是元素排版布局过程中,元素会默认自动从左往右,从上往下的流式排列方式。并最终窗体自上而下分成一行行,并在每行中从左至右的顺序排放元素。
标准文档流
块级元素
- 独占一行,不能与其他任何元素并列
- 能接受宽、高
- 如果不设置宽度,那么宽度将默认变成父元素的100%。
行内元素
- 与其他元素并排
- 不能设置宽、高。默认宽度就是文字宽度
body {
background-color:yellow
}
img {
height:200px;
width: 180px;
}
div {
width:100px;
height:50px;
background-color:red
}
<body>
<img src="demo1.jpg" alt="一">
<img src="demo1.jpg" alt="二">
<div></div>
</body>
display(属性规定元素应该生成的框的类型)
- block元素通常被现实为独立的一块,会单独换一行。
- inline元素则前后不会产生换行,一系列inline元素都在一行内显示,直到该行排满。 一般来说,可以通过display:inline和display:block的设置,改变元素的布局级别。
display:block(块级元素)
- block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度。
- block元素可以设置width,height属性。块级元素即使设置了宽度,仍然是独占一行。
- block元素可以设置margin和padding属性。
display:inline(内联元素、行内元素)
- inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。
- inline元素设置width,height属性无效。
- inline元素的margin和padding属性,水平方向的padding-left, padding-right, margin-left, margin-right都产生边距效果;但竖直方向的padding-top, padding-bottom, margin-top, margin-bottom不会产生边距效果。
display:inline-block
简单来说就是将对象呈现为inline对象,但是对象的内容作为block对象呈现。之后的内联对象会被排列在同一行内。比如我们可以给一个link(a元素)inline-block属性值,使其既具有block的宽度高度特性又具有inline的同行特性。
position(属性规定元素的定位类型)
position:static(静态定位)
对象遵循标准文档流中,top、right、bottom、left等属性失效
position:absolute(绝对定位)
-
对象脱离标准文档流,参考距其最近一个不为static的父级元素,可使用top、right、bottom、left四个属性来设置绝对定位元素的位置。 -
它不会随着窗口的大小而发生变化,只是固定在一个特定的坐标轴上面。坐标原点(是参照浏览器的左上角,配合四个属性进行定位,没有设置时,默认依据父级的坐标原点为原始点。如果设置四个属性并且父级没有设定position属性,那么当前的absolute则以浏览器左上角为原始点进行定位,位置由四个属性的值决定。)
-
参照物:
1:设置position:absolute的元素如果存在有祖先元素设置了position属性为relative或absolute,则这时元素的定位对象为此已设置position属性的祖先元素。
2、如果没有设置position属性的祖先元素,则此时相对于body进行定位。
position:relative(相对定位)
对象遵循标准文档流,依赖top、right、bottom、left等属性相对于该对象在标准文档流中的位置进行偏移,同时可通过z-index定义层叠关系。(值可以是正值,或负值)
body {
background-color:yellow
}
img {
height:100px;
width: 100px;
position:relative;
left:20px;
top:30px;
margin-bottom:20px;
}
div {
width:50px;
height:50px;
background-color:red
}
<body>
<img src="demo1.jpg" alt="一">
<div></div>
</body>
position:fixed(固定定位)
相对于浏览器窗口进行偏移,定位基点是浏览器窗口,会导致元素的位置不随压面滚动而变化,固定在网页上。- 如果使用top、right、left、bottom属性,表示元素的初始位置是基于浏览器窗口计算的。否则初始位置就是元素的默认位置。
| 值 | 描述 |
|---|---|
| absolute(绝对定位) | 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
| relative(相对定位) | 生成相对定位的元素,相对于其正常位置进行定位。不脱离文档流。因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。 |
| fixed(固定定位) | 生成固定定位的元素,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
| static | 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。 |
| inherit | 规定应该从父元素继承 position 属性的值。 |
position:sticky(粘性定位)
基于用户的滚动位置来定位- 粘性定位的元素是依赖于用户的滚动,在position:relative与position:fixed定位之间切换
- 指定top,right,bottom 或left四个阀值其中一个,才可使粘性定位生效。否则其行为与相对定位相同。
overflow(属性规定当内容溢出元素框时发生的事情)
overflow:hidden
内容会被修剪,并且其余内容是不可见的。
overflow:auto
如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
overflow:scroll
内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。