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;
}
在我的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>