CSS如何相对同辈元素定位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSS如何相对同辈元素定位相关的知识,希望对你有一定的参考价值。

position:relative中可以设置某元素相对于父元素定位,请问怎么设置才能相对于同辈元素定位呢?谢谢
只要能够实现同辈定位即可,无论用什么方法技巧,不一定非得用position属性

材料/工具:电脑、CSS3、html5、HBuilder、浏览器、截图工具

1、双击打开HBuilder编辑工具,新建静态页面position.html,修改title标签内的内容。

2、在<body></body>标签元素内插入一个<div></div>标签,设置其id属性值为pos。

3、利用ID选择器设置div元素宽度和高度都为300px,背景色为#666666,position为absolute。

4、保存代码并预览界面,发现页面展示的正方形边框在左上角。

5、修改top、left、margin和padding,让div元素垂直居中。

6、设置div标签元素border-radius和background渐变属性即可。

参考技术A 单纯用CSS是不可能的,这涉及到CSS的设计初衷。所谓定位它必有一个参照物,如果按你说的相对兄弟元素定位,那么就有个前提,兄弟元素是已知的、确定的,但很多时候,比如文章的段落,可多可少,你根本确定不了,你像根据某个兄弟元素定位,但如果兄弟多了或少了呢,所以这种定位方式不现实,父元素定位就不存在这个问题,因为元素肯定会有父元素,没有父元素也有根元素HTML。

你这个情况可以使用margin和float的结合,或者改变一下思路,我想肯定会有办法的。如果非要根据兄弟元素定位,可以试试JS解决,但会很麻烦,且没有必要。本回答被提问者和网友采纳
参考技术B 文本框不是普通容器,里面的所有标签都会被当作内容来解释。
所以你需要用一个容器包含文本框,父定位放在这个容器上才行,这个容器可以是行内元素,也可以是块元素。
子定位和文本框都放在父定位里面,位置在文本框前面后面都一样,但不能在文本框里面。
因为absolute不占位,所以你的子定位看起来就跟放在文本框里面一样。
参考技术C 绝对定位只能用于继承关系中,不能用于同辈关系中 参考技术D 直接的这种相对目前好像还没有,但是你为什么想这样做呢?
两个相对同一个,第二个值加了第一个值再偏移一点不就是相对第一个的了吗?追问

如果第一个值是可变的呢?

追答

可变的是什么意思?变量吗?后者难道不可变吗?

CSS网页布局教程:层叠加的5条原则-----转载

首先明确几点在文中所需要用到的概念:

  1. 静态定位:position:static(为position属性的默认值)。
  2. 动态定位:position:relative或position:absolute或position:fixed。
  3. 祖元素:任意包含该元素的元素。
  4. 父元素:直接包含该元素的祖元素。
  5. 同辈元素:拥有共同的父元素的元素。

注:这些概念为作者自定义,仅用于本文。

引用:

关于同辈元素是个非常关键的词,这里还需要详细解释一下。

  1. <div>
  2.     <div></div>
  3.     <div id="a"></div>
  4.     <div></div>
  5.     <div></div>
  6.     <div></div>
  7.     <div></div>
  8. </div>
  9. <div id="f">
  10.     <div></div>
  11.     <div id="b"></div>
  12.     <div id="c"></div>
  13.     <div></div>
  14.     <div></div>
  15.     <div></div>
  16. </div>

在这个例子中,div#a与div#b并不是“同辈元素”,只有像div#b和div#c这样拥有同样父体div#f的的元素才能叫“同辈元素”。

引用结束

接下来看看这五条法则

法则一:同辈元素定位方式相同,且无z-index设置时,html靠后者居上。

法则二:同辈元素同为动态定位时,且有z-index设置时,z-index值大者居上。

 

 猛点这里测试

法则三:同辈元素定位方式不同时,动态定位居上。

猛点这里测试

法则四:非同辈元素,任意一者及其祖元素不具备动态布局时,html靠后者居上。

 

猛点这里测试

法则五:【重要】非同辈元素,任意一者或其祖元素拥有动态定位时,同时各自向上寻找动态定位的祖元素,并分别从中拿出具备最高级别的祖元素(或其本身)进行比较。 

  1. <div id="ab" style="position:absolute;">
  2.     <div id="a" style="position:relative; z-index:100;">
  3.         <div id="a_inner1">
  4.             <div id="a_inner2">
  5.                 <div id="a_inner3" style="position:relative; z-index:98;">
  6.                     <div id="a_inner4">
  7.                         <div id="a_inner5">
  8.                         </div>
  9.                     </div>
  10.                 </div>
  11.             </div>
  12.         </div>
  13.     </div>
  14.     <div id="b">
  15.         <div id="b_inner1">
  16.             <div id="b_inner2">
  17.                 <div id="b_inner3" style="position:relative; z-index:99;">
  18.                     <div id="b_inner4">
  19.                     </div>
  20.                 </div>
  21.             </div>
  22.         </div>
  23.     </div>
  24. </div>

 

情况1:子元素的z-index无论多大,父元素大者居上。

情况2:父元素居下,子元素也可以居上。

情况1、情况2结合扩展比较。

其实前四点都是基础,只有第五点比较难于理解,这里详细解释一下:

在这个例子中,我们来比较div#a_inner5和div#b_inner4的层叠关系。
到它们所共同拥有的祖元素div#ab的下一级为止,div#a_inner5的祖元素包括:div#a,div#a_inner1,div#a_inner2,div#a_inner3,div#a_inner4;div#b_inner4的祖元素包括:div#b,div#b_inner1,div#b_inner2,div#b_inner3。
然后分析它们的祖元素中具有动态定位的:div#a_inner5的祖元素中含有动态定位的元素有:div#a,div#a_inner3;div#b_inner4的祖元素中含有动态定位的元素有:div#b_inner3。
然后再拿出最高级进行比较:div#a > #div#b_inner3。

父元素居下,子元素也可以居上的情况,则是利用非同辈元素在祖元素具备动态布局时,其比较已经与position:static无关,而其祖元素却可以通过html的位置来进行比较。

引用结束

当然,有时候还存在特例,比如flash、比如ie6中的select无法遮住,这些都属于异常情况,大家可以自己搜索一下相关文章。

以上是关于CSS如何相对同辈元素定位的主要内容,如果未能解决你的问题,请参考以下文章

css position 定位详解

[Web 前端] 019 css 定位之绝对定位与相对定位

css中的相对定位与绝对定位的区别

17 css定位

CSS相对定位与绝对定位详解

css+fixed可以相对父类定位么