前端文档流学习

2019-08-16  本文已影响0人  十二月的肖邦_

内容概要

本文主要讲述学习文档流的内容和与文档流相关的一些属性和标签。

文档流

文档流指的是网页中的内容元素布局过程中,内容元素会自动地从左往右,从上往下的流式排列。
在从左往右的布局过程中,如果两个元素高度不同,则自动是底端对齐。

这里面有块级元素与行内元素

块级元素

占据一行,不能与其他元素并排
可以设置width、height
如果不设置宽度,就会继承父亲的宽度

行内元素

可以与其他元素并排在一行,不能设置width、height。

块级元素和行内元素可以相互转化,例如
块级元素可以转换为行内元素:
如果给一个块级元素(比如div)设置:
display: inline;
那么,这个标签就会变为行内元素。

行内元素转换为块级元素:
如果给一个行内元素(比如span)设置:
display: block;
那么,这个标签将会变为块级元素。

结合脱离文档流来实践转化:

如果是普通span行内标签,里面的文字会为脱离文档流的元素让路,围绕在它周围,也就是部分无视。并且行内元素没有宽度,所以如果窗口还有位置,他会在紧挨着脱离文档流的元素的后面显示。

如果给span设置display:block; 那么它将变为块级元素,整个块级元素不会为脱离文档流的元素让路,但是其中的文字会让路,但是剩余的宽度不足显示所有文字,就到脱离文档流的元素的下面去显示了。

<h4 id="2-4">脱离文档流</h4>
就是将元素从普通的文档流布局排版中拿走,其他盒子在定位的时候,会当做脱离文档流的元素不存在而进行定位。

css中一共有三种手段,使一个元素脱离标准文档流:
(1)浮动
(2)绝对定位
(3)固定定位

文档一旦脱离文档流,在算其父元素的高度时,就不包括其自身了。
脱离文档流的方法:

  1. float:left;
  2. position: absolute;
  3. position:fixed

position一共有5个取值:

脱离文档流中有两个概念:部分无视完全无视

使用float脱离文档流时,其他盒子会无视这个元素,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围(部分无视)。而对于使用absolute 、position脱离文档流的元素,其他盒子与其他盒子内的文本都会无视它。(完全无视)
代码演示:

<head>
        <meta charset="utf-8">
        <title></title>
        <style>
            .test{
                background-color: red;
                float: left;
/*              position: absolute;
 */             width: 200px;
                height: 200px;
            }
            .common {
                width: 300px;
                height: 300px;
                background-color: #008000;
            }
        </style>
    </head>
    <body>
        <p>啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</p>
                <div class="test"></div>
        <div class="common">哈哈哈哈哈哈哈哈</div>
    </body>

当是float时的效果:(哈哈哈没有被挡到)


image.png

当是absolute或者fixed时的效果:(被挡住了)


image.png

所以,这一条规律就比较容易理解了:

浮动的框之后的block元素元素会认为这个框不存在,但其中的文本依然会为这个元素让出位置。 浮动的框之后的inline元素,会为这个框空出位置,然后按顺序排列。

另外,脱离文档流的元素不会撑开父元素的高度和宽度。

<h4 id="2-5">overflow</h4>
overflow 属性规定当内容溢出元素框时需要做的处理。

清除浮动

clear

clear属性规定元素的哪一侧不允许出现浮动元素。
取值:
none : 默认值。允许两边都可以有浮动对象
left : 不允许左边有浮动对象
right : 不允许右边有浮动对象
both : 不允许有浮动对象
clear属性只会对自身起作用,而不会影响其他元素。如果一个元素的右侧有一浮动对象,而这个元素设置了不允许右边有浮动对象,即clear:right,则这个元素会自动下移一格,达到本元素右边没有浮动对象的目的。

“float是魔鬼,会影响其他相邻元素;但是clear是小白,其只会影响自身,不会对其他相邻元素造成影响!”

例子:使用了float: left; 虽然左边有了浮动元素,但因为clear的缘故,自己移动到下一行了。

overflow:hidden

给父元素设置overflow:hidden可以清除子元素重的浮动。

overflow:hidden的含义是超出的部分要裁切隐藏,float的元素虽然不在普通流中,但是他是浮动在普通流之上的,可以把普通流元素+浮动元素想象成一个立方体。如果没有明确设定包含容器高度的情况下,它要计算内容的全部高度才能确定在什么位置hidden,这样浮动元素的高度就要被计算进去。这样包含容器就会被撑开,清除浮动。

原本div3应该在上面的,因为父元素hidden的设置,消除了浮动。

总结归纳

文档流解释了网页布局的原则,在对元素进行布局时,需要按照文档流的规矩,如果需要特殊的布局,可以按照所需方法来脱离文档流,实现布局。对文档流的理解,需要结合代码实践来学习。

上一篇下一篇

猜你喜欢

热点阅读