原来我一直理解错了css的position

news/2024/7/4 0:55:13 标签: css, border, div, generator, class, 浏览器
class="baidu_pl"> <class="tags" href="/tags/DIV.html" title=div>div id="article_content" class="article_content clearfix"> <class="tags" href="/tags/DIV.html" title=div>div id="content_views" class="htmledit_views">

对position错误的理解

每次做层浮动效果时,我都将position设置为absolute, 再通过js来计算left,top来给元素来定位。也许是之前做的页面非常简单,整个页面里面没有嵌套设置position的情况,故一直都认为当position:absolute时,是相对于document.body来偏移的, 其实并不是这样的, 我们先看下position的属性。

position的属性

static

relative

absolute

fixed

 

对每个属性的理解

static: 这是默认值,即按照正常的文档流的顺序来放元素。 这个时候你设置left,top是没有效果的。

relative: 位置会以元素本身的位置进行偏移,即你设置了left,top ,他会以此元素原来的位置做为坐标偏移。

absolute: 位置会从父元素开始查找,如果父元素的position不是 static的,那么他就以这个父元素的位置进行偏移,否则就会一直向上查找,直至查找到body,就以body的位置偏移,所以以前理解absolute是以body为位置偏移是错的,那是因为你处理的元素的父元素的position都是默认static的, 但当你的父元素是非static的,算位置时就出现不一样的效果。

fixed: 这个才是以document.body的位置偏移的, 无论你要设置的元素的父元素或往上的元素的position是absolute,relative,fixed, 他都是以document.body的位置偏移的。

这样理解后,就消除了以前的一些疑惑。 但在定位方面,我们可以试一下更复杂的情况。

可以进一步理解

在实际position定位时会遇到很多种情况,比如父元素设置了margin,padding,class="tags" href="/tags/BORDER.html" title=border>border. 那么定位原则是怎样的呢?

1. 当元素的position:relative时,位置偏移时是从此元素自身的margin的最左上侧开始算的。

2. 当元素的position:absolute时 这里也分两种情况:

    (1) 无论它的父元素是怎样的,如果它自身有margin ,那么他的位置偏移也是要算上它自身的margin的。

    (2) 如果它的父元素不是默认的static ,而它父元素有class="tags" href="/tags/BORDER.html" title=border>border 和 padding, margin.

            则它的位置偏移要算上父元素的margin和class="tags" href="/tags/BORDER.html" title=border>border,当时不会算上padding.  

可能上面说的比较有点乱,不太好理解,在这里上个例子,大家也可以改这个例子来看看效果,例子仅仅只是测试位置,命名和文字请不要太在意。

class="language-html"><!DOCTYPE>
<html>
 <head>
  <title> New Document </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <style>

  class="tags" href="/tags/DIV.html" title=div>div {
    class="tags" href="/tags/BORDER.html" title=border>border:1px solid red;
    
  }

  .ap {
  
    position:relative;
    class="tags" href="/tags/BORDER.html" title=border>border:30px solid red;
    margin:200px;
    padding:20px;
    left:20px;
    top:20px;
    width:400px;
    height:400px;
  }

  .a {
    class="tags" href="/tags/BORDER.html" title=border>border:1px solid blue;
    position:absolute;
    margin:100px;
    left:0px;
    top:0px;
  }
  </style>
 </head>

 <body>
 <class="tags" href="/tags/DIV.html" title=div>div>
 fdsfdsds
 <class="tags" href="/tags/DIV.html" title=div>div>
    qq
    <class="tags" href="/tags/DIV.html" title=div>div class="ap">
    fffdfdfd<br>

        <class="tags" href="/tags/DIV.html" title=div>div class="a">kkkk</class="tags" href="/tags/DIV.html" title=div>div>
    </class="tags" href="/tags/DIV.html" title=div>div>
 </class="tags" href="/tags/DIV.html" title=div>div>
 </class="tags" href="/tags/DIV.html" title=div>div>
  <script>
  </script>
 </body>
</html>

总结

现在终于基本上对position的定位有一定的了解了,也希望可以帮助到大家,如果有什么问题请给我留言,大家一起进步。 另外,对于position还会结合到通过js操作dom元素的

