好吧,这似乎是不可能正确的.我有一个文本框和一个 Select 框.我希望它们的宽度完全相同,所以它们在左边缘和右边缘对齐.

<!DOCTYPE html>
<html>
    <head>
        <style type="text/css">
            input, select {
                width: 200px;
            }
        </style>
    </head>
    <body>
        <input type="text" value="ABC"><br>
        <select>
            <option>123</option>
        </select>
    </body>
</html>

你觉得这样就行了,对吧?不是的.在Firefox中, Select 框要短6px.请参见屏幕截图.

好的,让我们编辑代码,制作两种样式.

<style type="text/css">
    input {
        width: 200px;
    }
    select {
        width: 206px;
    }
</style>

好的,这样就行了!

在Firefox中修复

哦,等等,最好在Chrome上测试一下...

Chrome Screenshot

FFFFFFUUUUUUUUUUUUUU

有人能告诉我如何在所有浏览器中排列这些吗?为什么我不能只做宽度:200px,为什么所有的浏览器都有不同的显示方式?另外,既然我们这样做了,为什么文本框和 Select 框的高度不同呢?我们怎么才能让他们达到同样的高度呢?已经try 过高度和线条高度,但都无济于事.


解决方案:

好的,我已经从下面的答案中找到了解决方案.关键是使用box-sizing: border-box属性,这样当您指定includes的宽度时,边框和填充.请参见excellent explanation here.那么浏览器就不能把它填满了.

下面是代码,还将框的高度设置为相同的大小,并缩进框内的文本,使其对齐.你还需要设置边框,因为Chrome有一个非常奇怪的边框,它用于 Select 框,这会抛出对齐.这将适用于HTML5站点(例如,支持IE9、Firefox、Chrome、Safari、Opera等).

<!DOCTYPE html>
<html>
    <head>
        <style type="text/css">
            input, select {
                width: 200px;
                border: 1px solid #000;
                padding: 0;
                margin: 0;
                height: 22px;
                -moz-box-sizing: border-box;
                -webkit-box-sizing: border-box;
                box-sizing: border-box;
            }
            input {
                text-indent: 4px;
            }
        </style>
    </head>
    <body>
        <input type="text" value="ABC"><br>
        <select>
            <option>123</option>
            <option>123456789 123123123123</option>
            <option>123456789 123123123123 134213721381212</option>
        </select>
    </body>
</html>

最后一个警告,您可能不希望输入按钮、复选框等包含在此样式中,因此使用input:not([type='button'])不将其应用于某些类型,或使用input[type='text'], input[type='password']指定您希望应用的类型.

推荐答案

这是因为<input type="text" />元素的默认样式与<select>元素略有不同,例如边框、填充和边距的值可能不同.

您可以通过元素判断器观察这些默认样式,例如Firefox的Firebug或Chrome的内置样式.此外,这些默认样式表因浏览器而异.

您有两个 Select :

  1. 将两个元素的边框、填充和边距值显式设置为相同
  2. 要包含在您自己的CSS样式表之前的CSS重置样式表

我会 Select 选项1.因为选项2.需要大量的工作,而且你最终会得到大量不必要的CSS.但一些网站开发人员更喜欢从头开始,拥有完全的控制权.

Css相关问答推荐

为什么图像加载请求没有显示在我的网络请求中?

如何将此 Select 器转换为TailWind类

如何使用来自单独模块的代码将自定义标头插入到使用 DT Shiny 呈现的表中?

重用 CSS 类更改一些属性

Flex & space-around 与内容相交

在 React Native 中创建背景

当我在几个月之间更改时,有什么方法可以在react-dates-range上添加淡入淡出或幻灯片效果?

基于变量动态生成 CSS 类 - SCSS

CSS 常量()用于什么?

firefox overflow-y 不能使用嵌套的 flexbox

找到第一个可滚动的父级

重置子元素的不透明度 - Maple Browser (Samsung TV App)

如何在没有填充区域的情况下背景化 div

如何使内容出现在固定的 DIV 元素下方?

跨域 iframe 调整大小

如何让 flexbox 在计算中包含填充?

HTML5 和边框

使用 HTML data-attribute 设置 CSS background-image url

如何创建一个带点的
标签?

CSS中伪元素前的&是什么意思?