Bootstrap 3上的输入宽度


154

再次更新:我通过选择最佳答案来结束这个问题,以防止人们在未真正理解问题的情况下添加答案。实际上,如果不使用网格或添加额外的CSS,就无法通过内置功能来实现。如果您要处理的help-block元素需要超出简短的输入,但它们是“内置”的,则网格将无法很好地工作。如果这是一个问题,我建议使用额外的CSS类,你可以在BS3讨论找到这里。现在BS4已经发布,可以使用包含的大小调整样式来进行管理,因此不再需要太长的时间了。感谢大家对这个流行的SO问题的良好投入。

更新:这个问题仍然悬而未决,因为它是关于BS中的内置功能来管理输入宽度而无需求助于网格(有时必须独立管理)。我已经使用自定义类来管理它,所以这不是基本CSS的方法。该任务在BS 功能讨论列表中,并且尚未解决。

原始问题: 有人想出一种在BS 3上管理输入宽度的方法吗?我目前正在使用一些自定义类来添加该功能,但是我可能错过了一些未记录的选项。

当前的文档说使用.col-lg-x,但是显然不起作用,因为它只能应用于容器div,这会导致各种布局/浮动问题。

这是一个小提琴。奇怪的是,在小提琴上,我什至无法调整表单组的大小。

http://jsfiddle.net/tX3ae/

<form role="form" class="row">
    <div class="form-group col-lg-1">
        <label for="code">Name</label>
        <input type="text" class="form-control">
    </div>

    <div class="form-group col-lg-1 ">
        <label for="code">Email</label>
        <input type="text" class="form-control input-normal">
    </div>

    <button type="submit" class="btn btn-default">Submit</button>
</form>
</div>

5
为什么要使用引导程序来管理这些宽度?它似乎并不是特别擅长,并且引入了复杂性。
Eamon Nerbonne

1
为什么为此使用引导程序,@ Eamon?响应式设计以及与引导程序正在处理的其他元素的一致性。不管怎样,在整点的问题是如何做到这一点,而不会引入复杂性。
ctb

@ctb:普通CSS可以很好地处理此类问题;不需要额外的引导程序复杂性。
Eamon Nerbonne

1
所以等等,这个问题回答了吗?38票很多。

1
@rook-答案是不,尽管他们的讨论列表中没有内置功能。但是,随着替代方案的进行,此处提供了一些替代方案,直到/如果BS实际上添加了替代方案。
cyberwombat 2015年

Answers:


95

您想做的当然是可以实现的。

您想要的是将每个“组”包装成一行,而不是将整个表格仅包装成一行。这里:

<div class="container">
    <h1>My form</h1>
    <p>How to make these input fields small and retain the layout.</p>
    <form role="form">
        <div class="row">
            <div class="form-group col-lg-1">
                <label for="code">Name</label>
                <input type="text" class="form-control" />
            </div>
        </div>

        <div class="row">
            <div class="form-group col-lg-1 ">
                <label for="code">Email</label>
                <input type="text" class="form-control input-normal" />
            </div>
        </div>
        <div class="row">
            <button type="submit" class="btn btn-default">Submit</button>
        </div>
    </form>
</div>

我制作的新jsfiddle: 新jsfiddle新jsfiddle

请注意,在新的小提琴中,我还添加了“ col-xs-5”,因此您也可以在较小的屏幕中看到它-删除它们没有什么区别。但是请记住,在您的原始类中,您仅使用'col-lg-1'。这意味着,如果屏幕宽度小于“ lg”媒体查询大小,则使用默认的块行为。基本上,仅通过应用“ col-lg-1”,您采用的逻辑是:

IF SCREEN WIDTH < 'lg' (1200px by default)

   USE DEFAULT BLOCK BEHAVIOUR (width=100%)

ELSE

   APPLY 'col-lg-1' (~95px)

有关更多信息,请参见Bootstrap 3网格系统。我希望我很清楚,否则让我知道,我会详细说明。


是的,这就是我对@Skelly的评论-对此有一个公开的问题,一旦事情解决,他们将予以解决。因为我们没有做额外的标记,所以添加行我们不是我想要的东西,如果他们进行了适当的分类,这是完全不必要的-这就是我所做的。我用百分比宽度创建了.input1-12,然​​后将其应用于输入-效果很好
cyberwombat 2013年

7
我对这篇文章的阅读不多,但是...“使用Bootstrap的预定义网格类,通过在表单中​​添加.form-horizo​​ntal来在水平布局中对齐标签和表单控件组。这样做会改变.form-groups的行为作为网格行,因此不需要.row。”
dtc

@dtc这对于输入宽度没有太大帮助吗?
雅克

@shadowf如果我想使输入短于其标签怎么办?我是否必须在另一对div中输入内容?
PowerGamer

1
谢谢,对我有用。顺便说一下,周日晚上10点对我来说:-)就像我在地球的另一端一样。
阿南达

70

