2015-03-25 17 views
9

'da hatalı şekilde kesildi Firefox'ta seçme alanları oluşturma konusunda bazı garip davranışlar görüyorum.Form seçme öğesi, Firefox

Vitrin genişliğine bağlı olarak, 33.333% genişliğinde bir seçim, bazen doğru kenarlıklarının kesilmesine neden olacaktır. , Kesirli genişliğe sahip bir seçme içeren, http://jsfiddle.net/pjv0adhw/

Ne var mutlak genişlikte bir yatay merkezli üst kapsayıcı olduğunu şöyle:

enter image description here

bir örnek için bu keman bakın

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

Basitleştirilmiş işaretleme:

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

Şimdi, Firefox'ta, görünüm genişliği 300 pikselden daha geniş ve .parent öğesi ortalandığında, select tuhaf şekilde davranmaya başlar.

Görüntü genişliklerinde bile (302px, 1326px), her şey yolunda. Ancak garip viewport genişliklerinde (301px, 1317px), seçimin sağ sınırı kesiliyor.

Bunu Firefox 32-35'de gördüm. Diğer tarayıcı satıcıları etkilenmiyor gibi görünüyor.

Ayrıca, bu yalnızca option s select'dan daha dar olduğunda olur.

Şu durumda, soldaki görüntü alanı genişliğinin tek bir sayı olması durumunda, margin: auto; özelliğinin bazı hesaplamalarının yarım piksel sayıldığını ve yuvarlama hataları oluşturduğunu tahmin ediyorum.

Anlayamadığım şey, ebeveyn üzerindeki marjların çocuklarında herhangi bir etkiye sahip olup olmadığının, fraksiyonel genişliğinin, anladığım kadarıyla, her zaman ebeveynin 300px mutlak genişliğine göre hesaplanması gerektiğidir. .

Kutu modeliyle ilgili temel bir şey eksik mi, yoksa bu sadece Firefox'ta bir hata mı? Bu konu için henüz kazılmadığım bilinen bir çözüm var mı?

Bir sidenote üzerinde, box-sizing: border-box; bu davranış üzerinde herhangi bir etkisi yok gibi görünüyor.

cevap

0

Bu sorun has been reported to firefox ve güzel bir çözümü vardır: Ben onun etrafında biraz oynamış ve bu sağlanan kodu ile çalışıyor görünüyor

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

. Mesele, bir boyutlandırma konteyneri ayarlamak ve daha sonra genişliğini sadece% 99.99 oranında bölüm yapmaktır. Böyle bir şey: Ben de tarayıcıya özel kod bit uygulamaya çalışmıştır

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

:

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

Ama her nasılsa sizin durumunuzda bu sorunu çözmek için görünmüyordu.Ben yardımcı umut

Andrew

2

DEMO

Bu kolayca select s

burada bir ekran yeniden boyutlandırmak için flexbox kullanılarak çözüldü firefox kaçtı 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; } 
flexbox'a hakkında

fazla bilgi here

0

Bu deneyebilirsiniz:

.select { 
    width: calc(100%/3); 
}