Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

我叫浮动,我想讲讲我的故事 #5

Open
Jomsou opened this issue Feb 9, 2018 · 0 comments
Open

我叫浮动,我想讲讲我的故事 #5

Jomsou opened this issue Feb 9, 2018 · 0 comments

Comments

@Jomsou
Copy link
Owner

Jomsou commented Feb 9, 2018

最近在整理回顾css的知识点,so我情不自禁地想以第一人称讲讲浮动的故事,这样可能有趣一点点。好了,以下从几个方面来讲。
1、我是谁?(什么是浮动?)
2、我为什么存在?(为什么要浮动?)
3、实现我的原理?(浮动的原理?)
3、我惹下的祸,怎么去解决?(如何清除浮动?)
——————————————————————————————————————————————
1、我是谁?(什么是浮动?)
打个比方,正常情况下,页面中的块级元素(block)就像一个个沉在水中的铁块,如果我们将铁块换成木块?那么他们就会飘起来,浮在水面上,如下,第二图就是给div1~div3设置float:left(浮动)后的结果。
1
2
2、我为什么存在?(为什么要浮动?)
因为块级元素独占一行,为了实现布局,设置浮动,可以方便布局。
(1)对于块级元素来说,在不设置宽度的情况下,默认宽度是100%,一旦设置浮动,它的宽度就会根据内容内容进行自动调整。
3
(2)设置浮动的元素会脱离正常的文档流。
4
(3)虽然浮动的元素脱离了文档流,但是里面的内容仍然占据空间,会根据相对位置进行布局。如下图所示。
将div1设置为float:left,由于float元素脱离了文档流,div2自动向上补一位,文字normal2并没有被div1中的文字覆盖,而是排列在正常的相对位置上。
5

3、实现我的原理?(浮动的原理?)
“浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。”

— W3School

浮动的框可以左右移动,直至它的外边缘遇到包含框或者另一个浮动框的边缘。浮动框不属于文档中的普通流,当一个元素浮动之后,不会影响到块级框的布局而只会影响内联框(通常是文本)的排列,文档中的普通流就会表现得和浮动框不存在一样,当浮动框高度超出包含框的时候,也就会出现包含框不会自动伸高来闭合浮动元素(“高度塌陷”现象)。顾名思义,就是漂浮于普通流之上,像浮云一样,但是只能左右浮动。
float属性:
3个属性值:

left - 左浮动
right - 右浮动
none - 不浮动
特点:
元素会左移,或右移,直至触碰到容器为止。
设置了浮动的元素仍旧处于标准文档流中。会占据标准文档流空间,对其他元素有影响。
4、我惹下的祸,怎么去解决?(如何清除浮动?)
我惹下的祸--父元素高度坍塌
(自己偏爱的)解决方案:
在父元素里加一个“假儿子”--clearfix:after

.clearfix:after {
    content: "";
    display: table;   //触发BFC
    height: 0;
    clear: both;   //清除浮动
    visibility: hidden;
}
.clearfix{
     *zoom:1;
}

清除浮动前:
6

清除浮动后:
8

其他参照:【CSS】浮动和它的工作原理?清除浮动的技巧?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant