【发布时间】:2018-11-13 12:59:01
【问题描述】:
我有以下 HTML:
<div id="cookie-notice" class="banner-message with-icon">
<div class="message-container">
<div class="icon"><img src="/Assets/Media/Images/cookies.svg" alt="Cookies"></div>
<div class="message">We use cookies for essential functionality and to track visits.</div>
</div>
<div class="button-container">
<a class="md-flat-button" data-close-id="cookie-notice">Dismiss</a>
</div>
</div>
因为它是一个横幅,所以它开始隐藏生命,在这种情况下,在横幅消息级别使用 height: 0;。
目前我使用 jquery 返回message 跨度的高度,它有效。如果需要,我还可以获得icon 元素的高度。
但是,message-container 的高度返回 0。
我无法理解的是,为什么所有子元素都不返回 0,而不仅仅是直接子元素。
更重要的是,我该如何解决?
* 更新 *
我找到了导致问题的原因 - 但不幸的是还不知道如何解决它。
sn-p 展示了两个例子,第一个使用 flexbox 将两个盒子并排对齐,另一个没有 flexbox。
如您所见,一个返回容器的高度,另一个不返回。
设计规定 div 位于同一行,并且由于对齐方式大约有 8 种变化,因此 flexbox 仍然是更可取的解决方案。
$(document).ready(function () {
$banner1 = $("#banner1").first();
$container1 = $banner1.find(".message-container").first();
$message1 = $container1.find(".message").first();
var containerHeight1 = $container1.height();
var messageHeight1 = $message1.height();
$("#result1").html("Message height is: " + messageHeight1 + ", Container height is: " + containerHeight1 + " - flexbox");
$banner2 = $("#banner2").first();
$container2 = $banner2.find(".message-container").first();
$message2 = $container2.find(".message").first();
var containerHeight2 = $container2.height();
var messageHeight2 = $message2.height();
$("#result2").html("Message height is: " + messageHeight2 + ", Container height is: " + containerHeight2 + " - no flexbox");
});
.banner-message {
height: 0;
overflow:hidden;
}
#banner1 {
display: flex;
}
.button-container a {
padding: 0 16px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="banner1" class="banner-message">
<div class="message-container">
<div class="message">This is a bit of text that I need to get the height of</div>
</div>
<div class="button-container">
<a>BUTTON</a>
</div>
</div>
<div id="result1"></div>
<!-- Second test - this time with out height of zero -->
<div id="banner2" class="banner-message">
<div class="message-container">
<div class="message">This is a bit of text that I need to get the height of</div>
</div>
<div class="button-container">
<a>BUTTON</a>
</div>
</div>
<div id="result2"></div>
【问题讨论】:
-
我真的不明白为什么应该关闭它 - 如果您认为应该关闭,请发布原因。
-
为接近投票提供的“原因”是没有提供复制所需的所有代码。这里好像够了,或许你可以重新排列成一个sn-p?
-
"我不明白为什么所有子元素都不返回 0,而不仅仅是直接子元素。" - 它们并不完全相同子元素的类型。 1 是
block元素,2 是inline(div和 2xspan)。尝试将它们全部更改为 div 或全部更改为 span,看看你得到了什么。 -
@freedomn-m - 将跨度更改为 div 不会影响任何结果,也不会将 div 更改为跨度。
-
能否多分享一些CSS,可能会影响结果的获取方式
标签: javascript jquery html css flexbox