【问题标题】:How do I append margin or padding around an absolutely positioned element after it's loaded?加载后如何在绝对定位的元素周围附加边距或填充?
【发布时间】:2012-02-08 04:34:16
【问题描述】:

所以基本上我有这样的布局:

<div id="header">
   <div id="elementAbsolute">
   <div id="headerElement1">
   <div id="headerElement2">
</div>

<div id="content">
etc etc

我的问题是 div id "elementAbsolute" 可以在页面上随机打开或关闭。我对此无能为力。当它打开时,它需要出现在标题下方但在内容之前。由于它是绝对定位的,它只是出现在内容之上。它显然不会在自身上方或下方创建任何垂直空白。

在这个特定的模板中,必须在标记中的位置调用该元素。它不能移动。有没有办法,可能通过 javascript,说如果“elementAbsolute”已打开并存在于“header” div 内的页面上,然后将它移动到 header 和 content div 之间并创建一些空白?

另外请记住,此模板用于多个站点,因此只有在“header”中存在“elementAbsolute”时才能添加空格。

我一直在考虑使用 jQuery after() 函数在它之前和之后放置一个空 div 以创建该空间,但后来我的问题变成了我只希望这个函数在“elementAbsolute”位于页面,否则无论如何我都会有空格。

感谢您的帮助!

【问题讨论】:

  • 为什么不让它在打开时阻塞而不是绝对?
  • 演示或 jsfiddle 会有所帮助。
  • “打开或关闭”是什么意思?它是显示属性还是根据条件呈现?

标签: jquery html css jquery-selectors css-position


【解决方案1】:

如果 elementAbsolute 的高度是固定的,那么一个简单的解决方法是将空白添加到 headerElement 1 或 2 中

#elementAbsolute + #headerElement1 + #headerElement2
{
  margin-bottom: 50; /* Size of absolute element /*
}

【讨论】:

  • 善用相邻兄弟选择器。
【解决方案2】:

您可以在 CSS 中使用 +(相邻兄弟)选择器来定位兄弟元素。如果可能,最好在浏览器关闭 JavaScript 的情况下使用 CSS,并帮助减少 JavaScript 代码的 CPU 开销。

#special-padding {
    height : 0;
}
#header > #elementAbsolute + #special-padding {
    height : 50px;
}

这需要稍微重写您的 HTML,以便 #elementAbsolute#special-padding 元素彼此相邻:

<div id="header">
   <div id="headerElement1">
   <div id="headerElement2">
   <div id="elementAbsolute">
   <div id="special-padding">
</div>

这是一个演示:http://jsfiddle.net/TsPkc/1/

或者你可以在元素中添加一些margin

#header > #elementAbsolute ~ #headerElement2 {
    margin-bottom : 50px;
}

这将为作为 #header 元素的子元素的最后一个元素 (#headerelement2) 添加一些边距。

【讨论】:

  • ~ 选择器很酷,但它只是 CSS3。所以在 IE 8 或更早版本中没有运气。
  • 好的调用,但是 + 支持回到 IE7,所以如果这两个元素在 DOM 中彼此相邻,那么这将起作用。我会更新我的答案。以下是对相邻兄弟选择器 (~) 的支持:caniuse.com/#feat=css-sel2
  • 不过,此解决方案需要修改原始 HTML。如果您查看我的解决方案,则无需更改原始页面。
【解决方案3】:

if(jQuery("div#elementAbsolute")) { // execute your code }

另外,你要确保你的 div 上有结束标签。

【讨论】:

  • 你不需要先按 div 再按 id 选择。 jQuery("#elementAbsolute") 更快。
猜你喜欢
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 2019-08-13
  • 2015-04-29
相关资源
最近更新 更多