offsetWidth,offsetLeft, offsetParent等等属性,下一期我会继续讨论这方面的问题,希望大家一起将这些吃透。

注:

fixed是相对浏览器窗口的定位,而不是body

class="tags" href="/tags/DIV.html" title=div>div设置position:absolute 父class="tags" href="/tags/DIV.html" title=div>div如果是默认定位,子class="tags" href="/tags/DIV.html" title=div>div的参照不是这个父class="tags" href="/tags/DIV.html" title=div>div了,而是body.

如果父class="tags" href="/tags/DIV.html" title=div>div是默认定位,它还会继续查找父class="tags" href="/tags/DIV.html" title=div>div的父有没有非默认定位,直至找到body.

class="tags" href="/tags/DIV.html" title=div>div> class="tags" href="/tags/DIV.html" title=div>div> <class="tags" href="/tags/DIV.html" title=div>div id="treeSkill">class="tags" href="/tags/DIV.html" title=div>div>

http://www.niftyadmin.cn/n/1732267.html

相关文章

图形算法可视化

最近看了一些和图形、算法可视化相关的文章和代码&#xff0c;挺有意思&#xff0c;于是自己也学着做了些东西。 迷宫生成算法 迷宫小时候玩过&#xff0c;但从来没琢磨过迷宫是怎么设计的&#xff0c;以为就是有人慢慢画出来的。看过网上这篇文章后&#xff0c;才知道&#…

nodejs在自然语言处理中的一些小应用

nodejs做自然语言处理是非常可行的&#xff0c;这次我做了一些小小的尝试&#xff0c;一起来体验一下吧。 因为还保持着对自然语言处理的那份热爱&#xff0c;最近没事的时候会把毕业论文翻出来看&#xff08;毕业论文的课题就是关于自然语言处理的&#xff09;&#xff0c;然后…

推荐图书

推荐一些适合前端开发工程师阅读的书籍&#xff0c;希望对大家有所帮助&#xff1a; JavaScript类&#xff1a; javascript权威指南 javascript基础教程 javascript DOM 编程艺术 javascript高级程序设计 HTML5CSS3类&#xff1a; HTML5高级程序设计 HTML5与CSS3权威指南 网…

NG-ZORRO-MOBILE (Ant Design Mobile of Angular) 移动端UI组件库正式发布

NG-ZORRO-MOBILE 是 Ant Design 移动规范的 Angular 实现。 Ant Design 作为服务于企业级产品的设计体系&#xff0c;基于『确定』和『自然』的设计价值观&#xff0c;通过模块化的解决方案&#xff0c;降低冗余的生产成本&#xff0c;用其简单且高效的设计理念&#xff0c;让…

简单高效的js搜索高亮

一、效果抢鲜展示 此插件是我今天下午写的&#xff0c;为了直观地看到是个什么东东&#xff0c;先展示效果&#xff0c;您可以狠狠地点击这里&#xff1a;搜索页面文字jQuery插件Demo 下图为Demo页面的两个测试截图 – 测试页面HTML代码取自豆瓣网帮助页面&#xff1a; 下载 …

文本框文本域提示自动显示隐藏jQuery小插件实例页面

文章引自&#xff1a;http://www.zhangxinxu.com/study/201006/text-remind-auto-hide-show.html 最简单的切换 外带class的切换改变显示的颜色 代码 CSS代码&#xff1a; .textarea{border:1px solid #bbb; width:550px; height:80px;} .border{border:1px solid #34538b;} H…

微信小程序实现WebSocket心跳重连

最近在开发小程序用到了WebSocket&#xff0c;小程序提供了相应的原生API&#xff0c;与H5的API使用方式上有一些区别&#xff0c;所以流行的H5的一些成熟的类库使用起来有些困难&#xff0c;而原生API又存在一些缺陷&#xff0c;所以就自己实现了一套心跳重连机制。 惯例&…

愿只有一个Grid Layout

CSS3新增布局三剑客之Grid Layout 一、前言 相比较Multi-Columns Layout 和Flexible Box Layout&#xff0c;Grid Layuot更像是两者的结合&#xff0c;当然这里并不是说Grid Layout可以取代二者。 另外Grid Layout与当前非常火热的Flexible Box Layout有一个本质上的区别就是维…