• 【前段积累】可视化模型


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

    框模型:

    框模型是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属性会自动地清理包含的任何浮动元素,而不添加额外的标记。

  • 相关阅读:
    git 操作
    vim使用指北 ---- Multiple Windows in Vim
    Unity 异步网络方案 IOCP Socket + ThreadSafe Queue
    unity 四元数, 两行等价的代码
    golang的项目结构 相关知识
    stencil in unity3d
    一段tcl代码
    16_游戏编程模式ServiceLocator 服务定位
    15_游戏编程模式EventQueue
    14_ Component 游戏开发组件模式
  • 原文地址:https://www.cnblogs.com/dream-to-pku/p/6639290.html
Copyright © 2020-2023  润新知