CSS布局知识汇总:
CSS布局是前端开发的基础,以下是对布局知识的系统学习和汇总。
1. 正常文档流(Normal Flow)
在正常的文档流中,写作模式是水平方向,正常流会垂直地一个接一个排列页面的块级元素;若写作模式是垂直方向,正常流会将块级元素水平排列。
-
- 正常文档流的用处
在定义的CSS加载失败,或者是浏览器不支持新特性,在正常文档流的支撑下,页面会保持可阅读的状态下。
-
- 脱离正常文档流
脱离正常文档流,不按照正常文档流的结构显示。
2. 浮动
脱离文档流的例子,为元素设置float属性,值有left、right,默认值为none。
当设置了某个元素浮动,文字会环绕浮动元素。如果要设置浮动元素与环绕文字之间的距离,需要设置浮动元素的margin属性值。
body{
padding: 20px;
font: 1em Helvetica Neue,Helvetica,Arial,sans-serif;
}
p{
margin:0 0 1em 0;
}
.p1{
background-color: red
}
.container{
width:500px;
border: 5px solid rgb(111,41,97);
border-radius: .5em;
padding: 10px;
}
.item{
width: 100px;
height: 100px;
float:left;
margin: 20px 20px 20px 20px;
background-color: blue
}
</style>
</head>
<body>
<div class="container">
<div class="item"></div>
<p class="p1">Pea horseradish azuki bean lettuce avocado asparagus okra. Kohlrabi radish okra azuki bean corn fava bean mustard tigernut jícama green bean celtuce. </p>
<p>Grape silver beet collard greens avocado quandong fennel gumbo black-eyed pea watercress potato tigernut corn groundnut. Chickweed okra pea winter purslane coriander yarrow sweet pepper radish garlic brussels sprout groundnut summer purslane earthnut pea tomato spring onion azuki bean gourd. Gumbo kakadu plum komatsuna black-eyed pea green bean zucchini gourd winter purslane silver beet rock melon radish asparagus spinach.</p>
</div>
</body>
2.清除浮动
对元素使用了浮动,接下来的元素会环绕它,直到元素开始应用正常文档流。避免这种情况,则需要清除浮动,添加clear属性即可。
.container::after{
content: "",attr();
display: table;
clear:both;
}
2.2 块级格式化上下文(Block Formatting Context )
清除浮动的另一个方法是在容器内创建BFC。一个BFC完全包裹住了它的内部元素,包括内部的浮动元素,保证浮动元素不超过其底部。为元素设置visible(默认)之外的overflow属性。
.container{
Overflow:auto;
}
此种方法大部分情况下是有效的,但是会带来阴影或非预期的滚动条。使用display:flow-root,可以清除浮动,并且可以避免BFC的负面影响。
.container{
Display: flow-root;
}
2.3 float遗留作用:创建多栏布局
3. 定位(position)
处于正常文档流中,position的属性值为static。通过改变position的属性值,设置一些偏移量来是元素相对于参照点一定的距离。
3.1 相对定位(relative positioning)
元素具有属性position: relative, 偏移的参照为原先其正常文档流中的位置。可以使用top、bottom、left、right属性来设置相对于正常文档流位置进行移动。
.item{
position: relative;
Bottom: 50px;
}
页面上的元素不会因为该位置变化而受到影响,该元素处于正常文档流中的位置会被保留,因此需要手动处理元素内容覆盖的情况。
3.4 绝对定位(absolute positioning)
元素设置position: absolute属性可以将其在正常流中移除。该元素原本占据的空间也会被移除。元素的定位会相对于视口容器,除非某个祖先元素也是定位元素(position的值不为static)。
元素设置了position: absolute,元素会定位在视口的左上角,可以通过left、right、bottom、top偏移量属性将元素移动到想要的位置。
通常情况下,绝对定位不用来相对于视口的定位,而是相对于容器,则此时该为容器设置position属性值除static以外的值。
.container{
position: relative;