2011-11-10 11 views
12

Google Chrome sembra avere un bug quando si riempie il contenuto all'interno di un fieldset.Google Chrome - Errore di overflow del fieldset

Ecco un jsfiddle che illustra il problema: http://jsfiddle.net/Dismissile/Lnm42/

Se si guarda alla pagina, vedrai che quando si dispone di un contenitore all'interno di un fieldset, e il contenitore ha overflow: auto insieme, e che il contenitore ha contenuti che traboccherà orizzontalmente, fieldset effettivamente espande invece di utilizzare una barra di scorrimento:

<fieldset class="parent"> 
    <div class="child"> 
     <div class="grandchild"> 
      asdf 
     </div> 
    </div> 
</fieldset> 

<div class="parent"> 
    <div class="child"> 
     <div class="grandchild"> 
      asdf 
     </div> 
    </div> 
</div> 

CSS:

.parent { 
    border: 1px solid green; 
    padding: 20px; 
    margin: 20px; 
} 

.child { 
    border: 1px solid red; 
    padding: 20px; 
    overflow: auto; 
} 

.grandchild { 
    border: 1px solid #ccc; 
    width: 2000px; 
    padding: 10px; 
} 

C'è una correzione/correzione CSS che posso utilizzare in modo che il contenuto esca correttamente quando si trova in un fieldset in Chrome?

risposta

1

Utilizzando JavaScript per impostare la larghezza della finestra:

ho aggiunto una classe chiamata fieldset-width al fieldset:

<fieldset class="parent fieldset-width">

Poi ha aggiunto questo codice JQuery:

$(document).ready(function() { 
    $(".fieldset-width").css("width", $(window).width() - 82); 
}); 

$(window).resize(function() { 
    $(".fieldset-width").css("width", $(window).width() - 82); 
}); 

Il mio unico commento è che non riesco a pensare a un buon motivo per interferire con la funzionalità di default fieldset. Non mi piace "barre di scorrimento all'interno delle barre di scorrimento" per cominciare. Per i campi di input, che solitamente i fieldets circondano, sarei particolarmente cauto nel far scorrere l'utente per raggiungere tutti i campi di input.

+0

Già non si scherza con la funzionalità fieldset via JS, per una cosa che avete che 82px arbitrario in là più il vostro gestore di ridimensionamento può correre lento su pagine con DOM pesanti poiché non è limitato. Usa 'min-width: auto' invece per risolvere questo problema (Chrome usa' -webkit-min-content' di default), per verificare questo click-destro sull'elemento fieldset e usare "inspect element" e visualizzare "lo stile calcolato" quindi si noti la proprietà "min-width" definita nel foglio di stile dell'agente utente. – nothingisnecessary

+0

** AGGIORNAMENTO: ** 'min-larghezza: auto' non funziona più. Usa 'min-width: inherit' invece. Vedi la mia risposta suggerita per i dettagli. – nothingisnecessary

1

Utilizzo di uno pseudo fieldset (ovvero <div class="fieldset"></div>) Credo che tu possa avvicinarti. Vedi jsfiddle.

Prova questo stile:

fieldset,.fieldset { 
    margin: 10px; 
    border: solid 1px black; 
    position: relative; 
    padding: .5em; 
} 

.legend { 
    left: 0.5em; 
    top: -0.6em; 
    color: black; 
    position: absolute; 
    background-color: white; 
    padding: 0 0.25em 0 0.25em; 
} 

E 'proprio l'ideale come fieldset stile ha bisogno di essere duplicato, ma per me è stato l'unica soluzione accettabile al mio scontro con questo problema che ho potuto venire con. Come sopra, potresti essere in grado di applicare lo stile del fieldset esistente allo pseudo.

11

UPDATE:

A partire da una recente Chrome per aggiornamento MS Windows (V28 forse non hanno ancora rintracciato giù?), auto non è più un valore valido per min-width, e questa soluzione non funziona più !

Nuova soluzione:

Utilizzando inherit invece di auto sembra risolvere il problema per tutti i casi che ho provato finora. (Compreso il violino originale .. per dettagli vedi the new fiddle fix.)

La correzione aggiornata: FIELDSET {min-width: inherit; }

risposta originale:

Chrome definisce per fieldset lo stile user agent di default: min-width: -webkit-min-content.

Così quando la tua area visibile (ovvero "schermo") è più piccola del tuo div con larghezza specifica, lo -webkit-min-content aumenta il fieldset per adattarsi alle dimensioni del contenuto (più padding, ecc.).

La correzione: FIELDSET { min-width: auto; }

ho fissato il vostro violino, try it out!

+0

Questa è la migliore risposta finora. –

+0

Questo ha aiutato molto, grazie! Volevo solo aggiungere se vuoi tagliare il contenuto all'interno del fieldset, puoi aggiungere "overflow: auto;" ma questo potrebbe non essere l'approccio migliore in tutte le situazioni, come altri hanno menzionato. – renfredxh

0

È possibile aggiungere style = "display: table-column;" al fieldset come soluzione alternativa.