将Fieldset Legend与Bootstrap一起使用


173

我正在为我使用Bootstrap JSP页面。

我想使用<fieldset><legend>填写表格。这是我的代码。

<fieldset class="scheduler-border">
    <legend class="scheduler-border">Start Time</legend>
    <div class="control-group">
        <label class="control-label input-label" for="startTime">Start :</label>
        <div class="controls bootstrap-timepicker">
            <input type="text" class="datetime" id="startTime" name="startTime" placeholder="Start Time" />
            <i class="icon-time"></i>
        </div>
    </div>
</fieldset>

CSS是

fieldset.scheduler-border {
    border: 1px groove #ddd !important;
    padding: 0 1.4em 1.4em 1.4em !important;
    margin: 0 0 1.5em 0 !important;
    -webkit-box-shadow:  0px 0px 0px 0px #000;
            box-shadow:  0px 0px 0px 0px #000;
}

legend.scheduler-border {
    font-size: 1.2em !important;
    font-weight: bold !important;
    text-align: left !important;
}

我正在得到这样的输出 在此处输入图片说明

我想以以下方式输出

在此处输入图片说明

我尝试添加

border:none;
width:100px;

legend.scheduler-borderCSS中。而且我正在获得预期的输出。但是问题是我想<fieldset>为另一个字段添加另一个。那时,图例中文本的宽度是一个问题,因为它比更长100px

那么我该怎么做才能获得我提到的输出?(不删除图例文字)


您共享的代码似乎正常工作。这是一个小提琴
Menno,

4
@Aquillo,您的小提琴没有使用Bootstrap。
詹姆斯·唐纳利

1
@JamesDonnelly也注意到这是由Bootstrap引起的;)
Menno

1
我认为您应该考虑使用Bootstrap的面板。它具有与字段集和图例非常相似的行为,但更加时尚。
Chandra Destiawan'1

Answers:


220

这是因为默认情况下,Bootstrap会将legend元素的宽度设置为100%。您可以通过更改legend.scheduler-border为同时使用来解决此问题:

legend.scheduler-border {
    width:inherit; /* Or auto */
    padding:0 10px; /* To give a bit of padding on the left and right */
    border-bottom:none;
}

JSFiddle示例

您还需要确保 Bootstrap 之后添加自定义样式表以防止Bootstrap覆盖您的样式-尽管此处的样式应具有更高的特异性。

您可能还需要添加margin-bottom:0;它,以减少图例和分隔线之间的距离。


2
Ftr:对我来说,Bootstrap 3.3.6还在上设置了margin-bottom: 20px;,将legend其推到字段集边界上方,而不是将其放在行上。轻松地margin-bottom: 0;在自定义设置上进行设置legend.scheduler-border
dtk

86

在引导程序4中,在字段集上与图例融合的边框要容易得多。您不需要自定义css即可实现,可以这样完成:

<fieldset class="border p-2">
   <legend  class="w-auto">Your Legend</legend>
</fieldset>

看起来像这样: 引导程序4字段集和图例


w-auto在Bootstrap 4.0中不可用,但在4.1+中可用
dlauzon

19

我遇到了这个问题,并通过以下方式解决了:

fieldset.scheduler-border {
    border: solid 1px #DDD !important;
    padding: 0 10px 10px 10px;
    border-bottom: none;
}

legend.scheduler-border {
    width: auto !important;
    border: none;
    font-size: 14px;
}

17

我采用了另一种方法,使用了引导面板来显示更多内容。只是为了帮助某人并改善答案。

.text-on-pannel {
  background: #fff none repeat scroll 0 0;
  height: auto;
  margin-left: 20px;
  padding: 3px 5px;
  position: absolute;
  margin-top: -47px;
  border: 1px solid #337ab7;
  border-radius: 8px;
}

.panel {
  /* for text on pannel */
  margin-top: 27px !important;
}

.panel-body {
  padding-top: 30px !important;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<div class="container">
  <div class="panel panel-primary">
    <div class="panel-body">
      <h3 class="text-on-pannel text-primary"><strong class="text-uppercase"> Title </strong></h3>
      <p> Your Code </p>
    </div>
  </div>
  <div>

这将给下面的外观。 在此处输入图片说明

注意:我们需要更改样式以使用不同的标题大小。


7

只是想总结以上所有正确的答案。因为我不得不花费大量时间来找出哪个答案可以解决问题以及幕后情况。

引导字段集似乎存在两个问题:

  1. bootstrap设置宽度到legend为100%。这就是为什么它覆盖的顶部边框的原因fieldset
  2. 有一bottom borderlegend

因此,我们需要解决的所有问题是将图例宽度设置为auto,如下所示:

legend.scheduler-border {
   width: auto; // fixes the problem 1
   border-bottom: none; // fixes the problem 2
}
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.