CSS-定位概述

1.  可视化格式模型

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

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

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

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

  行内框在一行中水平排列。可以使用水平内边距,边框和外边距调整他们的水平间距。但是,垂直内边距,边框和外边距不影响行内框的高度。同样,在行内框上设置显式的高度或宽度也没有影响。由一行形成的水平框称为行框,行框的高度总是足以容纳它包含的所有行内框。但是,设置行高可以增加这个框的高度。因此,修改行内框尺寸的唯一方法是修改行高或者水平边框,内边距或外边距。

  2.相对定位

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

#test{

positon:relative;

left:20px;

top:20px;

}


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

   3.绝对定位

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


绝对定位的元素的位置是相对于距离它最近的那个已定位的祖先元素确定的。如果元素没有已定位的祖先元素,那么它的位置是相对于初始包含块的。根据用户代理的不同,初始包含块可能是画布或HTML元素。

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

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

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

相对于最近的已定位祖先元素来定位绝对定位的元素,能够实现一些特殊的效果。例如:假设希望让一个文本段落对准一个大框的右下角,只需对包含框进行相对定位,然后相对于这个框对段落进行绝对定位:

#branding {

width: 70em;

height:  10em;

position: relative;

}

#branding .tel{

position: absolute;

right: 1em;

bottom: 1em;

text-align:right;

}

<div id="branding">

  <p class="tel">Tel: 08450838 6163</p>

</div>

相对于相对定位的祖先元素对框进行绝对定位,这在大多数现代浏览器中实现得很好。但是,在windows上的IE.5.5和IE6中有一个bug。如果要相对于相对定位的框的右边或底部设置绝对定位的框的位置,那么需要确保相对定位的框已经设置了尺寸。如果没有,那么IE会错误地相对于画布定位这个框。

固定定位

固定定位是绝对定位的一种。差异在于固定元素的包含快是视口(viewport)。这使我们能够创建总是出现在窗口中相同位置的浮动元素。例如博客评论表单采用固定定位,这使它在页面滚动时一直出现在屏幕上的固定位置。这有助于改进易用性,用户不必为了发表评论而一直滚动到页面底部。

但IE6和更低版本不支持固定定位。IE7部分支持这个属性,但是实现中有许多bug。


  4.浮动

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

当把框A向右浮动时,它脱离文档流并且向右移动,直到它的右边缘碰到包含框的右边缘。


当把框A向左浮动时,他脱离文档流并且向左移动,直到它的左边缘碰到了包含框的左边缘。因为他不再处于文档流中,所以他不占据空间,实际上覆盖了框B。如果把所有3个框都向左浮动,那么框A向左浮动直到碰到包含框,另外两个框向左浮动直到碰到前一个浮动框。如果包含框太窄,无法容纳水平排列的3个浮动元素,那么其他浮动块向下移动,直到有足够空间的地方。

如果浮动元素的高度不同,那么当他们向下移动时可能会被其他浮动元素“卡住”。


行框和清理

浮动会让元素脱离文档流,不再影响不浮动的元素。实际上,并不完全如此。如果浮动的元素后面有一个文档流中的元素,那么这个元素的框会表现得像浮动根本不存在一样。但是,框的文本内容会受到浮动元素的影响,会移动以留出空间。用技术术语来说,浮动元素旁边的边框被缩短,从而给浮动元素留出空间,因此行框围绕浮动框。实际上,创建浮动框是文本可以围绕图像。


要想阻止行框围绕在浮动框的外边,需要对包含这些行框的元素应用clear属性。clear属性的值可以是left,right,both或none,它表示框的哪些边不应该挨着浮动框。我以为总是认为clear属性会自动地抵消前面的浮动。但是,实际情况有意思得多。在清理元素时,浏览器在元素顶上添加足够的外边距,使元素的顶边缘垂直下降到浮动框下面。

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


下面来看一个浮动和清理。假设有一个图片,你希望让它浮动到一个文本块的左边。你想将这个图片和文本包含在另一个具有背景颜色和边框的元素中。你可能会编写下面这样的代码:

.news  {

    background-color: gray;

    border: solid 1px black;

}

.news img {

    float: left;

}

.news p{

   float: right;

}

<div class="news">

 <img src="/img/news-pic.jpg" alt="my pic" />

<p>Some text</p>

</div>

但是,因为浮动元素脱离了文档流,所以包围图片和文本的div不占据空间。如何让包围元素在视觉上包围浮动元素呢? 需要在这个元素的某个地方应用clear。可惜这个示例中没有现有的元素可以清理,所以需要在最后一个段落下面添加一个空元素并且清理它。

.news{

background-color: gray;

border:solid 1px black;

}

.news img {

float: left;

}

.news p {

float:right;

}

.clear{

clear:both;

}

<div class="news">

   <img src="/img/news-pic.jpg" alt="my pic">

  <p>Some text</p>

  <br class="clear" />

 </div>

虽实现了我们希望的效果,但是添加了不必要的代码。常常有现成的元素可以应用clear  ,但是有时候为了布局不得不忍受巨大痛苦添加无意义的标记。

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

.news {

  background-color: gray;

  border: solid 1px black;

  float: left;

      }

.news img {

float: left;

 }

.news p{
float : right;

}

<div class="news">

   <img src="/img/news-pic.jpg"  alt="my pic" />

    <p>Some tesxt</p>

</div>

上面的方法也会产生我们想要的结果。但是,下一个元素会受到这个浮动元素的影响。为了解决这个问题,有些人选择浮动布局中的几乎所有东西,然后使用合适的元素对这些浮动元素进行清理。


