CSS 是否可以在选择框中居中文本?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10813528/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-30 04:02:11  来源:igfitidea点击:

Is it possible to center text in select box?

css

提问by ilyo

I tried this: http://jsfiddle.net/ilyaD/KGcC3/

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

HTML:

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>

CSS:

CSS:

select { width: 400px; text-align: center; }
select .lt { text-align: center; }

As you can see, it doesn't work. Is there a CSS-only way to center text in the select-box?

如您所见,它不起作用。是否有仅使用 CSS 的方式将文本居中放置在选择框中?

采纳答案by Curt

I'm afraid this isn't possible with plain CSS, and won't be possible to make completely cross-browser compatible.

恐怕这在普通 CSS 中是不可能的,也不可能完全跨浏览器兼容。

However, using a jQuery plugin, you could style the dropdown:

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

https://www.filamentgroup.com/lab/jquery-ui-selectmenu-an-aria-accessible-plugin-for-styling-a-html-select.html

https://www.filamentgroup.com/lab/jquery-ui-selectmenu-an-aria-accessible-plugin-for-styling-a-html-select.html

This plugin hides the selectelement, and creates spanelements etc on the fly to display a custom drop down list style. I'm quite confident you'd be able to change the styles on the spans etc to center align the items.

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

回答by Julian Cardenas

There is a partial solution for Chrome:

Chrome有一个部分解决方案:

select { width: 400px; text-align-last:center; }

It does center the selected option, but not the options inside the dropdown.

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

回答by Aly-Elgarhy

That's for align right. Try it:

那是为了对齐。尝试一下:

select{
    text-align-last:right;
    padding-right: 29px;
    direction: rtl;
}

the browser support for the text-align-lastattribute can be found here: https://www.w3schools.com/cssref/css3_pr_text-align-last.aspIt looks like only Safari is still not supporting it.

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

回答by marc carreras

You have to put the CSS rule into the select class.

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

Use CSS text-indent

使用 CSS 文本缩进

Example

例子

<select class="day"> /* option 1 option 2 option 3 option 4 option 5 here */ </select>

CSS code

CSS代码

select { text-indent: 5px; }

回答by Manjeet Kumar Nai

Yes, it is possible. You can use text-align-last

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

text-align-last: center;

回答by Amine_Dev

just using this:

只是使用这个:

select {

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

}

回答by Jamie Hutber

select {
  text-align: center;
  text-align-last: center;
}
option {
  text-align: left;
}
<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>

回答by jzuhri

2020, Im using:

2020 年,我正在使用:

select {
    text-align: center;
    text-align-last: center;
    -moz-text-align-last: center;
}

回答by Mr. Smee

This JS function should work for you

这个 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));
});

Full Codepen here: http://codepen.io/anon/pen/NxyovL

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

回答by Ben Pretorius

I have always gotten away with the following hack to get it to work with css only.

我总是通过以下 hack 让它只与 css 一起工作。

padding-left: 45%;
font-size: 50px;

padding will center the text and can be tweaked for the text size :)

填充将使文本居中,并且可以调整文本大小:)

This is obviously not 100% correct from a validation point of view I guess but it does the job :)

我猜从验证的角度来看,这显然不是 100% 正确,但它可以完成工作:)