【问题标题】:Strange behavior of an input html element with display: block带有显示的输入 html 元素的奇怪行为:块
【发布时间】:2015-07-23 05:47:42
【问题描述】:

我正在尝试在引导程序的帮助下制作一些 html 表单。我的一些输入必须与左侧或右侧没有间隙。但是引导程序 .col-XX-Y 块通过左右填充有排水沟。所以我的想法是为我的输入元素使用负边距,并显示:块。在这里我被困住了。 请参考此codepen example。我遇到了一些奇怪的事情:

  1. 为什么输入 display: block 不能填满它的父级 容器,就像div 一样?它仅使用以下内容填充容器:width:100%;(注释 width 以获取 codepen 示例中的红色边框输入)

  2. 如果我应用否定 margin-left 来补偿父容器的 左填充,我的输入向左移动,但保持原来的宽度(就像使用了left css 属性一样)。它不需要表现 像块元素(例如div):向左移动并保持 填充其父级的所有宽度,不包括右填充?

  3. 当我为 input 应用负右边距以补偿父级的右边距时,什么也没有发生(看我的例子,比较橙色 div 红色输入)。为什么?像块元素这样的行为呢?

如果这是正常行为,您能否给我一些指向 html 标准文档的链接以及对此的解释。

【问题讨论】:

  • 你为什么不直接删除填充?
  • 是的,这很简单,但我想了解这里发生了什么。
  • 仔细查看应用于元素的样式。 .container.col-md-12 都在申请 padding-left: 15px; padding-right: 15px;。您可能应该尝试删除这些属性,而不是尝试在子级中处理这些属性。
  • 好的,你是对的,但这对我来说并不重要,我已经编辑了代码笔。主要问题是为什么带有 display:block 的输入的行为不像常规块级元素。

标签: html css twitter-bootstrap


【解决方案1】:

如果您不希望网格父元素上的填充影响其子元素,请将其所有子元素包围在一个带有 row 类的块元素中。

引导输入元素旨在跨越父元素的整个宽度,即使没有显示块样式属性。

<div class="col-md-12">
  <div class="row"> <!--this is what you need -->

  </div>
</div>

完整示例代码

<div class="col-md-12">
    <div class="row">
        <input type="text" placeholder='I\'m some damned input' />
    </div>
    <div class="row">
        <div>I am some div</div>
    </div>
</div>

【讨论】:

  • 是的,因为 .row 类设置了左右的负边距,所以它补偿了 .col-XX-Y 类的填充。但是为什么我要制作一堆嵌套的 div 而不是一个 div,或者更好的是只输入具有正确 css 的元素?所以我的问题的主要目的是了解输入 html 元素的行为 display: block
  • 我认为你混合了原生 css 和 bootstrap。你说你正在使用 bootstrap - 对吧? 但为什么我要制作一堆嵌套的 div 而不是一个 div” 因为这就是 bootstrap 的工作原理。bootstrap 是 css 和其他一些人已经编写的其他 ui 技术,可以帮助您引导您的 ui开发。这意味着有一些已经编写好的 css,如果您页面上的 html 元素按照那里的指南布局,它将产生他们记录的内容。
  • 我的问题是理解输入 html 元素的行为与 display: block stackoverflow.com/questions/4567988/…
  • 是的,你是对的。但是输入元素的这种行为对我来说很新,所以我要求解释以了解其技术方面。当然,我会使用额外的 div 作为输入的包装器,并在需要时手动将其填充设置为零。
【解决方案2】:

表单元素的行为方式与常规块级元素不同。当您将 &lt;input&gt; 字段显示为块时,它不会填满整个宽度。

因此,您需要赋予元素width: 100%。这就是 Bootstrap 样式构成元素的方式。

像任何其他块元素一样,给它一个 100% 的宽度将允许它填充其容器的宽度。当您应用负数margin-left 时,宽度仍将相同(100% = 容器宽度),这将导致出现间隙。

我建议将 &lt;input&gt; 字段包装在 &lt;div&gt; 中,并对其应用负边距:

.wrap {
    margin: 0 -20px;
}
.wrap input {
    width: 100%;
    display: block;
}

【讨论】:

  • 你能给我一些技术文档的链接,我可以在哪里阅读它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2015-12-16
  • 2012-05-15
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多