问题描述
我发现了很多示例,这些示例与我要寻找的示例非常接近,但是我需要对表的设计进行更多控制。另外,我不希望文本自动换行,也不希望显示省略号,并且希望将鼠标悬停在内容上时可以看到内容。
这是一个VueJS项目,我曾经(或者取决于我能否使其工作)使用Element UI
详细内容。我希望我的桌子看起来像这样:
Header A Header B Header C
------------------------------------------------------------------------------- 100%
Apples Bananas la la la la la la... A Box of crackers and some super ri...
Oranges Mr. Bean Is Cool More chocolate milk
该示例为text-overflow: ellipsis
或者像这样:
Header A Header B Header C
------------------------------------------------------------------------------- 100%
Apples Bananas A Box of crackers and some super rich chocolate milk
Oranges Mr. Bean More chocolate milk
或者像这样:
Header A Header B Header C
------------------------------------------------------------------------------- 100%
Apples Bananas are not my favorite A Box of crackers and some super r...
Oranges Mr. Bean More chocolate milk
或者像这样:
Header A Header B Header C
------------------------------------------------------------------------------- 100%
Apples Bananas Oranges
Running Out Of ideas to put in here
重点是要使字段保持对齐,并且不会以响应方式分散。我已经尝试过各种布局,例如table-layout: fixed
与和width: auto
,但老实说,我已经尝试了很多变化,因此不确定共享哪个。
更麻烦的是,该表是根据json
动态生成的,我不知道我将拥有哪些列或它们的内容。因此,这是我已采取的一些伪步骤:
// figure out how many actual columns are visible
let visibleColumns = _.filter(this.$refs.table.columns,c => {
return c.label != null && c.label.length;
}).length;
// I'm doing this so I can just guess a good max width on a column
// Switch trimmed for brevity
let maxWidth;
switch (visibleColumns) {
case 1:
maxWidth = 1000;
break;
case 2:
maxWidth = 700;
break;
default:
maxWidth = 200;
break;
}
// Loop over my dynamic columns and find the longest value from the data
_.each(cols,c => {
const comparer = Math.max(...this.data.map(d => String(d[c.field]).length));
});
// I then print the alpha equivalent to the length of the longest field into a hidden
// div and get the width and compare it with the max width based on columns
// i.e. if maxWidth is less than the length of the column then use that,else the div width
元素UI具有minWidth和width属性,没有最大宽度。而且它们具有良好的自动工具提示功能。但是,事实证明,尝试控制表的难度比其价值要难得多,因此,我将构建自己的表组件。我发现其他人已经通过Element UI的表走了这条路,并遇到了一些麻烦。
总结起来,我需要智能地平衡各列并处理文本溢出,并在项目被部分隐藏时显示工具提示。
https://jsfiddle.net/xtrvygfq/
解决方法
CSS可以解决您的问题。
.cell-overflow {
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
display: -webkit-box;
-webkit-line-clamp: 1;
}
您的HTML
<td v-for="h in colDefs">
<div class="cell-overflow">{{d[h.field]}}</div>
</td>