div margin-bottom 占自己高度的一个比例?

Posted

技术标签:

【中文标题】div margin-bottom 占自己高度的一个比例?【英文标题】:Div margin-bottom of a proportion of its own height? 【发布时间】:2011-06-22 00:53:20 【问题描述】:

例如,我有一个高度为100px 的 div(我不知道高度,但假设我知道)。我想将margin-bottom 设置为百分比,所以25% 将是25px 假设之前的高度。但是,百分比似乎是文档,而不是元素:

<div style="height:100px;margin-bottom:100%"></div>

边距应该是100px,但不是,它是页面高度的 100%。

元素只是一行没有背景的文本,所以理论上使用height:150%也可以。

【问题讨论】:

确认:jsfiddle.net/jghsF @JCOC 其实百分比是根据页面宽度而不是高度... 哦好吧,那比我想象的还要糟糕! 这有帮助吗? ***.com/questions/485827/… 我不认为这就是我要找的东西 【参考方案1】:

CSS3 解决方案怎么样:

div         
   -webkit-transform: translateY(-50%);
   -moz-transform: translateY(-50%);

【讨论】:

translateY 作为百分比似乎是指元素本身的高度,而不是其父元素的高度。 这个问题与父母无关。 你真是个天才!这应该是正确的答案 这不会像 margin 那样影响周围的元素。所以它有点像相对位置。我可以使用影响周围元素的变换吗? 很好的答案。无法忍受人们使用 JS 来解决 CSS 应该解决的所有布局问题。【参考方案2】:

正如其他人所说,我不知道你可以使用 CSS 来做到这一点。 jQuery 可以提供帮助:

http://jsfiddle.net/userdude/PZAvm/

<div id="margin">Foo</div>

div#margin 
    background-color:red;
    height:100px;


$(document).ready(function()
    alert($('#margin').height());
    var margin = $('#margin').height()/4;
    $('#margin').css('margin-bottom',margin);
    alert($('#margin').css('margin-bottom'));
);

编辑 - 这可以使用 em 来完成。

EDIT 2 - em 正在关闭字体大小,而不是计算出的盒子模型大小。所以它不会起作用。

EDIT 3 - 毕竟 JCOC611 能够使用 em 方法。

原文:http://jsfiddle.net/userdude/xN9V7/3/

JCOC611的演示:http://jsfiddle.net/BCTg2/

代码:

<div id="foo">
    Foo
</div>
lol

div#foo 
    background-color: #fcc;
    margin-bottom: 1.5em;
    font-size:20px

【讨论】:

问题是高度会发生很大变化,所以我希望有一个 CSS 答案。 (当然我可以用 javascript 更新边距,但这需要太多代码) 谁说文字换行会改变高度? 我认为从依赖于宽度的计算中推导出元素的高度是行不通的(正如 Sime Vidas 在引用文档时指出的那样)。如果您可以发布使用 html 和 css 的示例,这可能有助于根据您的特定需求制定解决方案。顺便说一句,我个人认为 margin-top 和 margin-bottom 依赖于包含宽度是愚蠢的。 :\ 哎呀,没关系。 em 是关闭字体大小,而不是边距,所以当我更新高度时,它仍然给出相同的边距高度。 使用 EM 是您的想法,所以如果您更新您的答案以适合我刚刚发布的小提琴,我会将其标记为已接受。【参考方案3】:

这个问题比我预期的要有趣得多(+1)。

我正在使用以下 html 结构:

<div id="someContent">
    <p>Lorem ipsum.</p>
</div>

最初我尝试使用填充来模拟“边框”(JS Fiddle demo):

#someContent 
    background-color: #000;
    border-radius: 1em;
    padding: 10%;


p 
    background-color: #fff;

这是基于padding 将来自元素本身的高度的假设,结果证明这是一个错误-假设。

在那之后显然失败了,我尝试在包含的元素上使用边距,假设 包含 元素的 margin 是基于 its 父母,所包含元素的边距也应如此,给出以下 CSS:

#someContent 
    background-color: #000;
    border-radius: 1em;


p 
    margin: 10%;
    background-color: #fff;

JS Fiddle demo。这也失败了。

我怀疑如果不为父元素定义 height 是不可能的,这可能需要 JS 解决方案。

【讨论】:

谢谢!然而,JS 是我最后的手段,但您可能想查看我的问题的编辑,它可能会激发其他灵感! 没有JS解决方案,拜托!想想那些禁用 JavaScript 的人(有一些很好的理由禁用它)。 好吧,我的整个应用程序都依赖于 JS...:P【参考方案4】:

http://www.w3.org/TR/CSS21/box.html#margin-properties

百分比:指宽度 包含块

如果您的 DIV 在 BODY 元素中,则包含块是 BODY 元素,因此百分比将基于 BODY 宽度 - 在大多数情况下与视口的宽度相同。

演示:http://jsfiddle.net/jghsF/1/

(尝试调整浏览器窗口的宽度,您会看到 margin-bottom 发生了变化)

【讨论】:

使用包装器(这将是解决方案)对我来说并不是一个真正的选择。那么,有没有其他方法可以做到这一点? @JCOC 我不能确定,可能有 CSS3 解决方案。此外,JavaScript(显然)。

以上是关于div margin-bottom 占自己高度的一个比例?的主要内容,如果未能解决你的问题,请参考以下文章

怎么用CSS+DIV样式同步左右两个DIV的高度?

请教css高手:子容器高度占满父容器高度应该怎么做?

请教css高手:子容器高度占满父容器高度应该怎么做?

HTML中 空div怎么占位置

Div 高度自适应填充父容器

html+css(左边宽度高度,右边自动占满,右边内容过大左边自动缩小,内容三个点显示)