在Bootstrap 3中

您可以简单地创建自定义样式:

.form-control-inline {
    min-width: 0;
    width: auto;
    display: inline;
}

然后将其添加到表单控件中,如下所示:

<div class="controls">
    <select id="expirymonth" class="form-control form-control-inline">
        <option value="01">01 - January</option>
        <option value="02">02 - February</option>
        <option value="03">03 - March</option>
        <option value="12">12 - December</option>
    </select>
    <select id="expiryyear" class="form-control form-control-inline">
        <option value="2014">2014</option>
        <option value="2015">2015</option>
        <option value="2016">2016</option>
    </select>
</div>

这样,您不必在HTML中添加额外的布局标记。


15
到目前为止,答案是成功的。它是干净的,可重复使用的并且可以正常工作。实际上,默认情况下应将其置于引导程序中,因为这是一个非常常见的烦恼。您很少需要纯块形式。
baweaver

我尝试了此解决方案,但对我不起作用。我想限制字段的宽度,因此我在自定义样式中使用了“ width:200px”,但这并没有改变宽度。仅当我设置'max-width:200px'时,我才得到正确的结果。
paulo62 2014年

当我使用此宽度时,它将不会覆盖表单控件类的自动宽度。
约翰尼

1
同意此处的注释-在看这里之前,我实际上已经尝试过此操作,它似乎并没有覆盖默认值...不确定为什么某些自定义样式可以使用某些自定义样式。
2015年

1
这是一个小提琴,展示了它的外观:jsfiddle.net/yd1ukk10
brandones 2015年

25

ASP.net MVC转到Content- Site.css并删除或注释以下行:

input,
select,
textarea {
    /*max-width: 280px;*/
}

如果看小提琴,您会发现OP希望使字段变小而不是变大。这里更大的问题是他的站点根本没有引用site.css。
Bmize729 '16

我不知道那里有CSS规则,令我发疯的是我似乎忽略了我指定的宽度。谢谢。
迈克尔·米勒

10

我认为您需要将输入包装在内col-lg-4,然后包装在内,并且form-group所有内容都包含在form-horizontal..中。

    <form class="form form-horizontal">
         <div class="form-group">
           <div class="col-md-3">
            <label>Email</label>
            <input type="email" class="form-control" id="email" placeholder="email">
           </div>
         </div>
         ...
     </form>

演示上Bootply - http://bootply.com/78156

编辑:从Bootstrap 3文档。

默认情况下,Bootstrap中的输入,选择和文本区域为100%宽。要使用内联表单,您必须在其中使用的表单控件上设置宽度。

因此,另一个选择是使用CSS设置特定的宽度:

.form-control {
    width:100px;
}

或者,将其col-sm-*应用于“ form-group”。


6
您必须将行类添加到表单组中-我与Bootstrap团队进行了讨论,他们已经将输入特定宽度控制的可能性添加到了他们的计划列表中。同时,我们必须使用完整的网格。如果继续,将行添加到表单组类中,然后删除水平类,我将标记此答案。这是工作中的小提琴jsfiddle.net/tdUtX/2和计划的github.com/twbs/bootstrap/issues/9397
cyberwombat

1
+ @ Yashua-+1个很好的例子。这也适用于输入组类,这给我带来了麻烦。
David Robbins 2014年

10

目前的文档说要使用.col-xs-x,没有lg。然后,我尝试摆弄,这似乎奏效了:

http://jsfiddle.net/tX3ae/225/

为了保持布局,也许您可​​以像这样更改放置“行”类的位置:

<div class="container">
  <h1>My form</h1>
  <p>How to make these input fields small and retain the layout.</p>
  <div class="row">
    <form role="form" class="col-xs-3">

      <div class="form-group">
        <label for="name">Name</label>
        <input type="text" class="form-control" id="name" name="name" >
      </div>

      <div class="form-group">
        <label for="email">Email</label>
        <input type="text" class="form-control" id="email" name="email">
      </div>

      <button type="submit" class="btn btn-default">Submit</button>
    </form>
  </div>
</div>

http://jsfiddle.net/tX3ae/226/


1
由于输入字段太小,因此不适用于小型设备
FranBran 2015年

9
<div class="form-group col-lg-4">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email">
</div>

将类添加到form.group以约束输入


8
那真的行不通。它导致每个后续元素都在该元素旁边浮动。您必须在每个表单组上添加带有类行的div,这很荒谬。
cyberwombat

6

如果您在Visual Studio 15中使用Master.Site模板,则基础项目将具有“ Site.css”,它会覆盖表单控件字段的宽度。

我无法使文本框的宽度大于300px。我尝试了一切,但没有任何效果。我发现Site.css中存在一个导致问题的设置。

摆脱这一点,您就可以控制字段的宽度。

/* Set widths on the form inputs since otherwise they're 100% wide */
input[type="text"],
input[type="password"],
input[type="email"],
input[type="tel"],
input[type="select"] {
    max-width: 280px;
}