还有一些人使用CSS生成的内容或JavaScript对浮动元素进行清理。这两种方法的基本概念是相同的,并不直接向标记中添加进行清理的元素,而是将它动态地添加到页面中。对于这两种方法,需要指定进行清理的元素应该出现在哪里,而且常常要添加一个类名:

<div class="news clear">

<img src="/img/news-pic.jpg" alt="my pic" />

<p>Some text </p>

</div>

在使用CSS方法时,结合使用: after伪类和内容声明在指定的现有内容的末尾添加新的内容。如添加一个点,因为是个非常小的不引人注意的字符。因为不希望新内容占据垂直空间或者在页面上显示,所以需要将height设置为0,将visibility设置为hidden。因为被清理的元素在它们的顶外边距上添加了空间,所以生成的内容需要将它的display属性设置为block。这样设置之后,就可以对生成的内容进行清理:

.clear:after {

 content: " .";

 height: 0;

  visibility: hidden;

  display: block;

 clear:both;

 }

这个方法在大多数现代浏览器中是有效的,但是在IE6和更低版本中不起作用。最常用的方法是用到HACK ,从而使IE5和IE6应用布局

.clear {

display: inline-block;

}

/*Hack Targets IE Win only*/

* html .clear {height: 1%;}

.clear  {display: block;}

/*End Hack*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cesium-popup-es6是一个基于ES6语法编写的Cesium.js的弹窗组件,用于在Cesium地图上显示自定义的弹窗内容。 这个组件主要包含了以下几个部分: 1. Popup类:这是弹窗的主要类,负责创建和管理弹窗的各种属性和方法。通过使用Popup类,可以很方便地在地图上创建弹窗,并设置弹窗的位置、大小、内容等。 2. 事件监听:cesium-popup-es6还提供了一些事件监听的方法,可以在弹窗的打开、关闭以及其他交互操作时进行相应的处理。例如,可以监听鼠标点击事件来关闭弹窗,或者监听地图的移动事件来更新弹窗的位置。 3. 样式定制:该组件允许用户通过设置自定义的CSS样式来定制弹窗的外观和风格。这使得用户可以根据自己的需要来修改弹窗的颜色、字体、边框等样式属性,从而实现个性化的弹窗显示效果。 4. 兼容性:cesium-popup-es6能够很好地与Cesium.js的其他功能和插件进行集成,同时对不同的浏览器和设备也具备良好的兼容性。这意味着无论是在PC端还是移动端,无论是在Chrome还是在Safari等浏览器上,cesium-popup-es6都能够正常运行。 总的来说,cesium-popup-es6文档提供了关于如何使用和定制这个弹窗组件的详细说明,方便开发者在Cesium.js地图项目中加入自定义的弹窗功能。无论是展示地理信息、交互操作还是其他相关需求,cesium-popup-es6都能够帮助开发者实现一个易于使用和美观的弹窗效果。 ### 回答2: cesium-popup-es6 是一个基于 Cesium.js 的弹出窗口组件,该组件使用 ES6 编写。它为用户提供了在 Cesium 场景中高度可定制的弹出窗口功能。 组件的文档详细介绍了 cesium-popup-es6 的使用方法和各个配置项的说明。首先,你需要通过 npm 或者其他构建工具下载并引入该组件。然后,在你的代码中创建一个 Popup 实例并传入相应的参数,包括弹出窗口的内容、位置、大小、样式等。 文档中还介绍了组件的主要功能,包括弹出窗口显示和隐藏的方法,以及与 Cesium 场景的交互。你可以通过调用 show 方法来显示弹出窗口,通过调用 hide 方法来隐藏弹出窗口。组件还提供了许多配置项,例如你可以自定义弹出窗口的样式、位置以及与其它元素的交互等。 文档中也提供了丰富的示例代码,以帮助用户更好地理解和使用 cesium-popup-es6 组件。这些示例代码覆盖了各种场景,包括在固定位置显示弹出窗口、在鼠标点击位置显示弹出窗口等。 总的来说,cesium-popup-es6 文档提供了详细的使用说明和示例代码,帮助用户了解和使用该弹出窗口组件。用户可以根据自己的需求进行定制,实现丰富多样的弹出窗口效果。 ### 回答3: cesium-popup-es6 是一个基于ES6语法的Cesium.js库的文档。 该文档主要用于指导开发者在使用cesium-popup-es6库时的操作步骤和相关功能的使用方法。 文档的目录结构清晰明了,按照功能模块进行分类,方便开发者快速找到需要的信息。 在文档的开头部分,首先介绍了cesium-popup-es6的基本概述,包括其功能特点和适用场景,帮助开发者了解该库的作用和优势。 接下来,文档详细介绍了cesium-popup-es6的安装和配置步骤。通过简明的指导,开发者可以快速将该库引入到自己的项目中,并进行相应的配置。 然后,文档详细说明了cesium-popup-es6库的各种功能和使用方法。比如,如何创建和定位弹出窗口、如何设置窗口内容和样式、如何捕获窗口的事件等等。每一项功能都给出了具体的代码示例和详细的说明,方便开发者理解和应用。 文档还提供了一些常见问题的解答和一些建议的最佳实践,帮助开发者在使用cesium-popup-es6库时避免一些常见的问题和错误。 最后,文档附带了一些附录,包括cesium-popup-es6的API参考和一些相关的资源链接,方便开发者查阅进一步的信息和深入理解该库。 总之,cesium-popup-es6 文档是一份详尽而全面的文档,对于开发者学习和使用cesium-popup-es6库非常有帮助,可以提高开发效率并简化开发过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值