2012-08-03 12 views
7

Miałem dziwny problem z przyciskiem i trochę CSS, zauważyłem, że zachowywał się tak, jakby był zgodny ze starym modelem skrzynek IE5, gdzie wysokość = wysokość + dopełnienie.Dlaczego HTML <buttons> jest zgodny ze starym modelem skrzynki IE5 we wszystkich nowoczesnych przeglądarkach?

Po pewnym przeglądania natknąłem this article która potwierdziła moje założenia, ale nie wyjaśnił, dlaczego tak jest.

Czy ktoś wie dlaczego wszystkich nowoczesnych przeglądarkach (Firefox, Chrome, IE9) traktować elementy Przycisk jak to? I czy ktoś wie o obejściu, aby elementy przycisków używały modelu pudełkowego, który (o ile wiem) kiedykolwiek używa inny element w tych przeglądarkach?

+1

To jest model skrzyni IE5, a nie IE6. IE6 ma działającą, aczkolwiek nieco błędną implementację standardowego modelu pudełkowego, który działa w trybie standardowym, podczas gdy IE5 nie ma go wcale. – BoltClock

+0

Jakiego "DOCTYPE" używasz? – Oded

+0

Sean

Odpowiedz

3

nigdy nawet sobie sprawę, że przyciski działają w ten sposób, ale ogólnie nie używać elementów wejściowych i zdecydować się na modzie div odpowiedników, ponieważ są one znacznie łatwiejsze do stylu i sprawiają, wyglądają tak samo we wszystkich przeglądarkach.

obejście aby skalować przyciski jak elementy div mogłoby być ustawiony atrybut box-sizing do content-box, która jest wartością domyślną dla div:

button, input[type=button], input[type=submit] 
{ 
    -webkit-box-sizing: content-box; 
    -moz-box-sizing: content-box; 
    box-sizing: content-box; 
} 

Here's an example on JSFiddle.

+1

Z 'box-sizing: context-box;' działało na IE9, Chrome 20, Opera 12 i Safari 5 (pc). I przez dodanie '-moz-box-sizing: content-box;' działa również w FF14. – some

+0

Działa we wszystkich z nich, ale w IE7! Dziękuję :) – Sean

0

<button> jest uważany jako znacznik inline, to naturalnie nie korzysta z W3C model blokowy.

To jest czysto logiczne, ale zgadzam się, całkowicie niepokojące. Chodzi teraz o to, dlaczego nie jest to uważane za tag blokowy?

button { 
 
    width: 100px; 
 
    padding: 0 30px; 
 
} 
 

 
#a { display: inline; } 
 
#b { display: block; } 
 
#c { display: inline; box-sizing: content-box; } 
 
#d { display: block; box-sizing: content-box; }
<button id="a">aaa</button> 
 
<button id="b">bbb</button> 
 
<button id="c">ccc</button> 
 
<button id="d">ddd</button>

+0

Umieszczanie przycisków obok siebie jest niezwykle powszechną praktyką projektową, więc ma sens, że domyślnie są one ustawione na "inline".Tak, 'inline-block' zachowałby wbudowaną naturę elementu, jednocześnie pozwalając mu na stylizację jak element blokowy, ale nie sądzę, aby jakikolwiek element był domyślny dla' inline-block'. – jackwanders

+0

Nie sądzę, że wyświetlanie linii wpływa na to, czy model pudełka ma wysokość = wysokość lub wysokość = dopełnienie + krawędź + wysokość – Sean

+0

. Wtedy znowu mógłbym być w błędzie, jestem pewien, że wiecie o tym więcej niż ja do (stąd pytanie!) – Sean

2

Najśmieszniejsze o tym pytaniem w tej chwili jest, że kilka osób z wyższej półki w społeczności JS/CSS zaczęła używać bardzo kompatybilną wersję tego modelu pudełkowego w swoich projektach produkcyjnych.

box-sizing : border-box uczyni większość nowoczesnych przeglądarek zachowują się jak wejść.
Patrz: Paul Irish - Border-Box FTW

Bezpośrednią korzyścią jest w stanie wyrównać wszystko się znacznie szybciej, bez konieczności grania z marginesów ujemnych, chyba że rzeczywiście zamierza zrobić nakładki z-index nie- fixed/nie- absolute elementów pozycjonowanych .

+0

Tak, słyszałem też coś podobnego, dopiero niedawno odkryłem stary model pudełkowy (IE5). Ten artykuł zdecydowanie wygląda interesująco, odłoży go na później! – Sean

Powiązane problemy