定位方案(Positioning schemes)

  在这个系列第一章里可视化格式模型里就说到过,影响框的布局的几个因素:

  1.框的尺寸和类型

  2.定位体系

  3.文档树中元素间的关系

  4.外部信息

  其中,我觉得在实际工作中处理最多的还要属定位体系的问题。定位体系,主要分三种,常规流(normal flow)、浮动(floats)、绝对定位(absolute positioning),这一节将大致的描述一下这三种定位体系,有一个大概的印象,知道到底是什么,然后后面的章节会一个一个具体的分析。

一、常规流

  从直观上理解,常规流指的是html中的元素,按照它们在html中的位置顺序,决定它们排布的过程,自上而下,从左至右。同时,也因为是流,所以位置是可变的。常规其实是一个相对的概念,是相对脱离了常规流的float元素和absolute元素来说的。

  在css2.1中,常规流包括块框(block boxes)的块格式化(block formatting),行内框(inline boxes)的行内格式化(inline formatting),块框或行内框的相对定位,以及插入框的定位。

二、浮动

  在浮动模型中,一个框首先根据常规流来布局,再将它从流中取出并尽可能地向左或向右偏移。内容可以沿浮动区的侧面排列。 因为它首先要根据常规布局后才偏移,所以效率较常规流低。

三、绝对定位

  在绝对定位模型中,一个框完全的从常规流中脱离,对它后面的兄弟元素完全没有影响,并会根据它的包含块来定位。

  绝对定位元素有一个很有意思的事情,如果你不设置absolute元素的top、left、right、bottom,它就会在它在常规流中本来的位置,但是感觉就像虚化了,不会占据任何空间,也不会影响后面的元素。根据这个性质可以做很多事情,会在后面的章节里详细的讲。

四、流(flow)

  一个元素,如果它使float元素、absolute定位了,或者是根元素(html),那么它就被叫做流外的元素(out of flow)。如果一个元素不是流外的元素,那么它被称为流内的元素(in flow)。

  元素A的流是一个集合,包含A元素本身,以及元素A的流内的子元素,且这些子元素最近的流外祖先是A元素。 

<div class="A" style="position: absolute;">
  <div class="B"></div>
  <div class="C" style="position:absolute">
    <div class="D"></div>
  </div>
  <div class="E">
  <div class="F"></div>
</div>

  以上的示例中,A元素的流如下:

    1.A和C是流外的元素,所以C被排除;

    2.D元素由于最近的流外祖先是C,所以也被排除;
    3.所以最终A元素流内的元素是:A、B、E、F

五、选择定位方案:“position”特性

  position和float属性决定使用哪种定位算法来计算一个框的位置。

  position:

