ใช้ Fieldset Legend กับ bootstrap


174

ฉันใช้ 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-borderใน CSS และฉันได้รับผลลัพธ์ที่คาดหวัง แต่ปัญหาคือฉันต้องการเพิ่ม<fieldset>อีกฟิลด์หนึ่ง 100pxว่าเวลาความกว้างของข้อความในตำนานปัญหามันเป็นเวลานานกว่ากว่า

ดังนั้นฉันต้องทำอย่างไรเพื่อให้ได้ผลลัพธ์ตามที่ฉันได้กล่าวไว้ (โดยไม่ต้องโดดเด่นข้อความตำนาน)


รหัสที่คุณแบ่งปันดูเหมือนจะใช้ได้ดี นี่คือซอ
Menno

4
@Aquillo Fiddle ของคุณไม่ได้ใช้ Bootstrap
James Donnelly

1
สังเกต @JamesDonnelly มันมากเกินไปที่ว่านี้จะเกิดจากเงินทุน;)
โน

1
ฉันคิดว่าคุณควรพิจารณาใช้แผงของ Bootstrap มันมีพฤติกรรมที่คล้ายกันมากเช่น fieldset และ legend แต่มีสไตล์มากกว่า
Chandra Destiawan

คำตอบ:


222

นั่นเป็นเพราะ 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ซึ่งผลักมันเหนือเขต fieldset แทนที่จะวางไว้บนเส้น การตั้งค่าmargin-bottom: 0;บนกำหนดเองlegend.scheduler-borderคงที่ที่ง่าย
dtk

87

ใน bootstrap 4 มันง่ายกว่ามากที่จะมีเส้นขอบบน fieldset ที่กลมกลืนกับคำอธิบาย คุณไม่จำเป็นต้องใช้ CSS ที่กำหนดเองเพื่อให้บรรลุมันสามารถทำได้เช่นนี้:

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

ซึ่งมีลักษณะเช่นนี้: bootstrap 4 fieldset และคำอธิบายภาพ


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

แค่ต้องการสรุปคำตอบที่ถูกต้องทั้งหมดข้างต้นโดยย่อ เพราะฉันต้องใช้เวลามากในการหาคำตอบว่าจะแก้ไขปัญหาได้อย่างไรและเกิดอะไรขึ้นเบื้องหลัง

ดูเหมือนว่ามีสองปัญหาของ fieldset ที่มี bootstrap:

  1. การbootstrapตั้งค่าความกว้างlegendเป็น 100% fieldsetนั่นคือเหตุผลที่มันซ้อนทับเส้นขอบด้านบนของ
  2. มีสำหรับbottom borderlegend

ดังนั้นสิ่งที่เราต้องแก้ไขคือตั้งค่า width width เป็น auto ดังนี้:

legend.scheduler-border {
   width: auto; // fixes the problem 1
   border-bottom: none; // fixes the problem 2
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.