将 html 输入框限制为其周围边框的最大宽度

Posted

技术标签:

【中文标题】将 html 输入框限制为其周围边框的最大宽度【英文标题】:Restrict html input box to max width of a border around it 【发布时间】:2021-12-28 21:19:12 【问题描述】:

我有以下 html 代码,其中有几个围绕输入字段和两个标签的边框实例。我希望发生的是,所有这些都被限制在它们周围的边界内;实际发生的情况是输入字段实际上忽略了边框,当输入字段超出边界线的位置时,在它上面绘制。有没有办法做到这一点?我知道我可以设置输入字段的宽度,这应该可以实现目标,但这并不是完全响应或(至少在我看来)好的 UI 设计。第一次调整窗口大小时,它可能会丢失测量值。

我希望这可能是一个相当简单的修复,但是当我尝试用谷歌搜索这个解决方案时,我发现的每个结果都是为了限制(或在某些情况下删除)输入框本身的边框,而不是封闭边框.

如果有人能在这方面提供任何帮助,我将不胜感激... (顺便说一句,任何能猜到这是为了什么的人都可以加分,因为它是如此晦涩:p ~sarcasm~

   section, h1 
        padding: 0 1em;
    
    
    .grid 
        display: grid;
        grid-template-columns: repeat(3, 150px);
        grid-template-rows: repeat(3, 150px);
        grid-gap: 50px 30px;
    
    
    .grid-item 
        border: thin #566d7e solid;
        padding: 10px;
    
    
    .grid-item > label 
        text-align: center;
    
    
    .grid-item > input 
        margin: 2px;
        word-wrap: true;
    
    <!DOCTYPE html>
    <html>
        <head>
            <link rel="stylesheet" href="css\abilitiesStyle.css" as="style">
        </head>
    </html>
    <body>
        <header>
        </header>
        <main>
            <article>
                <h1>Abilities, Saves, Senses</h1>
                <section>
                    <div class="grid">
                        <div class="grid-item">
                            <label>STRENGTH</label>
                            <input type="number" name="strengthScore">
                            <label id="strengthModifier"></label>
                        </div>
                        <div class="grid-item">
                            <label>DEXTERITY</label>
                            <input type="number" name="dexterityScore">
                            <label id="dexterityModifier"></label>
                        </div>
                        <div class="grid-item">
                            <label>CONSTITUTION</label>
                            <input type="number" name="constitutionScore">
                            <label id="constitutionModifier"></label>
                        </div>
                        <div class="grid-item">
                            <label>INTELLIGENCE</label>
                            <input type="number" name="intelligenceScore">
                            <label id="intelligenceModifier"></label>
                        </div>
                        <div class="grid-item">
                            <label>WISDOM</label>
                            <input type="number" name="wisdomScore">
                            <label id="wisdomModifier"></label>
                        </div>
                        <div class="grid-item">
                            <label>CHARISMA</label>
                            <input type="number" name="charismaScore">
                            <label id="charismaModifier"></label>
                        </div>
                    </div>
                </section>
            </article>
        </main>
        <footer>
        </footer>
    </body>

【问题讨论】:

【参考方案1】:

您可以通过 input[type=number] 设置输入类型的样式并将宽度设置为 100%。我还添加了 - margin-left 以使输入字段居中。此方法在所有屏幕上都 100% 响应。

   section, h1 
        padding: 0 1em;
    
    
    .grid 
        display: grid;
        grid-template-columns: repeat(3, 150px);
        grid-template-rows: repeat(3, 150px);
        grid-gap: 50px 30px;
    
    
    .grid-item 
        border: thin #566d7e solid;
        padding: 10px;
    
    
    .grid-item > label 
        text-align: center;
    
    
    .grid-item > input 
        margin: 2px;
        word-wrap: true;
    
/* additions */    
   input[type=number] 
      width: 100%;
      margin-left: -.2rem;
    <!DOCTYPE html>
    <html>
        <head>
            <link rel="stylesheet" href="css\abilitiesStyle.css" as="style">
        </head>
    </html>
    <body>
        <header>
        </header>
        <main>
            <article>
                <h1>Abilities, Saves, Senses</h1>
                <section>
                    <div class="grid">
                        <div class="grid-item">
                            <label>STRENGTH</label>
                            <input type="number" name="strengthScore">
                            <label id="strengthModifier"></label>
                        </div>
                        <div class="grid-item">
                            <label>DEXTERITY</label>
                            <input type="number" name="dexterityScore">
                            <label id="dexterityModifier"></label>
                        </div>
                        <div class="grid-item">
                            <label>CONSTITUTION</label>
                            <input type="number" name="constitutionScore">
                            <label id="constitutionModifier"></label>
                        </div>
                        <div class="grid-item">
                            <label>INTELLIGENCE</label>
                            <input type="number" name="intelligenceScore">
                            <label id="intelligenceModifier"></label>
                        </div>
                        <div class="grid-item">
                            <label>WISDOM</label>
                            <input type="number" name="wisdomScore">
                            <label id="wisdomModifier"></label>
                        </div>
                        <div class="grid-item">
                            <label>CHARISMA</label>
                            <input type="number" name="charismaScore">
                            <label id="charismaModifier"></label>
                        </div>
                    </div>
                </section>
            </article>
        </main>
        <footer>
        </footer>
    </body>

【讨论】:

我知道这一定很简单,我没有想到!非常感谢你!我没有想到 100% 的宽度,因为我认为这会将尺寸扩大到页面的整个宽度。我一定总是误解了:)... @KevenM 因为你有一个很好的 HTML 结构,它只会扩展到父级的宽度。在这种情况下,这正是您想要的。没问题!

以上是关于将 html 输入框限制为其周围边框的最大宽度的主要内容,如果未能解决你的问题,请参考以下文章

宽度为 100% 的 HTML 输入文本框溢出表格单元格

将输入字段的宽度调整为其输入

聚焦时如何更改边框宽度

CSS/HTML:在输入字段周围创建发光边框

JS怎么控制文本框输入的长度

关注输入框时删除边框[重复]