我在嘗試使用text-overflow: ellipsis處理動態寬度的元素時遇到了一些問題。我研究過其他解決方案,但它們似乎都使用某種形式的靜態寬度,而我希望實現一個完全動態的解決方案。Javascript是一個選項,但如果可能的話,我更愿意把它保留在CSS中。我也有任何解決方案是IE8兼容的限制。以下是我目前掌握的情況。
HTML:
<div class="container">
<div class="col-1 cell">
<h1>Title</h1>
</div>
<div class="col-2 cell">
<nav>
<ul>
<li><a href="#">Main #1</a></li>
<li><a href="#">Main #2</a></li>
<li><a href="#">Main #3</a></li>
<li><a href="#">Main #4</a></li>
<li><a href="#">Main #5</a></li>
</ul>
</nav>
</div>
<div class="col-3 cell">
<div class="foo">
<img src="http://placehold.it/50x50" alt="">
</div>
<div class="bar">
Some overly long title that should be ellipsis
</div>
<div class="baz">
v
</div>
</div>
</div>
SCSS:
.container {
border: 1px solid #ccc;
display: table;
padding: 30px 15px;
table-layout: fixed;
width: 100%;
}
.cell {
display: table-cell;
vertical-align: middle;
}
.col-1 {
width: 25%;
h1 {
margin: 0;
padding: 0;
}
}
.col-2 {
width: 50%;
ul {
margin: 0;
padding: 0;
}
li {
float: left;
list-style: none;
margin-right: 10px;
}
}
.col-3 {
width: 25%;
.foo {
float: left;
img {
display: block;
margin: 0;
padding: 0;
}
}
.bar {
float: left;
height: 50px;
line-height: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.baz {
background: #ccc;
float: left;
height: 50px;
line-height: 50px;
padding: 0 5px;
}
}
理想情況下,我希望元素的類為。欄的剩余寬度。第三欄。任何朝著正確方向的推動都將受到極大的贊賞。這里還有一個JSFiddle的鏈接。
只需添加最大寬度:100%的元素,以實現你所追求的。您需要某種寬度設置的原因是,元素將繼續擴展,直到您告訴它不能擴展為止。
這里有一個JSFiddle的例子。
.bar {
float: left;
height: 50px;
line-height: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
/* new css */
max-width: 100%;
}
編輯–Flexbox版本 這是一個flexbox顯示器。您將需要使用這樣的庫來為IE8填充:https://github . com/sfioritto/real-world-flexbox/tree/master/demos/flexie
以下是對不太糟糕的瀏覽器的修正:
CSS更新
.container {
border: 1px solid #ccc;
display: flex;
flex-direction: row;
padding: 30px 15px;
width: 100%;
}
.cell {
flex: 1 1 33%;
vertical-align: middle;
}
.col-1 {
width: 25%;
}
.col-1 h1 {
margin: 0;
padding: 0;
}
.col-2 {
width: 50%;
}
.col-2 ul {
margin: 0;
padding: 0;
}
.col-2 li {
float: left;
list-style: none;
margin-right: 10px;
}
.col-3 {
width: 25%;
display: flex;
flex-direction: row;
}
.col-3 .foo {
flex: 0 1 auto;
}
.col-3 .foo img {
display: block;
margin: 0;
padding: 0;
}
.col-3 .bar {
height: 50px;
line-height: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1 2 auto;
}
.col-3 .baz {
background: #ccc;
height: 50px;
line-height: 50px;
padding: 0 5px;
flex: 1 1 auto;
}
jsdild示例
請嘗試讓家長擁有& quot最小寬度:0;"。據:codepen.io上的Carlor(https://codepen.io/cjulian/pen/wrOyJz)
.wrapper {
display: flex;
width: 100%;
}
.fluid {
flex: 1 1 100%;
min-width: 0;
}
.fluid-content {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.static-content {
width: 200px;
}
/* not required styles */
.wrapper {
border: 1px solid black;
}
.fluid-content {
background-color: pink;
}
.static-content {
background-color: yellow;
}
<h1>text-overflow on a fluid width container</h1>
<div class="wrapper">
<div class="fluid">
<div class="fluid-content">
This div does not have a fixed width. Its content will not wrap.
If the content does not fit it will be truncated with ellipses.
</div>
</div>
<div class="static">
<div class="static-content">
fixed width
</div>
</div>
</div>
如果你有100%的表格寬度,并且想在& ltth & gt或者& lttd & gt那么下面的代碼對你有幫助。
table {
width: 100%;
}
table, tr , td, th {
border: 1px solid;
}
tbody tr td:nth-child(1) {
width: 80%;
max-width: 1px;
text-overflow: ellipsis;
width: 60cm;
overflow: hidden;
white-space: nowrap;
}
tbody tr td:nth-child(2) {
width: 20%;
}
<html>
<table>
<thead>
<tr>
<th>Month</th>
<th>Savings</th>
</tr>
</thead>
<tbody>
<tr>
<td class="broadcast-notification-title-section">January testing demo testing testing can be done by me to be done</td>
<td>$100</td>
</tr>
<tr>
<td class="broadcast-notification-title-section">February testing demo</td>
<td>$80</td>
</tr>
</tbody>
</table>
</html>
上一篇python 畫 等高線
下一篇vue中alias配置