CSS:当显示设置为无时没有 DIV 宽度

Posted

技术标签:

【中文标题】CSS:当显示设置为无时没有 DIV 宽度【英文标题】:CSS: no DIV width when display set to none 【发布时间】:2012-04-13 16:03:45 【问题描述】:

我正在制作一个下拉小部件。向下展开的菜单设置为与父级相同的宽度(使用 jQuery)。

小部件按预期工作,但是,您将它放在一个 DIV 容器中,并将初始显示设置为无。当显示此容器时,根据 jQuery 的所有下拉宽度都为零... 如果容器默认显示,一切正常。

希望我的小提琴能更好地说明我的意思:http://jsfiddle.net/ruFzR/ 在结果窗格上;顶部下拉菜单位于容器外部,底部位于容器内部。除了一些明显的样式问题外,宽度没有扩大。

【问题讨论】:

这可以用css简单地完成 是的。我不会以这种方式进行下拉。顶多用js做动画,或者显示/隐藏方法。 【参考方案1】:

您可以改用visibility: hidden; 来避免display: none; 引起的宽度问题。使用visibility: visible; 使其可见。

元素保持在您的内容流中(相同大小等),而它只是不可见。

【讨论】:

【参考方案2】:

如果您需要隐藏某些内容的宽度,并且无论出于何种原因无法取消隐藏,您可以克隆它,更改 CSS 使其显示在页面外,使其不可见,然后测量它。如果它被隐藏并在之后删除,用户将不会更聪明。

例子:

$itemClone = $('.hidden-item').clone().css(
        'visibility': 'hidden',
        'position': 'absolute',
        'z-index': '-99999',
        'left': '99999999px',
        'top': '0px'
    ).appendTo('body');
var width = $itemClone.width();
$itemClone.remove();

【讨论】:

【参考方案3】:

.width() 是由浏览器处理的,这就是为什么你会得到“0”尝试使用属性

 $('#elt').attr('width');

【讨论】:

这会读回width 属性,但正如您在他的标记中看到的那样,他没有设置一个。【参考方案4】:

从示例中我不确定问题是什么..

但你应该设置(在那个例子中

.splitButton2 > divwidth:100%;

这相当于您编写的 jQuery 代码,没有缺点(如果元素是 display:none,则宽度为 0,javascript 依赖项)并且在浏览器上更容易..

【讨论】:

【参考方案5】:

如果你要使用display:none:,你必须先显示菜单,计算宽度,然后隐藏它。或者,您可以使用绝对定位隐藏,因为元素已被绘制,它应该正确报告宽度。示例:position: absolute; top: -999em;

【讨论】:

以上是关于CSS:当显示设置为无时没有 DIV 宽度的主要内容,如果未能解决你的问题,请参考以下文章

CSS样式DIV设置了宽度为100%。但是浏览器中没100%显示宽度。

css设置div只显示某一边的边框

css已设置width100% 为啥宽度没有占满浏览器?

想用jQuery mobile js 做网页的自适应大小宽度的改变,就是当网页宽度变小时页面还是显示的原来所有内容

超出div部分的内容不显示怎么办

首页banner宽度全屏显示的问题,div+css