Gibt es eine Möglichkeit, dass eine Feldsatzbreite nur so breit ist wie die darin enthaltenen Steuerelemente?


80

Es scheint, dass die Feldmenge standardmäßig 100% der Breite ihres Containers beträgt. Gibt es eine Möglichkeit, dass das Feld so groß sein kann wie das breiteste Steuerelement innerhalb des Feldsatzes?

Antworten:


128

Verwenden display: inline-blockSie diese Option, obwohl Sie sie in einen DIV einwickeln müssen, damit sie nicht tatsächlich inline angezeigt wird. In Safari getestet.

<style type="text/css">
    .fieldset-auto-width {
         display: inline-block;
    }
</style>
<div>
  <fieldset class="fieldset-auto-width">
      <legend>Blah</legend>
      ...
  </fieldset>
</div>

4
Dies war die klarste Antwort für einen relativen n00b und löste mein identisches Problem. Vielen Dank.
Mawg sagt, Monica

Ja, dies ist eine bessere / einfachere Idee als meine Antwort, wenn sie in allen Browsern funktioniert, die Sie interessieren.
Tom

3
Zu display: inline-block;Ihrer Information : Funktioniert nicht in iE6 und IE7. Glücklich, wenn Sie sich nicht um sie kümmern müssen. :)
Diemo

Funktioniert hervorragend in IE8 und Firefox 10!
Ed Bayiates

Was ist der Voodoo mit dem Div. Es scheint notwendig, aber warum?
Superluminary

14

fieldset {display:inline} oder fieldset {display:inline-block}

Wenn Sie zwei Feldsätze vertikal trennen möchten, verwenden Sie ein einzelnes <br/>zwischen ihnen. Dies ist semantisch korrekt und nicht schwieriger als es sein muss.


für IE 11, Anzeige: Inline funktioniert, aber nicht Anzeige: Inline-Block
Gabe Halsmer

8

Sie könnten es schweben lassen, dann ist es nur so breit wie sein Inhalt, aber Sie müssen sicherstellen, dass Sie diese Schwimmer löschen.


1

Das funktioniert auch. 

fieldset {
  width:0px;
}

1
Dies funktioniert nicht, wenn Sie mehrere Elemente in der Feldmenge haben, die in derselben Zeile erscheinen sollen.
Matthew Schinckel

Sicher, wenn Sie ein Blockelement verwenden, um sie zu umbrechen, oder eine Kombination aus Nowrap und expliziten Unterbrechungen.
dan.s.ward

1

Leider funktioniert display:inline-blocknoch nicht width:0pxin Internet Explorer bis Version 8. Ich habe Internet Explorer 9 noch nicht ausprobiert. So sehr ich Internet Explorer ignorieren möchte, kann ich es nicht.

Die einzige Option, die unter Firefox und Internet Explorer 8 funktioniert, ist float:left. Der einzige kleine Nachteil ist, dass Sie daran denken müssen, clear:bothdas Element zu verwenden, das dem Formular folgt. Natürlich wird es sehr offensichtlich sein, wenn Sie vergessen ;-)


0

Sie können jederzeit CSS verwenden, um die Breite des Feldsatzes einzuschränken, wodurch auch die darin enthaltenen Steuerelemente eingeschränkt werden.

Ich finde, dass ich oft die Breite der selectSteuerelemente einschränken muss , sonst macht es wirklich langer Optionstext völlig unüberschaubar.


aber ich möchte es dynamisch haben, damit das Feldset "automatisch skaliert" und keine vorgegebene Breite hat
Leora

0
 fieldset {

    min-width: 0;

    max-width: 100%;

    width: 100%;
 }

3
Bitte fügen Sie einige
Erklärungen

Nicht einmal Tim Berners-Lee konnte dir sagen, warum diese Arbeit funktioniert, aber Scheiße funktioniert einfach lol danke!
Lucasjohnson

0

Versuche dies

<fieldset>
   <legend style="max-width: max-content;" >Blah</legend>
</fieldset>

-1

Ich habe mein Problem behoben, indem ich den Legendenstil wie folgt überschrieben habe

.ui-fieldset-legend
{
  font-size: 1.2em;
  font-weight: bold;
  display: inline-block;
  width: auto;`enter code here`
}

-2

Wenn Sie die Mihai-Lösung weiter verfolgen, ist der Browser linksbündig ausgerichtet:

<TABLE>
  <TR>
    <TD>
      <FORM>
        <FIELDSET>
          ...
        </FIELDSET>
      </FORM>
    </TD>
  </TR>
</TABLE>

Browserübergreifend rechtsbündig:

<TABLE>
  <TR>
    <TD WIDTH=100%></TD>
    <TD>
      <FORM>
        <FIELDSET>
          ...
        </FIELDSET>
      </FORM>
    </TD>
  </TR>
</TABLE>

2
Obwohl dies möglicherweise funktioniert, werden Tabellen normalerweise nicht als bewährte Methode
StackExchange What The Heck

1
Stellen Sie sich vor, dies für 5 Feldsätze zu tun? 10? 15??! Tu es nicht!
Taylor Brown

1
Für alle neuen Entwickler, die hierher kommen. Tu das nicht. Sie verwenden zehnmal mehr Code als Sie benötigen.
superluminary

-2
            <table style="position: relative; top: -0px; left: 0px;">
                <tr>
                    <td>
                        <div>   
                            <fieldset style="width:0px">
                                <legend>A legend</legend>
                                <br/>
                                <table cellspacing="0" align="left">
                                    <tbody>
                                        <tr>
                                            <td align='left' style="white-space: nowrap;">
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>
                            </fieldset>
                        </div>
                    </td>
                </tr>
            </table>

-3

Sie können das Feldset auch wie folgt in eine Tabelle einfügen:

<table>
    <tr>
       <td>
           <fieldset>
           .......
           </fieldset>
       </td>
    </tr>
</table>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.