【前段积累】可视化模型

三个最重要的控制页面安排和显示元素的方式:浮动、定位、框模型。

框模型:

框模型是CSS的基石之一,它指定元素如何显示一级如何相互交互。页面上的每个元素都被看成一个矩形框,这个框由元素的内容、填充、边框和空白边组成。

填充出现在内容区域的周围。如果在元素上添加背景,那么背景会应用于由内容和填充组成的区域。因此,常常使用填充在内容周围创建一个隔离带,使内容不会与背景混在一起。添加边框会在填充的区域外边加一条线。这条线可以有多种样式,比如实线、虚线、点线。在边框外是空白边,空白边是透明的,阴暗使用它控制元素之间的间隔。

填充、边框和空白边都是可选的,默认值为0。但是,许多元素将由用户代理样式设置表空白边和填充。可以通过将元素的margin和padding设置为0来覆盖这些浏览器样式。

1    *{
2     margin:0;
3     padding:0;
4     }

在css中,width和height指的是内容区域的宽度和高度,增加填充、边框和空白边不会影响内容区域的尺寸,但是会增加元素框的总尺寸

填充、边框和空白边可以应用于一个元素的所有边,也可以应用于单独的边。空白边还可以是负值,并且在多种技术中都要使用负值的空白边。

空白边叠加:当两个垂直的空白边框相遇时,他们将形成一个空白边,这个空白边的高度等于两个发生叠加的空白边的高度中的较大者。

只有普通文档流中块框的垂直空白才会发生空白边叠加。行内框、浮动框或绝对框定位之间的空白边不会叠加。

相对定位:

如果对一个元素进行相对定位,它将出现在他所在的位置上。然后,可以通过设置垂直会水平位置,让这个元素“相对于”他的起点进行移动。如果将top设置为20像素,那么狂将出现在原位置顶部下面20像素的地方,如果将left设置为20像素,那么会在元素左边创建20像素的空间也就是将元素向右移动。

在使用相对定位时,无论是否进行移动,元素将仍然占用原来的空间。因此,移动元素会导致它覆盖其它框。

视觉格式化模型:

p、h1、或div等元素常常称为块级元素。这意味着这些元素显示为一块内容,即“块框”。与之相反,strong和span等元素称为行内元素,因为他们的内容显示在行中,即“行内框”。

可以使用display属性改变生成的框的类型。这意味着,通过将display属性设置为block,可以让行内元素表现得像块级元素一样。还可以通过将display属性设置为none,让生成的元素根本没有框。这样,这个框及其所有内容就不再显示,不占用文档中的空间。

 CSS中有三种基本的定位机制:普通流、浮动和绝对定位。除非专门指定,否则所有框都在普通流中定位。顾名思义,普通流中元素框的位置由元素在HTML中的位置决定。

块级框从上到下一个接一个地排列:框之间的垂直距离由框的垂直空白边计算出来。

行内框在一行中水平布置,可以使用水平填充、边框和空白边调整他们的水平间距。但是、垂直填充、边框和空白边不影响行内框的高度。由一行形成的水平框称为行框,行框的高度总是足以容纳它包含的所有行内框,但是设置行高可以增加这个框的高度。

绝对定位:

 相对定位实际上被看做普通流定位模型的一部分,因为元素的位置相对于它的普通流中的位置。与之相反,绝对定位使元素的位置与文档流无关,因为不占据空间。普通文档流中其他元素的布局就像绝对定位的元素不存在时一样。

绝对定位的元素的位置相对于最近的已定位祖先元素。如果元素没有已定位的祖先元素,那么他的位置相对于最初的包含块。

与相对定位的框一样,绝对定位的框可以从他的包含向上、下、左、右移动。这提供了很大的灵活性。可以直接将元素定位在页面上任何位置。

对于定位的主要问题是要记住每种定位的意义,相对定位是“相对于”元素在文档流中的初始位置,而绝对定位是“相对于”最近的已定位祖先元素,如果不存在已定位的祖先元素,那么是最初的包含块。

因为绝对定位的框与文档流无关,所以他们可以覆盖页面上的其他元素,可以通过设置z-index属性来控制这些矿的堆放次序。z-index的值越高,框在堆中的位置就越高。

