Css 120px是我的文本长度-我想将其居中,因此取该大小的一半和选定大小的一半,剩下50%-60px select{ width: 100%; text-indent: calc(50% - 60px); }

Css 120px是我的文本长度-我想将其居中,因此取该大小的一半和选定大小的一半,剩下50%-60px select{ width: 100%; text-indent: calc(50% - 60px); },css,Css,如果我有不同大小的选项怎么办? 但是,解决方案也有可能不是一个漂亮的解决方案。 如果选项之间的差异不超过5个字符,前一种解决方案可能会使您非常接近居中 如果您仍然需要更精确地将其居中,您可以这样做 准备本课程: .realWidth{ width: auto; } 应用onChange listener选择元素 在该侦听器中,使用 const selectRef = document.getElementById("yourId"); selectRef.classL

如果我有不同大小的选项怎么办?

但是,解决方案也有可能不是一个漂亮的解决方案。
如果选项之间的差异不超过5个字符,前一种解决方案可能会使您非常接近居中

如果您仍然需要更精确地将其居中,您可以这样做

准备本课程:

.realWidth{
   width: auto;
}
应用onChange listener选择元素

在该侦听器中,使用

const selectRef = document.getElementById("yourId");
selectRef.classList.add("realWidth");
获取选项的实际宽度

const widthOfSelect = selectRef.getBoundingClientRect().width / 2;
widthOfSelect是您要查找的宽度。将其存储在全局/组件变量中。

删除realWidth,您不再需要它了

selectRef.classList.remove("realWidth");
我正在使用react我不确定这在香草中是否有效,如果不行,您必须找到另一个解决方案

<select style={`textIndent: calc(50% - ${widthOfSelect}) %`}> ... </select>
。。。
然而,另一个不好的解决方案可能是使用js创建CSS类并将其放在首位

优点:

.realWidth{
   width: auto;
}
  • 可能有效,我还没有尝试过动态解决方案,但它应该有效
  • 缺点:

    .realWidth{
       width: auto;
    }
    
  • 如果程序不够快,用户将看到宽度:自动发生,因此想知道发生了什么。如果是这种情况,只需创建重复选择,将其隐藏在具有更高z索引的内容后面,并将on select侦听器从原始应用到隐藏的重复
  • 如果由于常规限制而无法内联样式,则可能很难使用,但可以制作一个脚本来优化头部的appendChild



  • 在我的Firefox中,它可以正常工作:)在chrome上不起作用。@Blazemonger我可以想象,在许多情况下,为了简化人类的字典扫描,对称的设计比左对齐的选项更重要。例如,如果我想在移动设备上有一个100%水平填充屏幕的性别选择选项,那么文本“男”和“女”会一直向左推,这看起来很奇怪;要么我没有得到它,要么它根本不适合对齐文本缩进。。。有趣的是,我不知道那房子。谢谢!这只适用于一个特定选项,文本缩进取决于选项文本相对于选择框宽度的水平空间大小,因此这是一个不完整的答案,我很惊讶它得到了43张赞成票,使用文本缩进的正确答案是由上面的Smee先生提供的。一个有趣的想法,但它不适用于百分比,所以你怎么能把每一项都放在中心呢?这是正确的答案。使用文本缩进:50%将为您在选择中居中选择。在边缘支持的SafariNot上也不支持。在Firefox中不起作用,但在Firefox中起作用的是
    text align:center
    width
    不是必需的。该死,这太完美了,也适用于最新的Firefox+repThis应该是最重要的答案,这是一个简单而纯粹的CSS解决方案,对我来说非常有效(尽管我将
    text align last:right;
    更改为
    center
    ,因为我希望标签位于中间)。这个答案棒极了!我在其他任何地方都没有找到如此简单的解决方案;在chrome和firefox中,我可以单独使用。在edge中不行,我也不会赌safari。这在任何移动浏览器中都不起作用。这就是我最希望它发挥作用的地方。为了让那些找到答案的人明白,如果你的选项大小相似,这会产生一种居中的效果,但实际上不是居中,只是将它们对齐并添加填充。在我的例子中,我有从1到5个字符的选项,所以让它们都向右对齐看起来很奇怪,因为左右两侧的间距不是偶数。这是一个改进的版本,现在该组的已不再维护。如果使用“中心”,则不需要包含“padding right:29px;”。我怀疑你有,因为你从2016年10月25日复制了Aly Elgarhy的答案。当你从某人的答案复制时,你应该提到他们的名字。不,我直接从我的代码中复制了这个答案,这就是为什么我把填充正确的原因,可能是我将另一个答案复制到了我的代码中,然后我将解决方案从我的代码复制到stackoverflow中。在Chrome中工作,但在IE中它看起来有点偏右,而不是在中间。为什么不像@marc carreras所说的那样将
    文本缩进
    标记添加到
    中呢?这似乎在关闭时将显示在选择中的值居中。下拉菜单中的选项仍然与左边对齐(至少在SEP 2019中的Chrome)是的,我想显示在中间,它在中间没有纠正。这是唯一一个在2020年5月1日之前帮助我的解决方案-这在Safari(或所有iOS设备上的任何浏览器)上不起作用。不幸的是,这在Safari中不起作用…截至2020年5月,苹果仍然强制iOS上的所有其他浏览器使用Safari的渲染引擎……这对Firefox来说效果很好。为每个单词留出空白并不是一个好主意。这个词来自de数据库,是动态的,怎么样?它适用于所有Safari浏览器,即使在2020年5月更改之后。从2020年10月开始,这个解决方案适用于Chrome、Safari和Brave。(我没有在其他浏览器中测试)。非常感谢,哈达维
    select{
        text-align-last:right;
        padding-right: 29px;
        direction: rtl;
    }
    
    select {
    
    text-align-last: center;
    padding-right: 29px;
    
    }
    
    padding-left: calc(50% - 1em);
    
    text-align: center;
    text-align-last: center;
    
    select {
        padding-left: 50% !important;
        width: 100%;
    }
    
    text-align-last: center;
    
    select {
        text-align: center;
        text-align-last: center;
        -moz-text-align-last: center;
    }
    
    select{
      width: 100%;
      text-indent: calc(50% - 60px);
    }
    
    .realWidth{
       width: auto;
    }
    
    const selectRef = document.getElementById("yourId");
    selectRef.classList.add("realWidth");
    
    const widthOfSelect = selectRef.getBoundingClientRect().width / 2;
    
    selectRef.classList.remove("realWidth");
    
    <select style={`textIndent: calc(50% - ${widthOfSelect}) %`}> ... </select>