2010-02-20 13 views

risposta

109

Usa display: inline-block, anche se è necessario avvolgerlo in un DIV per evitare che in realtà la visualizzazione in linea. Testato in Safari.

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

Questa è stata la risposta più chiara per un n00b relativa e risolto il mio problema identico. Grazie. – Mawg

+0

Funziona con FF3.6 –

+0

Sì, questa è un'idea migliore/più semplice della mia risposta se funziona su tutti i browser che ti interessano. – Tom

0

È sempre possibile utilizzare CSS per limitare la larghezza del fieldset, che vincolerebbe anche i controlli interni.

Trovo che debba spesso limitare la larghezza dei controlli select, altrimenti il ​​testo di opzione veramente lungo lo renderà totalmente ingestibile.

+0

ma voglio avere dinamico in modo fieldset sarà "autosize" e non essere una larghezza predeterminata – leora

8

Si potrebbe galleggiare, poi sarà solo essere il più ampio il suo contenuto, ma si dovrà fare in modo di cancellare quei carri allegorici.

12

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

Se si vuole separare due fieldsets in verticale, utilizzare un unico <br/> tra di loro. Questo è semanticamente corretto e non più difficile di quanto deve essere.

+0

per IE 11, display: in linea funzionante, ma non visualizzato: blocco in linea –

0

Questo funziona anche.  

fieldset { 
    width:0px; 
} 
+1

Questo non funziona se si dispone di più elementi all'interno del fieldset che dovrebbero apparire sulla stessa riga. –

+0

Certo, se si utilizza un elemento di blocco per avvolgerli o una combinazione di intervalli temporali e espliciti. –

1

Purtroppo né display:inline-blockwidth:0px opere in Internet Explorer   fino alla versione 8. Non ho provato Internet Explorer     9. Per quanto vorrei ignorare Internet Explorer  , non posso.

L'unica opzione che funziona su Firefox e Internet   Explorer   8 è float:left. L'unico piccolo inconveniente è che devi ricordare di usare clear:both sull'elemento che segue il modulo. Naturalmente, sarà molto evidente se si dimentica ;-)

-2

Si può anche mettere il fieldset all'interno di una tabella, in questo modo:

<table> 
    <tr> 
     <td> 
      <fieldset> 
      ....... 
      </fieldset> 
     </td> 
    </tr> 
</table> 
-2

Proseguendo di soluzione di Mihai, cross-browser allineato a sinistra:

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

Cross-browser destro allineato:

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

Anche se questo potrebbe funzionare, le tabelle non sono generalmente considerate buone pratiche per i layout ... http: //stackoverflow.com/questions/83073/why-not-use-tables-for-layout-in-html – yochannah

+0

Immagina di fare questo per 5 campi? 10? 15 ??! non farlo! –

+0

Per eventuali nuovi sviluppatori che arrivano qui. Non farlo. Utilizzerai 10 volte più codice di quello che ti serve. – 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> 
-1

Ho risolto il mio problema con sostituzione di stile leggenda come qui sotto

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