感谢的人,四年后这个救了我
丰富的

4

我知道这是一个旧线程,但是我在使用内联表单时遇到了相同的问题,并且上述所有选项都无法解决该问题。所以我固定了我的内联表单,如下所示:-

<form class="form-inline" action="" method="post" accept-charset="UTF-8">
    <div class="row">
        <div class="form-group col-xs-7" style="padding-right: 0;">
            <label class="sr-only" for="term">Search</label>
            <input type="text" class="form-control" style="width: 100% !important;" name="term" id="term" placeholder="Search..." autocomplete="off">
            <span class="help-block">0 results</span>
        </div>
        <div class="form-group col-xs-2">
            <button type="submit" name="search" class="btn btn-success" id="search">Search</button>
        </div>
    </div>
</form>

那是我的解决方案。有点hacky hack,但是做了一个内联表单。


4

您可以添加样式属性,也可以在css文件中为input标签添加定义。

选项1:添加样式属性

<input type="text" class="form-control" id="ex1" style="width: 100px;">


选项2:在CSS中定义

input{
  width: 100px
}

您可以自动更改100px

希望我能帮上忙。


3

在Bootstrap 3中

具有.form-control的所有文本<input>,<textarea>和<select>元素均设置为width:100%; 默认。

http://getbootstrap.com/css/#forms-example

在某些情况下,我们似乎必须手动设置所需的最大输入宽度。

无论如何,您的示例有效。只需在大屏幕上检查它即可,因此您可以看到名称和电子邮件字段正在使用with的2/12(col-lg-1 + col-lg-1,您有12列)。但是,如果您的屏幕较小(只需调整浏览器的大小),则输入将扩展到该行的末尾。


3

您不必放弃简单的CSS :)

.short { max-width: 300px; }
<input type="text" class="form-control short" id="...">

1

如果您希望根据自己的喜好简单地减少或增加Bootstrap输入元素的宽度,则可以使用 max-width在CSS中。

这是我创建的一个非常简单的示例:

    <form style="max-width:500px">

    <div class="form-group"> 
    <input type="text" class="form-control" id="name" placeholder="Name">
    </div>

    <div class="form-group">
    <input type="email" class="form-control" id="email" placeholder="Email Address">
    </div>

    <div class="form-group">
    <textarea class="form-control" rows="5" placeholder="Message"></textarea>
    </div>   

    <button type="submit" class="btn btn-primary">Submit</button>
    </form>

我已经将整个表单的最大宽度设置为500px。这样,您将无需使用Bootstrap的任何网格系统,并且还可以使表单保持响应状态。


0

我也遇到同样的问题,这是我的解决方案。

HTML来源

<div class="input_width">
    <input type="text" class="form-control input-lg" placeholder="sample">
</div>

用另一个div类覆盖输入代码

CSS源

.input_width{
   width: 450px;
}

给出涵盖的div类的任何宽度或边距设置。

Bootstrap的输入宽度始终默认为100%,因此宽度遵循覆盖的宽度。

这不是最好的方法,而是我解决问题的最简单也是唯一的解决方案。

希望这会有所帮助。


0

我不知道为什么每个人似乎都忽略了Content文件夹中的site.css文件。查看此文件中的第22行,您将看到要控制的输入设置。您的网站似乎没有引用此样式表。

我添加了这个:

input, select, textarea { max-width: 280px;}

到你的小提琴,它很好用。

您永远不应该更新bootstrap.css或bootstrap.min.css。这样做会导致您在引导程序更新时失败。这就是为什么包括site.css文件的原因。在这里,您可以对网站进行更改,这些更改仍将为您提供所需的响应式设计。

这是工作的小提琴


0

style=""在输入字段中添加和定义术语,这是最简单的方法:示例:

<form>
    <div class="form-group">
        <label for="email">Email address:</label>
        <input type="email" class="form-control" id="email" style="width:200px;">
    </div>
    <div class="form-group">
        <label for="pwd">Password:</label>
        <input type="password" class="form-control" id="pwd" style="width:200px">
    </div>
    <button type="submit" class="btn btn-default">Submit</button>
</form>

0

Bootstrap使用类“ form-input”来控制“ input field”的属性。只需在css文件或head部分中添加具有所需宽度,边框,文本大小等的自己的“ form-input”类。

(或者,直接在主体部分的输入属性中添加size ='5'内联代码。)

<script async src="//jsfiddle.net/tX3ae/embed/"></script> 

0

Bootstrap 3我使用以下方法实现了一个不错的响应表单布局:

<div class="row">
    <div class="form-group  col-sm-4">
        <label for=""> Date</label>
        <input type="date" class="form-control" id="date" name="date" placeholder=" date">
    </div>

    <div class="form-group  col-sm-4">
        <label for="hours">Hours</label>
        <input type="" class="form-control" id="hours" name="hours" placeholder="Total hours">
    </div>
</div>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.