static/relative/absolute/fixed/inherit
初始值 static
适用于 所有元素
可否继承
百分比值 N/A
计算值 同设定值

  position属性的值分辨有如下的含义:

  • static
      position属性的默认值。这样的框是一个常规框,会根据常规流来布局。left、top、bottom、top属性对它不适用。
  • relative
      这样的框的位置是根据常规流来计算的(被称为常规流中的位置)。然后这个框会相对于它在常规流中的位置来进行偏移。当一个框B被相对定位了,它后面元素的位置的计算不会考虑它的偏移,就好像它依然在未偏移前常规流中的位置一样。
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>position元素后面元素的位置</title>
    <style>
    *{margin:0; padding:0;}
    .wrap{ width: 200px; height: 200px; border:1px red solid;}
    .a1,.a2,.a3{width: 200px; height: 50px; color: #fff;}
    .a1{ background-color: #000;}
    .a2{position: relative; top:100px; background-color: blue;}
    .a3{ background-color: green;}
    </style>
    </head>
    <body>
    <div class="wrap">
    <div class="a1">a1</div>
    <div class="a2">a2</div>
    <div class="a3">a3</div>
    </div>
    </body>
    </html>

    运行代码

    上面一个例子运行结果如下:

    relative元素a2设置了top属性,从原来的位置移到图片中的位置,但是未影响后面a3元素的位置。
    table-row-group, table-header-group, table-footer-group, table-row, table-column-group, table-column, table-cell, and table-caption 这些元素运用position:relative无效。

  • absolute
    absolute框的位置(可能也还有它的尺寸,比如你同时设置top、bottom,后面的章节会举例说明)是由left、right、top、bottom决定的。这些属性指定了框相对于它的包含块的偏移量。绝对定位元素脱离了常规流,也就是它对后面兄弟元素的布局没有影响。而且尽管absolute元素有margin属性,它不会和其他的margins产生折叠(Collapsing)。
  • fixed

   框位置的计算根据‘absolute’模型,但是框需要一些额外的参考来得到固定。和absolute模型一样,fixed框的margin不会和其他的margin产生折叠。用于手持终端、投影设备、屏幕、TTY、电视媒体类型时,框相对于可视窗口固定,滚动时不移动。应用于打印媒介类型时,框被渲染于每一页, 并相对于页框固定,就好象是通过可视窗口查看该页一样(例如,打印预览)。对于其他的媒介类型,表现没有被定义。

   对根元素的 ‘position‘,用户端(UA)可以视为 "static"。

六、框偏移:top、right、bottom、left

  如果一个元素的 ‘position‘ 特性值不是 "static",该元素被称为定位元素。定位的元素生成定位框,其定位基于四个属性:‘top‘,‘right‘,‘bottom‘,‘left‘。

  

length/百分比/inherit/auto
初始值 value
适用于 定位元素
可否继承
百分比值
百分比值基于包含块的高度(top, bottom)或者宽度(left, right)


计算值


对于 "position:relative" 参见相对定位;对于 "position:static" 取值 "auto"; 其他情况,如果值为长度,取相应的绝对长度,如果标值为百分比,取指定的值,否则,取 "auto"。

  

  对于绝对定位的框,这四个特性的值表示,元素的外边界(margin边界)相对于包含块的边界(padding edge)的位移。而对于相对定位的框,偏移量相对于它自己的相应的边界。比如,top是相对于它的顶边界,right相对于右边界。

时间: 2024-07-30 09:19:16

定位方案(Positioning schemes)的相关文章

Android附近基站+Wifi+IP+GPS多渠道定位方案

前言: 在移动客户端的开发中,地理位置定位是一个非常重要的环节,有些时候用户可能会限制web app或者Android app的一些权限,或者由于信号不佳的原因无法获得准确的GPS位置,甚至为了省电,用户可能对开启GPS开关可能会有抵触情绪.但是不能因为GPS的种种限制就放弃了对用户位置的追踪.要通过一切能发送出信号的物体尽可能准确的获取到用户的位置,有时可以牺牲一些精度,对于大数据和用户地区分布分析来说,有一个大体的位置已经够分析人员使用,而且绕开GPS的重重壁垒,为数据的完整性提供可靠方案

定位项目中,如何选取定位方案,如何平衡耗电与实时位置的精度?

始定位,Application 持有一个全局的公共位置对象,然后隔一定时间自动刷新位置,每次刷新成功都把新的位置信息赋值到全局的位置对象,然后每个需要使用位置请求的地方都使用全局的位置信息进行请求.该方案好处:请求的时候无需再反复定位,每次请求都使用全局的位置对象,节省时间.该方案弊端:耗电,每隔一定时间自动刷新位置,对电量的消耗比较大.方案2:按需定位,每次请求前都进行定位.这样做的好处是比较省电,而且节省资源,但是请求时间会变得相对较长.

从CSS盒子模型说起

前言 总括: 对于盒子模型,BFC,IFC和外边距合并等概念和问题的总结 原文地址:从CSS盒子模型说起 知乎专栏:前端进击者 博主博客地址:Damonare的个人博客 为学之道,莫先于穷理:穷理之要,必先于读书. 正文 ? CSS盒子模型是CSS基础中的基础,个人之前对于这块的理解有偏差?,由于涉及知识点比较多所以写一篇总结备忘.之前打算的是两周一次更新博文的,但是时间用在了刷题上,做了很多leetcode上算法数据结构的题记录在github,但其实也有在更新啦~只不过是对之前的一些博文进行纠

CSS定位:几种类型的position定位的元素

当人们刚接触布局的时候都比较倾向于使用定位的方式.因为定位的概念看起来好像比较容易掌握.表面上你确切地指定了一个块元素所处的位置那么它就会坐落于那里.可是定位比你刚看到的时候要稍微复杂一点.对于定位来说,有一些东西会绊倒新手,所以在它成为你的惯用技巧前你需要掌握它们. 一旦你更深入地了解了它是怎么运作的,你就能够做出一些更棒的事情来. CSS盒模型和定位的类型 为了搞清楚定位首先你得了解CSS盒模型.在上一句中的链接是我写在InstantShift 中的一篇关于盒模型的文章.我在那篇文章做了详细

定位体系(定位机制)

原文 简书原文:https://www.jianshu.com/p/65bfdbe42fb1 大纲 1.定位体系的意义 2.定位体系的分类 3.常规流:( Normal flow ) 4.浮动(Floats) 5.绝对定位(Absolute positioning) 6.选择定位方案 1.定位体系的意义 CSS2.1中,一个框(box,就是元素形成的方块等)可以根据三种定位体系布局.CSS2.1中的定位体系帮助作者使他们的文档更容易理解,并不需要使用标记的手段(如,不可见的图片)达到布局的效果.

iOS iOS9.0 的CoreLocation定位

一.简介 iOS9.0如果当前处于前台授权状态,默认是不可以后台获取用户位置. 如果在前台授权下,让其能获取到后台定位,该怎么办 可以设置以下属性为YES,就可以继续获取后台位置,但是会出现蓝条 使用注意:必须设置对应的后台模式,勾选后台模式:location updates @property(assign,nonatomic) BOOL allowsBackgroundLocationUpdates 注意:iOS9.0 可以单次请求用户位置 - (void)requestLocation /

关于CSS框模型及定位的概念

一.CSS框模型(box model)包含了边框(boder).外边距(margin).内边距(padding).宽(width).高(height).元素(element).背景应用于由内容.边框.内边距组成的区域.单边内边距的属性有四个,分别设有上.右.下.左内边距:padding —top   padding—right  padding—bottom  padding—left. 内边距数值可以是阿拉伯数字(单位厘米),也可以是百分比数值.边框的样式在boder—style中设置,可以定

CSS中的几种定位简介

相对于元素在正常情况下出现在页面文档流的位置,CSS提供了几种方法来定位. 静态定位(static)表示按照正常定位方案,元素盒按照在文档流中出现的顺序依次格式化: 相对定位(relative)将移动元素盒,但是它在文档流中的原始空间会保留下来: 绝对定位(absolute)是指元素盒彻底从文档流中脱离出来,并相对于其容器块进行定位.因为这些元素从文档流中脱离出来,所以它们不再影响周边元素的布局,并且它们占据的空间不被保存: 固定定位(fixed)与绝对定位类似,元素从文档流中脱离,但是它们不是

布局(定位与浮动)

一.定位类型(position值static(默认值).relative(相对定位).absolute(绝对定位).fixed(固定定位)) 1.静态定位:表示正常定位方案 2.相对定位:将移动元素盒子,但是它在文档流中的原始空间会保留下来 3.绝对定位:是指元素盒子彻底从文档流中脱离,相对于容器块进行定位 4.固定定位:与绝对定位一致,不过相对于浏览器窗口进行定位 二.浮动属性(flase 四个值) 1.left right none 注1:清除浮动属性(clear属性),clear:x 四个