Storicamente abbiamo appreso utilizzare width
anziché left & right
perché IE6 non supporta contemporaneamente le due proprietà dello stesso asse
<div style="top:0;bottom:0;position:absolute;">modern browsers</div>
<div style="top:0;height:100%;position:absolute;">MSIE6</div>
<div style="left:0;right:0;position:absolute;">modern browsers</div>
<div style="left:0;width:100%;position:absolute;">MSIE6</div>
<div style="left:0;right:0;top:0;bottom:0;position:absolute;">modern browsers</div>
<div style="left:0;top:0;height:100%;width:100%;position:absolute;">MSIE6</div>
Inoltre, questa tecnica non funziona su alcuni elementi (including on modern browsers, by spec)
<!-- these will not work -->
<!-- edit: on some browsers they may work,
but it's not standard, so don't rely on this -->
<iframe src="" style="position:absolute;top:0;bottom:0;left:0;right:0;"></iframe>
<textarea style="position:absolute;top:0;bottom:0;left:0;right:0;"></textarea>
<input type="text" style="position:absolute;left:0;right:0;">
<button ... ></button>
and possibly others... (some of these can't even be display:block)
Ma, analizzando ciò che accade nel flusso statica normale usando l'012.357.proprietà
<div style="width:auto;padding:20px;margin:20px;background:lime;">a</div>
vedrete che è molto simile a ...
<div style="width:auto;padding:20px;margin:20px;background:lime;
position:absolute;top:0;left:0;bottom:0;right:0;">b</div>
... stesse proprietà con gli stessi valori! Questo è veramente bello! Altrimenti avrà il seguente aspetto:
Quale è anche diverso, perché il div interno non riempie l'asse y. Per risolvere questo problema abbiamo bisogno del css calc()
o box-sizing
e di un inutile mal di testa.
La mia risposta è, left + right | top + bottom
sono davvero cool dal momento che sono più vicini al statica posizionamento di width:auto
e non v'è alcuna ragione per non usarli. Sono molto più facili da usare rispetto all'alternativa e forniscono molto più funzionalità (ad esempio, utilizzando margin-left
, padding-left
e left
allo stesso tempo in un singolo elemento).
left + right | top + bottom
è notevolmente meglio supportato dai browser rispetto all'alternativa width:100% + box-sizing | calc()
ed è anche più facile da usare!
Naturalmente se non avete bisogno (come nel tuo esempio) per far crescere l'elemento anche nell'asse y, width:100%
utilizzando qualche elemento nidificato per l'imbottitura, è l'unica soluzione per archiviare il supporto anche per MSIE6
Quindi, dipende dalle vostre esigenze. Se vuoi supportare MSIE6 (è l'unica vera ragione per farlo) dovresti usare with:100%
, altrimenti usa left + right
!
Sperando di essere utile.
Utilizzare 'left: 0' e' right: 0' funzionerà in tutti i browser, tranne IE6 (e IE7 senza il doctype corretto). Direi di andare con 'left' e' right', dal momento che è più semplice mantenere il codice a lungo termine (ad esempio cambiando la dimensione del contenitore). – BenM
Non mi preoccuperei più del supporto IE6 ... – Xarcell
Un sacco di gente è ancora costretta a utilizzare IE6 al lavoro, quindi dipende davvero dall'implementazione e dal target di riferimento – Baumr