要了解css的布局,就要先了解什么是文档流。文档流就是HTML元素的一种排列规则。
而正常文档流就是在不用样式控制之下,html元素的默认排版方式。它的规则如下:
<div>独占一行</div>
从左向右<span></span><img />
这是在不使用 样式的请况之下正常排列方式。倘若使用样式改变了某些元素的位置,那么就称为脱离文档流。也正是因为如此,才能有丰富的页面布局方式。否则大家都只是遵循上述两种方式,那就太枯燥单一了。
float属性,一般情况下元素默认是不浮动的,一旦添加该属性,元素就会向右或者向左浮动。看例子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
header {
border: 2px rebeccapurple solid;
}
p {
border: 3px greenyellow solid;
}
.float {
border: 1px red solid;
/* height: 100px; */
}
.float div:nth-child(1) {
border: 1px blue solid;
float: left;
}
.float div:nth-child(2) {
border: 1px black solid;
float: left;
}
.float div:nth-child(3) {
border: 1px green solid;
float: left;
}
</style>
<body>
<header>
<span>行内元素</span><span>不会导致高度塌陷</span>
<p>这是正常流文字文字</p>
</header>
<div class="float">
<div>box1</div>
<div>box2</div>
<div>box3</div>
<p>这是浮动文字</p>
</div>
</body>
</html>
经过对比可以发现,在不使用浮动之前,三个盒子都按照块元素的正常文档流排列方式,并且父元素的高也随着他们的内容大小变化。而一旦使用了浮动元素。会发现几点变化:
这里也引入一个问题
出现于上述的那种情况,因为那三个盒子脱离了文档流。自己排布,他们虽然相对于父元素排布,但却不是父元素的正常文档流的内容,所以无法将其撑开,从而导致父元素的高度回缩,也就是坍塌。
虽然浮动元素脱离了文档流,但并不是不对正常流文档元素产生影响。上述例子中,虽然没有把父元素撑开,但是与它同级的兄弟元素并不会直接跑到它上面去,而是在它之下按照一下两个规则排列
这一类段落标签会自动换行,并且自带内边距
这一类无论是否有内容,都不会排到浮动元素后面,而是直接相对于父元素按照正常文档流排列,好像是直接无视了之前的浮动元素一样,认为自己就是父元素之下的第一个子元素
当然内边距,外边距,边框这些属性在浮动元素之间,仅仅是在它们之间是生效的。与其他正常文档流不产生效果
嗯?为什么还要清除浮动?直接不浮动就行了啊?
其实这是给浮动元素之后的元素用的,并不是给浮动元素本身用的;之所以要这样,是因为紧跟在浮动元素后面的普通元素都会受到影响。就比如上述说的两种紧跟浮动元素之后排列的方式。我能不能让它不要忽视浮动元素,而是排在浮动元素之后呢?能不能让段落标签不这么紧贴着,而是以边框为基准排在浮动元素后面呢?答案是肯定的。
这也是脱离文档流的一种方式,它通过显式的设置定位坐标及大小来实现
这个比较简单,是相对于浏览器而言,导航栏通常就这么用;直接脱离文档流,别的元素将会无视它并且挤上来
相对于原来的位置定位,原来位置就是正常文档流的位置。而且周边元素不会挤上来,看似好像是它已经走了,但是原来的位置还完好无损的留着。
绝对定位,也是直接脱离文档流,别的元素将会无视它并且挤上来
默认定位,也是每一个元素的初始定位,也就是正常文档流
这个东西其实不是一个规范的知识点,它是一个规则概念。为了解决普通元素与普通元素之间,普通元素与浮动元素之间产生的属性混乱问题
它的定义就是,Formatting context(格式化上下文) 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。
具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有