2015-03-25 8 views
9

Widzę dziwne zachowanie w Firefoksie w odniesieniu do pól wyboru formularza.Element wyboru formularza jest nieprawidłowo obcięty w przeglądarce Firefox

W zależności od szerokości rzutni, wybór przy, powiedzmy, szerokości 33.333% może czasami spowodować odcięcie jego prawej krawędzi.

enter image description here

proszę zobaczyć ten skrzypce na przykład: http://jsfiddle.net/pjv0adhw/

Co mam jest wyśrodkowany w poziomie kontenera nadrzędnego bezwzględną szerokości, zawierające select o szerokości frakcyjnej, tak:

.parent { 
    margin: 0 auto; /* centered on viewports > 1200px */ 
    width: 300px; 
} 
.select { 
    width: 33.333%; 
} 

uproszczony markup:

<body> 
    <div class="parent"> 
    <select class="select"> 
     <option>cat</option> 
     <option>dog</option> 
     <option>manatee</option> 
    </select> 
    </div> 
</body> 

Teraz, w przeglądarce Firefox, gdy szerokość okienka jest szersza niż 300 pikseli, a element .parent jest wyśrodkowany, select zaczyna zachowywać się dziwnie.

W równych szerokościach widoku (302px, 1326px) wszystko jest w porządku. Ale w dziwnych szerokościach rzutni (301px, 1317px), prawa krawędź zaznaczenia jest obcięta.

Widziałem to w przeglądarce Firefox 32-35. Inni dostawcy przeglądarek nie wydają się być dotknięci.

Ponadto dzieje się tak tylko wtedy, gdy option s są węższe niż .

Zgaduję, że to, co się dzieje, to, że jeśli szerokość lewej widocznej lewej strony jest liczbą nieparzystą, niektóre obliczenia dla właściwości margin: auto; zliczają półpiksele i powodują błędy zaokrąglania.

To, czego nie mogę zrozumieć, to to, jak marginesy na rodzicu mogą mieć jakikolwiek wpływ na jego dzieci, których ułamek szerokości, jak rozumiem, powinien zawsze być obliczany na podstawie absolutnej szerokości rodzica 300px .

Czy brakuje mi czegoś podstawowego na temat modelu pudełkowego, czy jest to po prostu błąd w Firefoksie? Czy istnieje znane rozwiązanie tego problemu, którego jeszcze nie wykopałem?

Na stronie internetowej box-sizing: border-box; nie ma żadnego wpływu na to zachowanie.

Odpowiedz

0

Ten problem has been reported to firefox, i nie jest to miłe obejście:

http://jsfiddle.net/pjv0adhw/10/

Grałem wokół niego trochę i wydaje się działać z kodem, który podałeś. Chodzi o to, aby ustawić pojemnik rozmiarów, a następnie uczynić sekcję tylko 99,99% jej szerokości. Coś takiego:

.sizing-container { width: *desiredwidth*; } 
.sizing-container section { width: 99.99%; } 

Próbowałem też wdrożyć ten kawałek kodu przeglądarki specyficzne:

-webkit-box-sizing: border-box; 
-moz-box-sizing: border-box; 
-ms-box-sizing: border-box; 
box-sizing: border-box; 

Ale jakoś w twoim przypadku to nie wydaje się, aby rozwiązać ten problem.

Mam nadzieję, że to pomogło, Andrew

2

DEMO

to łatwo rozwiązać za pomocą flexbox aby zmienić rozmiar select s

Oto zrzut ekranu biegł z firefox the border on the second select is not being cut anymore

HTML

<div> 
    <select class='flex-1'> 
     <option>abc</option> 
     <option>def</option> 
    </select> 
    <select class='flex-2'> 
     <option>cat</option> 
     <option>dog</option> 
     <option>manatee</option> 
    </select> 
    <span class='flex-3'></span> 
</div> 

CSS

* { 
    margin: 0; 
    outline: 0; 
    padding: 0; 
} 
div{ 
    margin: 5em auto; 
    padding: 1em; 
    width: 300px; 
    background-color: slategray; 
    display: flex; 
} 
[class*='flex']{ 
    flex-basis: 0; 
} 
.flex-1{ flex-grow: 1; } 
.flex-2{ flex-grow: 2; } 
.flex-3{ flex-grow: 3; } 

Więcej informacji na temat schematu flexbox here

0

Można spróbować:

.select { 
    width: calc(100%/3); 
} 
Powiązane problemy