使用带有引导程序的Fieldset Legend

时间:2013-05-31 07:56:55

标签: html css forms twitter-bootstrap

我在我的JSP页面使用Bootstrap。

我想将 <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;
}

我得到这样的输出 enter image description here

我希望以下列方式输出

enter image description here

我尝试添加

border:none;
width:100px;
CSS中的

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

那么我该怎样做才能得到像我刚才提到的输出? (没有触及传说文本)

7 个答案:

答案 0 :(得分:198)

这是因为默认情况下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 example

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

您可能还想添加margin-bottom:0;以减少图例和分隔符之间的差距。

答案 1 :(得分:36)

在bootstrap 4中,在字段集上与图例混合的边框要容易得多。你不需要自定义css来实现它,它可以这样做:

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

看起来像这样: bootstrap 4 fieldset and legend

答案 2 :(得分:17)

我有这个问题,我用这种方式解决了:

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;
}

答案 3 :(得分:14)

我采用了不同的方法,使用自举面板来显示它更丰富。只是为了帮助别人并改善答案。

&#13;
&#13;
.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;
}
&#13;
<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>
&#13;
&#13;
&#13;

这将给出以下看法。 enter image description here

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

答案 4 :(得分:5)

只想总结一下上面的所有正确答案。因为我不得不花费大量时间来确定哪个答案可以解决问题以及幕后发生的事情。

带有bootstrap的fieldset似乎有两个问题:

  1. bootstrap将宽度设置为legend为100%。这就是为什么它覆盖fieldset的顶部边界。
  2. bottom border有一个legend
  3. 因此,我们需要解决的是将图例宽度设置为auto,如下所示:

    legend.scheduler-border {
       width: auto; // fixes the problem 1
       border-bottom: none; // fixes the problem 2
    }
    

答案 5 :(得分:1)

<fieldset  class="border p-2 form-group">
   <legend class="control-label customer-legend pl-1">Your Legend</legend>
</fieldset>

使用CSS:

.customer-legend:before {
    left: 100px;
}

答案 6 :(得分:0)

.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>