为什么我的Twitter Bootstrap表单字段使用流体容器溢出?

问题描述 投票:40回答:8

更新:这里的问题演示:http://jsfiddle.net/fdB5Q/embedded/result/

从大约767px到998px,表格字段比包含井更宽。

小于767px,整个表格区域转换为新线。浏览器窗口宽度约为200px时呈现的页面显示完美。表单字段按预期缩小。

对于视觉,请看这个非常相似的问题:Twitter Bootstrap CSS static-fluid form positioning

这是头部的一切:

<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css" />
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap-responsive.css" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>

这是身体里的一切:

<div class="container-fluid">

<div class="row-fluid">

<div class="span8">
<p>Some Content.</p>
</div>

<div class="span4">
  <div class="well">    
    <div class="control-group">
      <label class="control-label" for="name">Your Name</label>
      <div class="controls">
      <input type="text" class="input-xlarge" name="name" id="name" maxlength="100" />
      </div>
    </div>
  </div>
</div>

</div>

</div>

我想我误解了框架的某些部分。我不应该使用液体容器吗?我究竟做错了什么?我可以把一些东西放在一起解决这个问题,但我认为问题可能是我做错了大事。

我尝试将我的跨度改为7和5,但仍然有同样的错误。我尝试了6和6,但在那时页面看起来很荒谬。其余的答案对我来说没有意义。

我将输入类更改为大而不是xlarge。它仍然有一个宽度范围,它溢出,如果显示器上有空间我真的想要更宽的表格字段。

我想避免水平滚动条,我想在我的智能手机上以横向或肖像模式使页面文本大小相同。

更新:图片

我的问题页面:

简化版:

浏览器宽度为200 px的简化版本:

html css twitter-bootstrap
8个回答
62
投票

输入html标签及其对应的.input-*样式仅设置css width。这是设计的。

但添加css max-width:100%将确保控制过大的输入。 例如将此添加到您的头部:

<style>
    input {
        max-width: 100%;
    } 
</style>

4
投票

通常我更喜欢在class="row-fluid"元素中使用另一个class="span12"class="spanX"来获得100%宽度的元素。这不会导致不同分辨率的错误。所以,我在row-fluid类的元素中添加了另一个span4类,并且在新的row-fluid中添加了与span12的div。你必须在某些时候覆盖默认的Bootstrap设置以获得你需要的东西,所以我在.my-input元素中添加了类<input />以获得100%的宽度并删除左右填充(填充将导致右侧的bug)。这是代码:

<div class="container-fluid">
    <div class="row-fluid">
        <div class="span8">
            <p>Some Content.</p>
        </div>
        <div class="span4 well">
            <div class="row-fluid">
                <div class="span12">
                    <label class="control-label" for="name">Your Name</label>
                    <input type="text" class="my-input" name="name" id="name" maxlength="100" />
                </div>
             </div>
        </div>
  </div>
</div>

和CSS类用于覆盖

​.my-input
{
    width: 100%;
    padding: 4px 0 4px 0 !important;
}​

你可以看到和Jsfiddle demo,尝试调整屏幕大小。


4
投票

我刚刚遇到了这个问题并在检查表单输入的bootstrap文档时指出'使用相对大小的类,如.input-large,或者使用.span *类将输入匹配到网格列大小。'

我的bootstrap行设置为span9为内容,span3为sidebar。设置<input class='span3'/>解决了我的问题,随着屏幕尺寸的减小,输入框保留在侧边栏内。


1
投票

玩这些FOREVER之后只是一点点输入(似乎)。我使用一个简单的宽度属性,并根据容器,填充和其他css因素将其设置在85%和95%之间,以保持输入字段实际拉伸到容器的边缘。

.input-example {
   width: 90%; 
}

我不是专家!我只是提供我所学到的知识,请不要将其作为经验丰富的开发人员的建议。试图回馈一个在无数场合挽救了我生命的社区。


1
投票

不幸的是,问题比所有这些更加阴险。使用max-widths对我没有任何帮助。我讨厌看起来很糟糕的东西,所以我挖了一下......

它归结为表单控件的css声明中的这三行:

width: 100%;
padding: 6px 12px;
border: 1px solid #cccccc;

设置文本类型输入元素的宽度时,水平填充和边框将添加到100%而不是从中获取。因此,如果100%宽度w是500px,那么文本输入表格控件的宽度变为w + 12 + 12 + 1 + 1,526px。额外的26px是一个常数,这意味着除非宽度百分比动态计算为100%*(w /(w + 26px))或100%-26px,否则事情永远不会出现。

我个人认为这在html / css界面的定义或实现中是一个错误(我不知道哪个,我真的不想尝试在标准的变化中找到引用。)如果你假设输入字段将是100%宽度,则需要应用校正以使边距内的宽度为100%,而不包括100%而不包括水平填充和边框宽度。

顺便说一下,百分比值或固定大小并不重要;它们也是26px。您需要从宽度中过滤掉这些26px。

但是,对于引导文本输入,所有内容都不会丢失,至少如果您使用的是允许客户端计算的CSS编译器。例如,少

input.form-control[type=text] {
  width: calc(~'100%-26px');
}

会让一切变得更好。请注意,电子邮件和密码类型(至少)也有同样的问题。

当然,26px有点脆弱,但是常量被硬编码到表格控制声明中,所以你的双手都很紧张。一个测试将是很好的检查渲染控件的大小,以捕获引导升级上的CSS声明更改,但不是今晚,谢谢。


0
投票

正如帕夫洛在这个答案中指出的那样:Twitter Bootstrap: Stop input field extending beyond well

使用输入xlarge(或其他大小)的类input-block-levelin也可以解决问题。


0
投票

我用表单输入和面板主体来解决这个问题。我在下面的项目中回答:Twitter Bootstrap: Stop input field extending beyond well

对我来说问题是形式溢出。这使得输入也可以效仿。通过固定表单的最大宽度(最大宽度:100%),我能够修复输入以及可能放在表单内的任何其他内容。


0
投票

任何人都可以找到

HTML:

<input class="form-control" placeholder="Threshold Type">

CSS:

.form-control { box-sizing: border-box; } 
© www.soinside.com 2019 - 2024. All rights reserved.