如何创建具有垂直居中对齐文本的行项目



我在创建具有以下要求的行项目时遇到问题:

  • 行项目包含:顶部/左侧对齐的图标、标题和可选副标题
  • 文本应垂直居中对齐
  • 容器的宽度是动态的

这是一个难题:

http://jsfiddle.net/6ug3314b/

问题:

如果不对某个东西的宽度进行艰苦的编码,我就无法弄清楚如何让这个CSS工作。请参阅上面的JS Fiddle链接。

在不知道容器宽度的情况下,我不知道如何将".liceontent"div从包装到下一行。

以下是迄今为止的CSS:

.lineItems {
    list-style: none;
    padding: 0;
}
.lineItems > li {
    border: 1px solid #eaeaea;
}
.lineItems .title {
    margin: 0;
}
.lineItems .licontent {
    display: inline-block;
    vertical-align: middle;
    padding-left: 10px;
}
.lineItems .icon {
    display: inline-block;
    vertical-align: middle;
    width: 50px;
    height: 50px;
    border: 1px solid red;
}
.lineItems .icon:after {
    content: 'ICON';
}

如果我理解正确,请直截了当。你只需要添加一个有效的基于%的宽度和@media查询来根据需要减少%,因为图像不是基于百分比的。

JSFIDDLE

.lineItems .licontent {
display: inline-block;
vertical-align: middle;
padding-left: 10px;
width:85%;
word-break: break-word;
}
@media screen and (max-width: 550px) {
    .lineItems .licontent {width:73%}
}

听起来像CSS tabletable-cell可能是一个很好的解决方案。它支持未知宽度和垂直对齐。

并使用table-layout: fixed;+word-wrap: break-word;进行换行。

演示:http://jsfiddle.net/pn5pja7e/

.lineItems {
    list-style: none;
    padding: 0;
}
.lineItems > li {
    display: table;
    width: 100%;
    table-layout: fixed; /*NEW*/
    word-wrap: break-word; /*NEW*/
}
.lineItems .licontent {
    display: table-cell;
    vertical-align: middle;
    padding-left: 10px;
    /* word-break: break-all; */
    border: 1px solid blue;
}
.lineItems .title {
    margin: 0;
}
.lineItems .icon {
    display: table-cell;
    vertical-align: middle;
    width: 50px;
    height: 50px;
    border: 1px solid red;
}
.lineItems .icon:after {
    content: 'ICON';
}

最新更新