是否可以将文本置于选择框中?

ily*_*lyo 177 css

我试试这个:http://jsfiddle.net/ilyaD/KGcC3/

HTML:

<select name="state" class="ddList">
   <option value="">(please select a state)</option>
   <option class="lt" value="--">none</option>
   <option class="lt" value="AL">Alabama</option>
   <option class="lt" value="AK">Alaska</option>
   <option class="lt" value="AZ">Arizona</option>
   <option class="lt" value="AR">Arkansas</option>
   <option class="lt" value="CA">California</option>
   <option class="lt" value="CO">Colorado</option>
</select>
Run Code Online (Sandbox Code Playgroud)

CSS:

select { width: 400px; text-align:center; }
select .lt { text-align:center; }
Run Code Online (Sandbox Code Playgroud)

你可以看到它不起作用.是否有一种仅限CSS的方式来在选择框中居中文本?

Jul*_*nas 334

Chrome有部分解决方案:

select { width: 400px; text-align-last:center; }
Run Code Online (Sandbox Code Playgroud)

它确实使所选选项居中,但不是下拉列表中的选项.

  • Safari不支持 (15认同)
  • 在Firefox中不起作用,但在Firefox中有效的是`text-align:center`. (9认同)
  • 该死的,这是完美的,也适用于最新的Firefox ... +代表 (3认同)
  • 宽度是不必要的。 (2认同)
  • 在Firefox 57上可以正常工作。 (2认同)

Aly*_*rhy 74

这是为了对齐.试试吧:

select{
    text-align-last:right;
    padding-right: 29px;
    direction: rtl;
}
Run Code Online (Sandbox Code Playgroud)

浏览器对text-align-last属性的支持可以在这里找到:https://www.w3schools.com/cssref/css3_pr_text-align-last.asp 看起来只有Safari仍然不支持它.

  • 这应该是最好的答案,一个简单而纯粹的CSS解决方案,对我来说非常合适(虽然我改变了`text-align-last:right;`到`center`,因为我想要中间的标签). (7认同)
  • 对于那些找到这个答案的人来说,要清楚的是,如果您的选项大小相似,这会产生居中效果,但它实际上并不是使事物居中,只是将它们正确对齐并添加填充。就我而言,我的选项范围为 1 - 5 个字符,因此将它们全部右对齐看起来很奇怪,因为左侧和右侧之间的间距不均匀。 (2认同)

小智 58

2020 年,我正在使用:

select {
    text-align: center;
    text-align-last: center;
    -moz-text-align-last: center;
}
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这在 Safari 中不起作用...并且截至 2020 年 5 月,Apple 仍然强制 iOS 上的所有其他浏览器使用 Safari 的渲染引擎... (4认同)

小智 57

您必须将CSS规则放入select类中.

使用CSS text-indent

<select class="day"> /* option 1 option 2 option 3 option 4 option 5 here */ </select>
Run Code Online (Sandbox Code Playgroud)

CSS代码

select { text-indent: 5px; }
Run Code Online (Sandbox Code Playgroud)

  • 这只适用于一个特定选项,text-indent取决于选项文本相对于选择框宽度需要多少水平空间,所以这是一个不完整的答案,我很惊讶它有43个upvotes,正确的答案以上是Smee先生提供的文字缩进. (8认同)
  • 要么我没有得到它,要么根本无法对齐文本 (2认同)

Man*_*Nai 28

对的,这是可能的。您可以使用text-align-last

text-align-last: center;
Run Code Online (Sandbox Code Playgroud)

  • 这似乎使关闭时选择中显示的值居中。下拉菜单中的选项仍然向左对齐(至少在 2019 年 9 月的 Chrome 中) (4认同)

Cur*_*urt 23

我担心这对于普通的CSS是不可能的,并且不可能完全跨浏览器兼容.

但是,使用jQuery插件,您可以设置下拉列表的样式:

http://filamentgroup.com/lab/jquery_ui_selectmenu_an_aria_accessible_plugin_for_styling_a_html_select/

此插件隐藏select元素,并动态创建span元素等以显示自定义下拉列表样式.我非常有信心你能够改变跨度上的样式以使项目居中对齐.


Ami*_*Dev 22

只是用这个:

select {

text-align-last: center;
padding-right: 29px;

}
Run Code Online (Sandbox Code Playgroud)

  • 您不需要包含"padding-right:29px;" 如果你使用"中心".我怀疑你有,因为你从16年10月25日复制了Aly-Elgarhy的回答. (3认同)

Jam*_*ber 20

select {
  text-align: center;
  text-align-last: center;
}
option {
  text-align: left;
}
Run Code Online (Sandbox Code Playgroud)
<select>
   <option value="">(please select a state)</option>
   <option class="lt" value="--">none</option>
   <option class="lt" value="AL">Alabama</option>
   <option class="lt" value="AK">Alaska</option>
   <option class="lt" value="AZ">Arizona</option>
   <option class="lt" value="AR">Arkansas</option>
   <option class="lt" value="CA">California</option>
   <option class="lt" value="CO">Colorado</option>
</select>
Run Code Online (Sandbox Code Playgroud)


Mr.*_*mee 16

这个JS函数应该适合你

function getTextWidth(txt) {
  var $elm = $('<span class="tempforSize">'+txt+'</span>').prependTo("body");
  var elmWidth = $elm.width();
  $elm.remove();
  return elmWidth;
}
function centerSelect($elm) {
    var optionWidth = getTextWidth($elm.children(":selected").html())
    var emptySpace =   $elm.width()- optionWidth;
    $elm.css("text-indent", (emptySpace/2) - 10);// -10 for some browers to remove the right toggle control width
}
// on start 
$('.centerSelect').each(function(){
  centerSelect($(this));
});
// on change
$('.centerSelect').on('change', function(){
  centerSelect($(this));
});
Run Code Online (Sandbox Code Playgroud)

完全Codepen在这里:http://codepen.io/anon/pen/NxyovL


Ben*_*ius 9

我总是得到以下hack来让它只与css一起工作.

padding-left: 45%;
font-size: 50px;
Run Code Online (Sandbox Code Playgroud)

padding将文本居中,可以调整为文本大小:)

从验证的角度来看,这显然不是100%正确,但我确实这样做:)


Den*_*den 7

如果您有一个列表,其文本长度选项相似(例如,选择页面),则可以使用“假”解决方案

padding-left: calc(50% - 1em);
Run Code Online (Sandbox Code Playgroud)

这适用于Chrome,Firefox和Edge。这里的技巧是将文本从左侧推到中心,然后将长度的一半减去px,em或任何选项文本。

在此处输入图片说明

最佳解决方案IMO(在2017年)仍在通过JS替换选择,并使用divs或其他内容构建您自己的伪选择框,并在其上绑定单击事件以提供跨浏览器支持。


Die*_*ezú 6

这为我工作:

text-align: center;
text-align-last: center;
Run Code Online (Sandbox Code Playgroud)


hma*_*avi 6

尝试这个 :

select {
    padding-left: 50% !important;
    width: 100%;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

不完全居中,但是使用上面的示例,您可以在选择框中添加一个左边界。

<style>.UName { text-indent: 5px; }</style><br>

<select  name="UserName" id="UserName" size="1">
    <option class="UName" selected value="select">Select User</option>
    <option class="UName" value="User1">User 1 Name</option>
    <option class="UName" value="User2">User 2 Name </option>
    <option class="UName" value="User3">User 3 Name</option>
</select>
Run Code Online (Sandbox Code Playgroud)