我希望在容器中有各种标签,并且当标签文本太大时(即它将超出容器的宽度时)显示省略号。我面临的问题是,在Safari中,即使标签有空间显示完整内容,也会显示省略号。
这是代码,显示了我想要实现的目标:
.tag {
height: 30px;
background: #F67;
line-height: 30px;
display: block;
float: left;
max-width: calc(100% - 20px);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding: 0 5px;
margin: 5px 5px 0;
border-radius: 16px;
}
.content {
float: left;
max-width: calc(100% - 20px);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.icon {
float: right;
background: blue;
width: 20px;
text-align: center;
color: white;
text-decoration: none;
}
.container {
border: 2px solid blue;
width: 300px;
height: 400px;
padding: 10px;
}

<div class="container">
<div class="tag">
<span class="content">Some tag</span>
<a href="#" class="icon">X</a>
</div>
<div class="tag">
<span class="content">Some tag</span>
<a href="#" class="icon">X</a>
</div>
<span class="tag">
blahbsalkfnewijfnewifbwiefnbijfneifjnweifniwjenfewi
</span>
<div class="tag">
<span class="content">Some tags</span>
<a href="#" class="icon">X</a>
</div>
</div>
&#13;
如果您在Safari中运行上面的代码段(我正在使用的是v8.0.8),您可以看到最后一个标记显示省略号,即使它仍有空间可以拉伸并显示全文。如果你在这里看不到我在说什么,那就是问题的截图: text-overflow problem on safari image
小提及&#39; X&#39;这是一个图标,有人可以点击并删除标签,但该功能不是这个问题的主题。
答案 0 :(得分:3)
我正在使用这个技巧:在文本后面添加一个非中断空格。您可以将其直接添加到html中,例如<div class="ellipsis">Test </div>
,也可以使用:after
伪元素。这是我正在使用的.ellipsis
类:
.ellipsis {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.ellipsis:after {
content: "\0000a0";
display: inline-block;
width: 0;
}
使用:after
还有另外一个优势,它通过设置width: 0;
来隐藏,所以你不会注意到这个元素与它旁边的东西(另一个元素或边框)之间的差距更大
答案 1 :(得分:0)
当您从.content
元素中删除以下行时,我可以正常工作。
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
示例:base64Encode
编辑:虽然在进一步观察时我发现你并不总是使用相同的HTML结构?这导致双文本溢出声明。是不是总有可能使用相同的结构?
答案 2 :(得分:0)
您需要为文本添加一个“宽度”,直到文本溢出:
宽度:100%; / 或您需要的尺寸 /
它在Safari 13中对我有效。