7

我有一个带有 display:table/table-cell:auto 布局的 ul/li 菜单,拉伸以填充容器并在菜单项之间分配水平空间。我必须将一个额外的 UI 元素与最后一个菜单项对齐。我可以通过将该元素添加为最后一个 li 元素的子元素并使其 100% 宽来实现这一点。

但是,我需要将此 UI 元素(语言选择器)部分定位在主要内容之外,因此我将其定位为相对右侧:-10px。但副作用是,与菜单元素相比,选择器的左边缘向右移动。通常我会将选择器 div 的宽度增加 10px,但因为它是 100%,所以我不能这样做。而父 li 的宽度由其文本内容决定。

有没有办法使用纯 css 来解决这个问题?我不能在选择器上添加填充,因为我需要它的子内容来填充整个 div。

<div class="menu">
    <ul>
        <li><a href="#">first</a>
        </li>
        <li><a href="#">second</a>
            <div id="selector">
                <a href="#">EN</a>
                <a href="#">FR</a>
            </div>
        </li>
    </ul>
</div>

这是一个工作示例:http: //jsfiddle.net/hJXng/13/

4

2 回答 2

11

根据您想要支持的浏览器,一个简单的选项是使用calc

width: calc(100% + 10px);

另请参阅:我可以使用calc()
示例:http: //jsfiddle.net/hJXng/19/

于 2013-03-03T09:02:58.400 回答
0

我不确定 xpy 的答案去了哪里,但他/她的评论终于让我开心了。必须添加两个包装器 div,因为带有“display: table”的 div 没有填充 Chrome 中的填充,而“display: block”可以。因此,在另一个填充的 div 中绝对定位 100% 宽的块 div 确实有效。

#selector-full {
    width: 100%;
    position: absolute;
    display: block;
    right: 0;
}

小提琴:http: //jsfiddle.net/cPDd6/4/

于 2013-03-06T11:35:05.670 回答