Verwenden Sie Fieldset Legend mit Bootstrap

173

Ich verwende Bootstrap für meine JSPSeite.

Ich möchte <fieldset>und <legend>für mein Formular verwenden. Das ist mein Code.

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

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

Ich bekomme eine solche Ausgabe Geben Sie hier die Bildbeschreibung ein

Ich möchte die Ausgabe folgendermaßen

Geben Sie hier die Bildbeschreibung ein

Ich habe versucht hinzuzufügen

border:none;
width:100px;

um legend.scheduler-borderin CSS. Und ich bekomme die erwartete Ausgabe. Das Problem ist jedoch, dass ich <fieldset>für andere Felder ein weiteres hinzufügen möchte . Diesmal ist die Breite des Textes in der Legende ein Problem, da er länger als ist 100px.

Was soll ich also tun, um eine Ausgabe zu erhalten, wie ich sie erwähnt habe? (Ohne den Legendentext zu streichen)

Shiju K Babu
quelle
Der Code, den Sie geteilt haben, scheint gut zu funktionieren. Hier ist eine Geige
Menno
4
@Aquillo deine Geige benutzt Bootstrap nicht.
James Donnelly
1
@ JamesDonnelly bemerkte auch, dass dies durch Bootstrap verursacht wird;)
Menno
1
Ich denke, Sie sollten in Betracht ziehen, das Bootstrap-Panel zu verwenden. Es hat ein sehr ähnliches Verhalten wie Fieldset und Legende, ist aber stilvoller.
Chandra Destiawan

Antworten:

221

Dies liegt daran, dass Bootstrap standardmäßig die Breite des legendElements auf 100% festlegt . Sie können dies beheben, indem Sie Ihre ändern, legend.scheduler-borderum auch Folgendes zu verwenden:

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

Sie müssen auch sicherstellen, dass Ihr benutzerdefiniertes Stylesheet nach dem Bootstrap hinzugefügt wird, um zu verhindern, dass Bootstrap Ihr ​​Styling überschreibt - obwohl Ihre Styles hier eine höhere Spezifität aufweisen sollten.

Möglicherweise möchten Sie auch hinzufügen margin-bottom:0;, um die Lücke zwischen der Legende und dem Teiler zu verringern.

James Donnelly
quelle
2
Ftr: Für mich hat Bootstrap 3.3.6 auch ein margin-bottom: 20px;auf gesetzt legend, wodurch es über den Feldsatzrand geschoben wurde, anstatt es auf die Linie zu setzen. Das Einstellen des margin-bottom: 0;benutzerdefinierten legend.scheduler-borderFixes ist so einfach.
dtk
87

In Bootstrap 4 ist es viel einfacher, einen Rand auf dem Feldsatz zu haben, der mit der Legende verschmilzt. Sie benötigen kein benutzerdefiniertes CSS, um dies zu erreichen. Dies kann folgendermaßen erfolgen:

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

das sieht so aus: Bootstrap 4 Fieldset und Legende

Joe Audette
quelle
w-auto ist nicht in Bootstrap 4.0 verfügbar, aber es ist verfügbar in 4.1+
dlauzon
19

Ich hatte dieses Problem und löste es folgendermaßen:

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;
}
Mohammad Aghayari
quelle
17

Ich hatte einen anderen Ansatz und benutzte das Bootstrap-Panel, um es etwas reicher zu zeigen. Nur um jemandem zu helfen und die Antwort zu verbessern.

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

Dies wird unten einen Blick geben. Geben Sie hier die Bildbeschreibung ein

Hinweis: Wir müssen die Stile ändern, um unterschiedliche Headergrößen zu verwenden.

Jajikanth pydimarla
quelle
7

Ich wollte nur alle richtigen Antworten oben kurz zusammenfassen. Weil ich viel Zeit aufwenden musste, um herauszufinden, welche Antwort das Problem löst und was sich hinter den Kulissen abspielt.

Es scheint zwei Probleme mit Fieldset mit Bootstrap zu geben:

  1. Das bootstrapsetzt die Breite auf legend100%. Deshalb überlagert es den oberen Rand des fieldset.
  2. Es gibt eine bottom borderfür die legend.

Um dies zu beheben, müssen Sie die Legendenbreite wie folgt auf auto setzen:

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