绝对定位的元素的位置相对于最近的已定位祖先元素,这使我们能够实现一些非常有意思的效果。例如,假设希望让一个文本段落对准一个大框的右下角,只需对包含框进行相对定位,然后相对于这个框对段落进行相对定位。

 1 <style type="text/css">
 2 #branding{
 3     width:300px;
 4     height:100px;
 5     position:relative;
 6     background-color:#0CF;
 7     }
 8 #branding .tel{
 9     position:absolute;
10     right:10px;
11     bottom:10px;
12     text-align:right;
13     }
14 </style>
15 
16 <div id="branding">
17 <p class="tel">Tel:0845 838 6163</p>
18 </div>

在进行页面布局时,绝对定位是非常有用的工具,尤其是在使用相对定位的祖先元素的情况下,完全可能只使用绝对定位创建出整个设计。为此。这些元素需要具有固定尺寸,这样就能够将他们定位在任何地方而不会有重叠的风险。

因为绝对定位的元素与文档流无关,所以他们不影响普通流中的框。如果扩大绝对定位的框,周围的框不会重新定位。因此,尺寸的任何改变会导致绝对定位的框生重叠,从而破坏精心调整过的布局。

固定定位:

固定定位是绝对定位的一个子类别,差异在于固定元素的包含块是视口。这使我们能够创建总是出现在窗口中相同位置的浮动元素。

浮动:

浮动的框可以左右移动,直到他的外边缘碰到包含框或另一个浮动框的边缘。因为浮动框不在文档的普通流中,所以文档的普通流中的块框表现的像浮动框不存在一样。

行框和清理:

浮动框旁边的行框被缩短,从而给浮动框流出空间,行框围绕浮动框。实际上创建浮动框使文本可以环绕图像。

要想阻止行框围绕在浮动框的外边,需要对这个框应用clear。clear属性的值可以是left,right,none,both他表示框的哪些边不应该挨着浮动框。为了实现这种效果,在被清理元素的顶空白边上面添加足够的空间,使元素的顶边垂直下降到浮动框下面。

浮动元素脱离了文档流,不影响周围的元素。但是,对元素进行清理实际上为前面的浮动元素流出了垂直空间。

这解决了前面看到的绝对定位的问题,也就是垂直高度的改变不影响周围的元素,从而破坏了设计。

 1 .news{
 2     background-color:#F00;
 3     border:solid 1px black;}
 4 .news img{
 5     float:left;
 6     }
 7 .news p{
 8     float:right;}
 9 
10 <div class="news">
11 <img src="file:///D|/book/position-pic.png"/>
12 <p>How to learn css well is a question.But all of us will try best to do it better.so ,wait a month time,you will see the difference.</p>
13 </div>

因为浮动元素脱离了文档流,所以包围图片和文本的div不占据空间。如何让包围元素在视觉上包围浮动元素呢?需要应用clear.

因为浮动元素不占据空间,所以容器元素不包围他们,添加一个进行清理的空元素可以迫使容器元素包围浮动元素。但是没有现有的元素可以应用清理,所以需要添加一个空元素并清理它。

.news{
    background-color:#F00;
    border:solid 1px black;}
.news img{
    float:left;
    }
.news p{
    float:right;}
.clear{
    clear:both;}

<div class="news">
<img src="../position-pic.png"/>
<p>How to learn css well is a question.But all of us will try best to do it better.so ,wait a month time,you will see the difference.</p>
<div class="clear"></div>
</div>

还可以不对浮动的文本和图像进行清理,而是选择对容器div进行浮动:

1 .news{
2 background-color:gray;
3 border:solid 1px black;
4 float:left;
5 }

这样的话下一个元素会受到浮动元素的影响,为了解决这个问题,可以选择对布局中几乎所有东西进行浮动,然后使用适当的有意义元素比如页脚等对浮动进行清理、

应用值为hidden或auto或overflow属性会自动地清理包含的任何浮动元素,而不添加额外的标记。

原文地址:https://www.cnblogs.com/dream-to-pku/p/6639290.html