【问题标题】:css: how to have a variable column size with text overflow ellipsiscss:如何使用文本溢出省略号来改变列大小
【发布时间】:2013-05-05 12:14:00
【问题描述】:

这开始让我发疯了,感谢任何帮助!

我希望每个未“固定”的<li> 的最大宽度为 150 像素,最小宽度为 10 像素,但是当浏览器缩小时,它们应该缩小以修复(并且宽度相等)。我还希望每个非“固定”<li> 中的文本具有 text-overflow: ellipsis。

我似乎无法让这个工作,到目前为止我有:

http://jsfiddle.net/546t8/

HTML:

<ul>
    <li class="fixed">Fixed Size</li>
    <li>
        <div>
            <span>this text is very very long and it goes on and on and on and on but does not wrap</span>
        </div>
    </li>
    <li>
        <div>
            <span>short</span>
        </div>
    </li>
    <li>
        <div>
            <span>one more tab</span>
        </div>
    </li>
    <li>
        <div>
            <span>another tab</span>
        </div>
    </li>
</ul>

CSS:

ul {
    margin: 0;
    padding: 0;
    list-style: none;
    display: table;
    border-spacing: 6px 0px;
}

li {
    display: table-cell;
    background-color: red;
    width: 150px;

}

li > div {
     overflow: hidden;
    text-overflow: ellipsis;

}

li > div > span {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

li.fixed {
    width: 100px;
    min-width: 100px;
    text-align: center;
}

更新:这显示了我对列的追求,但正如您所见,省略号并未隐藏文本:

http://jsfiddle.net/546t8/9/

更新:这越来越近了,但仍然没有省略号:-(

http://jsfiddle.net/546t8/11/

更新:已解决解决方案发布于下方。

http://jsfiddle.net/AjZDx/2/

【问题讨论】:

  • HTML结构可以改吗?
  • @VimalStan 是的,可以更改 html。
  • 你需要椭圆做什么? html 只会破坏文本以适合您的 li (一旦您删除空格:nowrap;)。您是否更愿意隐藏部分文本而不是将文本分成几行?
  • @bjelli 是的,要求是文本不换行,并在没有足够空间时用省略号向右隐藏。
  • @magritte 你是对的,删除了答案。如果我找到解决方案会发布一个。

标签: html css


【解决方案1】:

终于让它工作了...解决方案是(不需要更改 html):

http://jsfiddle.net/AjZDx/2/

ul {
    margin: 0;
    padding: 0;
    list-style: none;
    display: table;
    border-spacing: 6px 0px;
}

li {
    display: table-cell;
    background-color: red;
    min-width: 20px;
    width: 120px;
}

li.fixed {
    width: 100px;
    min-width: 100px;
    text-align: center;
}

ul > li > div {
    display: table;
    border-spacing: 0px 0px;
    table-layout: fixed;
    width: 100%;
}

ul > li > div > span {
    display: table-cell;
    white-space: nowrap;
    overflow-x: hidden;
    text-overflow: ellipsis;
}

【讨论】:

    【解决方案2】:

    我相信 display: table 和 display: table-cell 是一个死胡同:表格布局将始终使用显示所有内容所需的最大单元格高度(见下文) - 但您需要相反。另一方面,表格布局有利于以您描述的方式使用水平空间。

    一种完全不同的方法是使用一些 javascript 库为您进行布局。有很多这样的。举个例子:

    附言

    使用浮动和更简单的 html,您可以获得所需的高度而不是所需的宽度:

    <ul>
        <li class="fixed">Fixed Size</li>
        <li class="ellipsis">this text is very very long and it goes on and on and
    on and on but does not wrap</li>
        <li>short</li>
        <li>one more tab</li>
        <li>another tab</li>
    </ul>
    

    和css

    li {
        float:left;
        min-width: 10px;
    }
    
    li.ellipsis {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        max-width: 200px;
    }
    
    li.fixed {
        width: 150px;
    }
    

    请参阅此小提琴以获取工作示例: http://jsfiddle.net/bjelline/TxDfc/

    【讨论】:

    • 我需要列的宽度相等(那些不固定的),因此 display:table, display:table-cell。还有另一种方法可以实现吗?干杯。
    • 欢呼 Bjelli,我有 javascript 解决方案可以工作(设置 div 的宽度似乎会启动 text-overflow:ellipsis ),只是认为如果可以使用纯 css 会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 2012-04-13
    • 2013-07-20
    • 1970-01-01
    相关资源
    最近更新 更多