css - 使列表中的最后一项填充容器的其余部分

标签 css responsive-design background-color

我有一个包含未知宽度元素的内联列表,我希望最后一项的背景颜色与其余项不同,并占据右侧所有剩余空间。

我正在使用给定的 HTML,但我无法修改它,所以我正在寻找一种仅使用 CSS 的方法(我认为我也不能使用 JS)。我做了一个simplified fiddle为了显示我需要的内容,最后一项的背景应该一直到浏览器窗口的末尾(向右)。

例如,我的 HTML:

<div>
    <ul>
        <li>item 1</li>
        <li>item 2</li>
        <li>item 3</li>
        <li class="last">item 4</li>
    </ul>
</div>

对于 CSS,我尝试了:

background: linear-gradient(to right, #fff 70%, red 30%);

在 div 上,但由于网站必须响应,百分比并不能真正满足我的需要,它们要么没有覆盖足够多,要么随着屏幕尺寸的变化与前面的元素重叠。

是否有另一种 CSS 方式来做到这一点?

最佳答案

这是一种结合使用 CSS 表格、伪元素和绝对定位的方法。

对于以下 HTML:

<div>
    <ul>
        <li>item 1</li>
        <li>item 2</li>
        <li>item 3</li>
        <li class="last">item 4</li>
    </ul>
</div>

应用以下 CSS:

div {
    border: 1px dotted gray;
    position: relative;
    overflow: hidden;
}
div ul {
    display: table;
    margin: 0 auto;
    padding: 0;
}
div ul li {
    padding: 10px;
    margin: 0;
    display: table-cell;
    list-style-type: none;
    border: 1px dashed blue;
}
div ul li.last {
}
div ul li.last:before {
    content: '\a0'; /* \a0 is hex code for a non-breaking space */
    z-index: -1;
    background-color: red;
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
    margin-left: -10px;
}

要获得列表项的收缩至适合宽度,请将 display: table 应用于 ul 元素,您可以使用 margin 将其居中: 0 auto 因为表是 block 级元素。

display: table-cell 应用于 li 元素,并可选择应用一些填充。

要获得红色背景,请将 :before 伪元素应用于 li.last 并通过设置 top: 0 绝对定位它并使用 height: 100% 来匹配 div 包装 block 的高度(它有 position: relative 来设置引用框架绝对定位。

伪元素上的 100% 宽度会导致溢出情况,但您可以通过在 div 上使用 overflow: hidden 来解决这个问题。

如果对 li 应用水平填充,则需要用负的左边距进行补偿,以使背景颜色与表格单元格 block 的边缘对齐。

最后为了让背景伪元素堆叠在文本后面,设置z-index: -1, 或一些合适的值,具体取决于您页面上的其他组件。

查看演示:http://jsfiddle.net/audetwebdesign/EruT7/

在 Firefox 中,结果如下所示:

enter image description here

关于css - 使列表中的最后一项填充容器的其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24317001/

相关文章:

javascript - Bootstrap : Responsitive design - execute JS when window is resized from 980px to 979px

css - 容器内的响应式文本大小问题

javascript - HTML 可点击鼓组,无法在 CSS/HTML 中设置背景颜色/如何将键盘键分配给 HTML 按钮?

css - 为什么某些 CSS 元素无法出现在 IE Dev Toolbar 的 CSS 选项卡中?

javascript - 如何使用 jQuery toggle 更改 css 的内容

html - CSS/HTML 页脚不粘

php - 如何创建从我的网站的响应版本到桌面版本的切换器?

html - 使用CSS将具有绝对位置的列表放入div的中间

android - 如何更改应用程序图标的背景颜色

HTML CSS - 使 div 包装器半透明且内部文本不透明的最佳实践