问题描述
我正在修改我的一个下拉框的宽度 (是的,我知道有这样做的 cross-browser 问题) 。
是否有一种 non-js 方式来切断溢出的文本并附加省略号? text-overflow:省略号不适用于<select>
元素 (至少在 Chrome 中) 。
最佳解决办法
HTML 在表单控件中指定的内容非常有限。这为操作系统和浏览器制造商提供了他们认为合适的空间 (如 iPhone 的模态 select
,在打开时,与传统的 pop-up 菜单完全不同) 。
看起来大多数操作系统都切断了所选择的选项,而无需省略。如果您能够更改文本的截断方式,则看起来很奇怪,因为这不是选择框在其余操作系统中的工作原理。
如果它有错误,可以使用可自定义的替换,如 Chosen,它看起来与本机 select
不同。
或者,针对主要操作系统或浏览器提出错误。对于我们所知道的,文本在 select
中被切断的方式可能是每个人复制的 years-old 监督的结果,可能是更改的时间。
次佳解决办法
如果您发现这个问题,因为您的选择框上有一个自定义箭头,文本正在翻过箭头,我发现一些解决方案适用于某些浏览器。只需在 select
的右侧添加一些填充。
之前:
后:
CSS:
select {
padding:0 30px 0 10px !important;
-webkit-padding-end: 30px !important;
-webkit-padding-start: 10px !important;
}
iOS 会忽略 padding
属性,而是使用-webkit-
属性。
第三种解决办法
最简单的解决方案可能是限制 HTML 本身的字符数。 Rails 有一个 truncate(string, length)帮手,我确定你使用的任何一个后端都提供了类似的东西。
由于 cross-browser 问题,您已经熟悉了选择框的宽度,这似乎是我最直接和最少的 error-prone 选项。
<select>
<option value="1">One</option>
<option value="100">One hund...</option>
<select>
第四种办法
你可以使用这个:
select {
width:100px;
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
}
select option {
width:100px;
text-overflow:ellipsis;
overflow:hidden;
}
div {
border-style:solid;
width:100px;
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
}
第五种办法
quirksmode 对’text-overflow’ 属性有很好的描述,但您可能需要应用一些其他属性,如’white-space: nowrap’
虽然我不是 100%如何在一个选择对象中表现,但值得先尝试一下:
http://www.quirksmode.org/css/textoverflow.html
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。