CSS:当显示设置为none时没有DIV宽度
我正在制作一个下拉小部件的过程。 向下扩展的菜单设置为与父级相同的宽度(使用jQuery)。
窗口小部件按预期工作,但是,将它放在DIV容器中,初始显示设置为无。 显示此容器时,根据jQuery的所有下拉宽度都为零…如果默认显示容器,则所有容器都有效。
希望我的小提琴能够更好地说明我的意思: http : //jsfiddle.net/ruFzR/在结果窗格中; 顶部下拉列表位于容器外部,底部位于容器内部。 除了一些明显的样式问题,宽度不会扩大。
您可以避免display: none;
引起的宽度问题display: none;
通过使用visibility: hidden;
代替。 使用visibility: visible;
让它可见
元素保持在您的内容流(相同大小等)内,而它只是不可见。
如果您需要隐藏的某些内容的宽度而无法以任何原因取消隐藏它,您可以克隆它,更改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();
.width()由浏览器处理,这就是为什么你得到“0”尝试使用属性
$('#elt').attr('width');
从示例我不知道问题是什么..
但你应该设置( 在那个例子中 )
.splitButton2 > div{width:100%;}
这相当于你编写的jQuery代码,没有缺点( 如果元素是display:none
,则宽度为0 display:none
,javascript依赖 )并且在浏览器上更容易。
如果你打算使用display:none:
你必须首先显示菜单,计算宽度,然后隐藏它。 或者,您可以使用绝对定位隐藏,这应该自元素绘制以来正确报告宽度。 示例: position: absolute; top: -999em;
position: absolute; top: -999em;