当前位置: 首页 > 面试题库 >

使用display:block输入的不是块,为什么不呢?

彭宏义
2023-03-14
问题内容

为什么display:block;width:auto;在我的文本输入中表现不像div那样填充容器宽度?

我的印象是div只是具有自动宽度的块元素。在以下代码中,div和输入的尺寸不应该相同吗?

如何获取输入以填充宽度?100%的宽度无效,因为输入具有填充和边框(导致最终宽度为1像素+ 5像素+ 100%+ 5像素+
1像素)。固定宽度不是一个选择,我正在寻找更灵活的方法。

我希望直接找到解决方法。这似乎是一个CSS怪癖,理解它以后可能会有用。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <title>width:auto</title>

        <style>
        div, input {
            border: 1px solid red;
            height: 5px;
            padding: 5px;
        }
        input, form {
            display: block;
            width: auto;
        }
        </style>
    </head>

    <body>
        <div></div>
        <form>
            <input type="text" name="foo" />
        </form>
    </body>
</html>

我应该指出,我已经可以使用包装器解决方法来做到这一点。除了页面语义和CSS选择器关系的这种混乱之外,我试图了解问题的性质以及是否可以通过更改INPUT本身的性质来解决。

好的,这真是奇怪!我发现解决方案是简单地使用添加max-width:100%到输入中width:100%;padding:5px;。但是,这引发了更多的问题(我将在另一个问题中回答),但是宽度似乎使用普通的CSS盒子模型,而max-width使用Internet Explorer边框模型。真奇怪

好的,最后一个似乎是Firefox 3中的错误。InternetExplorer8和Safari4将最大宽度限制为100%+填充+边框,这是规范所说的。终于,Internet Explorer正确了。

天哪,这太棒了!在此过程中,在著名的大师DeanEdwards和ErikArvidsson的大力帮助下,我设法组合了三个单独的解决方案,以在具有任意填充和边框的元素上实现真正的跨浏览器100%的宽度。请参阅下面的答案。此解决方案不需要任何额外的HTML标记,只需一个类(或选择器)和旧版InternetExplorer的可选行为即可。


问题答案:

看看我想出了什么,一种使用box-sizing:border-boxCSS 3
相对未知的样式的解决方案。这允许任何元素上的“真”宽度为100%,无论该元素的填充和/或边框如何。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">

        <title>Cross-browser CSS box-sizing:border-box</title>

        <style type="text/css">
            form {display:block; margin:0; padding:0; width:50%; border:1px solid green; overflow:visible}
            div, input {display:block; border:1px solid red; padding:5px; width:100%; font:normal 12px Arial}

            /* The voodoo starts here */
            .bb {
                box-sizing: border-box; /* CSS 3 rec */
                -moz-box-sizing: border-box; /* Firefox 2 */
                -ms-box-sizing: border-box; /* Internet Explorer 8 */
                -webkit-box-sizing: border-box; /* Safari 3 */
                -khtml-box-sizing: border-box; /* Konqueror */
            }
        </style>

        <!-- The voodoo gets scary. Force Internet Explorer 6 and Internet Explorer 7 to support Internet Explorer 5's box model -->
        <!--[if lt IE 8]><style>.bb {behavior:url("boxsizing.htc");}</style><![endif]-->
    </head>

    <body>
        <form name="foo" action="#">
            <div class="bb">div</div>
            <input class="bb" size="20" name="bar" value="field">
        </form>
    </body>
</html>

该解决方案通过Erik Arvidsson编写的行为支持Internet Explorer 6和Internet Explorer 7,并通过Dean
Edwards的一些调整来支持百分比和其他非像素宽度。



 类似资料:
  • 问题内容: 我想12”3在我的输入标签值中显示 我写这个: 但这是不对的 为什么呢? PS:我必须转移”到",或更改”到’?我不喜欢 问题答案: HTML根本没有像其他语言一样具有转义序列。在HTML属性值中,唯一的特殊字符是,取决于引号”或’。唯一使用这些字符的是字符引用: 一些作者使用字符实体引用“ ;”来编码双引号(”)的实例,因为该字符可用于定界属性值。 或者,您使用单引号,则无需编码双引

  • 问题内容: 我想清除并更改给定URL上的输入值。我使用的js不会执行任何操作,也不会导致任何错误。为什么会发生这种情况,我该如何解决? 问题答案: 一个可能且可能的答案是,在尝试清除的元素之前,您还有另一个具有相同名称的元素。 请检查html并检查是否找到多个元素,然后采用第一个。 另外,您可以使用css选择器,例如:

  • 问题内容: 我正在阅读Caleb Doxsey的Go书,我对http://www.golang-book.com/4有两个疑问 我想知道为什么在第二个Scanf之后程序没有停止并等待用户输入?以及如何测试用户是否输入了整数和/或没有留空? 问题答案: 这是发行5391::拒绝在Windows上线的末端。 作为一种解决方法,要检查输入是否有效,请编写, 和 解决方法是格式字符串中的换行符。 包 功能

  • 我是SwiftUI的新手,我需要社区的帮助来理解为什么在下面的代码中,任何选择器选项的选择似乎都不起作用,要么是不可选择的,因此不会触发任何操作,要么是被选择的,并且不会触发任何操作。 非常感谢提前让我知道下划线的概念。 德沃

  • 很多人问了此问题,说bzero已经被posix-2008废弃,为何还使用bzero。选择bzero而不是memset,有2个原因: bzero有2个参数,指针和长度,很明确就是将制定size的内存初始化为0。而memset有3个参数,需要记忆参数的位置,有不少人经常把长度和初始化值搞错。 bzero比memset的可读性要好。memset可以制定初始化的值,实际上绝大多数情况都是0。 一旦新版本g

  • 因此,我是一个新的Java程序员,我正试图弄清楚为什么一段代码不能工作。我遇到的问题是“String interests=input.nextLine();”这一行,它跳过了用户的输入并跳转到下一个System.out,所以它只显示“Your Profile...”。在允许用户输入任何数据之前。抱歉,如果这是一个愚蠢的问题,我是很新的!