Seçim kutusunu biçimlendirmek mümkün mü? [kapalı]


145

Stil vermem gereken bir HTML seçim kutusu var. Ben sadece CSS kullanmayı tercih ederim ama eğer gerekirse ben boşlukları doldurmak için jQuery kullanacağım.

Herkes iyi bir eğitim veya eklenti önerebilir mi?

Biliyorum, Google, ama son iki saattir araştırıyorum ve ihtiyaçlarımı karşılayacak hiçbir şey bulamıyorum.

Bunun olması gerekir:

  • JQuery 1.3.2 ile uyumlu
  • ulaşılabilir
  • mütevazi
  • Seçme kutusunun her yönünü şekillendirme açısından tamamen özelleştirilebilir

İhtiyaçlarımı karşılayacak bir şey bilen var mı?


6
özelleştirilebilir bir açılır liste (jquery'de oluşturulmuş) istediğiniz anlamına geliyor, değil mi? çünkü seçim kutuları tarayıcı nesneleri bile değildir (bunlar platform nesneleridir), çok basit, çok ham ve çoğunu stil uygulayamazsınız (örneğin sınırları
biçimlendiremezsiniz

Güzel açıklama ve biçimlendirme için +1!
Manish

6
Seçilen bahsetmeye değer ama çok özelleştirilebilir değildir ve çok açık sorunları vardır. Yine de bakmak ve kullanmak güzel.
ücretli bir inek

1
@Ayyash Söyledikleriniz bazı sistemlerde (kesinlikle Mac OS) MSHTML (Internet Explorer ve arkadaşları) ve WebCore (Safari) için geçerlidir. Gecko (Firefox ve arkadaşları) için geçerli değil. Böylece asıl sorun, selectçapraz tarayıcı öğelerine stil uygulayamamanızdır . İnsanların farklılıklara ile yaşamaya istekli Ama eğer yapabilirsiniz onlara stil - dahil sınırları.
PointedEars

1
@PointedEras evet, 2012 yılında yapabilirler, ama 3 yıl önce söylediklerimi söylediğimde im im tahmin ediyorum, im emin o zaman bir atış verdi ve işe yaramadı
Ayyash

Yanıtlar:


45

Orada <select>'s <ol>' ve <option>'s ' dönüştürmek bazı jQuery eklentileri gördüm <li>, böylece CSS ile stil olabilir. Kendinizi almak çok zor olamazdı.

İşte bir tane: https://gist.github.com/1139558 ( Burada kullanılır , ancak site kapalı gibi görünüyor.)

Şöyle kullanın:

$('#myselectbox').selectbox();

Şöyle stil verin:

div.selectbox-wrapper ul {
  list-style-type:none;
  margin:0px;
  padding:0px;
}
div.selectbox-wrapper ul li.selected { 
  background-color: #EAF2FB;
}
div.selectbox-wrapper ul li.current { 
  background-color: #CDD8E4;
}
div.selectbox-wrapper ul li {
  list-style-type:none;
  display:block;
  margin:0;
  padding:2px;
  cursor:pointer;
}

Başlangıçta bu sürümü denedim ancak DIV, seçim kutusunun bulunduğu yere göre konumlandırılmadı. Bunun yerine sola doğru sert bir şekilde konumlandırılmıştır.

Bunu kendim kullanmadım. Demo ( brainfault.com/demo/selectbox/0.5 ) iyi görünüyor. Diğer uygulamalara bakın. Bunu yapan başka eklentiler gördüğümü biliyorum.
Mark A. Nicolosi

1
Bunu denedim ve sayfaya birden fazla koymak zorunda kalana kadar bir süre çalıştı. Şimdi stil vermek zor, çünkü bazı aptal nedenlerle yazar, benzersiz kimlikler veya sınıflar yerine tüm öğeler için aynı kimliği kullanmanın uygun olduğunu düşündü. Şimdi kendi yazmayı düşünüyorum ...
Jonathan

19
404 - aynaların olduğu bir fikir var mı?
Moak

2
Sadece seçili menü eklentilerinin ekran okuyucuları tarafından erişilemediğine dikkat edin. Henüz çalışan bir tane bulamadım.
Marcy Sutton

18

Güncelleme: 2013 yılı itibariyle kontrol etmeye değer gördüğüm ikisi:

  • Seçilmiş - github üzerinde bir sürü güzel şeyler, 7k + gözlemci. (yorumlarda 'ücretli inek' ile belirtilmiştir)
  • Select2 - Chosen'den esinlenerek, birkaç kullanışlı ince ayar ile Angular-UI'nin bir parçası.

Evet!


2012 itibariyle bulduğum en hafif ve esnek çözümlerden biri ddSlick . Siteden alakalı (düzenlenmiş) bilgiler:

  • Ekrana resim ve metin ekler select options
  • Seçenekleri doldurmak için JSON'u kullanabilir
  • Seçimde geri arama işlevlerini destekler

Ve işte çeşitli modların bir önizlemesi:

resim açıklamasını buraya girin


14

CSS'ye gelince, Mozilla özellikle FF 3.5+'den en dost gibi görünüyor. Webkit tarayıcıları çoğunlukla kendi şeylerini yapar ve herhangi bir stili görmezden gelir. IE çok sınırlıdır, ancak IE8 en azından kenarlık rengini / genişliğini şekillendirmenize izin verir.

Aşağıdakiler aslında FF 3.5+'de oldukça güzel görünüyor (elbette renk tercihinizi seçmek):

select {
    -moz-border-radius: 4px;
    -moz-box-shadow: 1px 1px 5px #cfcfcf inset;
    border: 1px solid #cfcfcf;
    vertical-align: middle;
    background-color: transparent;
}
option {
    background-color: #fef5e6;
    border-bottom: 1px solid #ebdac0;
    border-right: 1px solid #d6bb86;
    border-left: 1px solid #d6bb86;
}
option:hover {
    cursor: pointer;
}

Ancak IE söz konusu olduğunda, seçenek menüsü aşağı çekilmediğinde görüntülenmesini istemiyorsanız, seçenekte arka plan rengini devre dışı bırakmanız gerekir. Ve dediğim gibi, webkit kendi işini yapıyor.


11

Bunu yapmanın basit ve iyi bir yolunu bulduk. Çapraz tarayıcı, parçalanabilir ve form gönderisini bozmaz. Önce seçim kutusunun opaklığını 0 olarak ayarlayın.

.select { 
    opacity : 0;
    width: 200px;
    height: 15px;
}

<select class='select'>
    <option value='foo'>bar</option>    
</select>

bu hala üzerine tıklayabilirsiniz

Ardından seçim kutusuyla aynı boyutlara sahip div yapın. Div, arka plan olarak seçim kutusunun altına yerleştirilmelidir. Bunu başarmak için {position: mutlak} ve z-endeksini kullanın.

.div {
    width: 200px;
    height: 15px;
    position: absolute;
    z-index: 0;
}

<div class='.div'>{the text of the the current selection updated by javascript}</div>
<select class='select'>
    <option value='foo'>bar</option>    
</select>

Div'ın innerHTML'sini javascript ile güncelleyin. JQuery ile kolay kullanım:

$('.select').click(function(event)) { 
    $('.div').html($('.select option:selected').val());
}

Bu kadar! Seçim kutusu yerine div stilinizi oluşturun. Yukarıdaki kodu test etmedim, bu yüzden muhtemelen ayarlamanız gerekiyor. Ama umarım özü alırsın.

Bence bu çözüm {-webkit-view: none;} 'ı geçiyor. Tarayıcıların en çok yapması gereken, form öğeleriyle etkileşime girmektir, ancak kesinlikle site tasarımını bozduğu için sayfalarda nasıl göründüklerini değil.


10

Eğer çoğunlukla istiyorsanız küçük bir fiş

  • çılgın Özelleştirme gitmek kapalı durumu aselect öğenin
  • ancak açık durumda , toplama seçeneklerinde (kaydırma tekerleği, ok tuşları, sekme odağı, ajax değişiklikleri) daha iyi bir yerel deneyim tercih edersinizoptions , uygun zindex vb.) edersiniz.
  • dağınık ul, lioluşturulan işaretlemeleri sevmemek

O zaman jquery.yaselect.js daha uygun olabilir . basitçe:

$('select').yaselect();

Ve son işaretleme:

<div class="yaselect-wrap">
  <div class="yaselect-current"><!-- current selection --></div>
</div>
<select class="yaselect-select" size="5">
  <!-- your option tags -->
</select>

Bunu github.com'da kontrol edin


harika ve mobil cihazlarda da çalışıyor :)
uçan koyun

IOS üzerinde çalışır. üzgünüm, android vb erişim yok?
choonkeat

1
bu bir soru değildi, övgü. o yapar benim android üzerinde çalışma cezası.
uçan koyun

5

Kendi başına CSS ile bir dereceye kadar stil yapabilirsiniz

select {
    background: red;
    border: 2px solid pink;
}

Ancak bu tamamen tarayıcıya bağlıdır. Bazı tarayıcılar inatçıdır.

Ancak, bu sadece sizi şimdiye kadar alacak ve her zaman çok iyi görünmüyor. Tam kontrol için, bir seçimi jQuery ile bir seçim kutusunun işlevselliğini taklit eden kendi widget'ınızla değiştirmeniz gerekir. JS devre dışı bırakıldığında, yerine normal bir seçim kutusunun yerleştirildiğinden emin olun. Bu, daha fazla kullanıcının formunuzu kullanmasına olanak tanır ve erişilebilirliğe yardımcı olur.




2

JQuery olmadan bir çözüm varsa. Çalışan bir örnek görebileceğiniz bir bağlantı: http://www.letmaier.com/_selectbox/select_general_code.html (daha fazla css ile biçimlendirilmiş)

Çözümümün stil bölümü:

<style>
#container { margin: 10px; padding: 5px; background: #E7E7E7; width: 300px; background: #ededed); }
#ul1 { display: none; list-style-type: none; list-style-position: outside; margin: 0px; padding: 0px; }
#container a {  color: #333333; text-decoration: none; }
#container ul li {  padding: 3px;   padding-left: 0px;  border-bottom: 1px solid #aaa;  font-size: 0.8em; cursor: pointer; }
#container ul li:hover { background: #f5f4f4; }
</style>

Şimdi body-tag içindeki HTML kodu:

<form>
<div id="container" onMouseOver="document.getElementById('ul1').style.display = 'block';" onMouseOut="document.getElementById('ul1').style.display = 'none';">
Select one entry: <input name="entrytext" type="text" disabled readonly>
<ul id="ul1">
    <li onClick="document.forms[0].elements['entrytext'].value='Entry 1'; document.getElementById('ul1').style.display = 'none';"><a href="#">Entry 1</a></li>
    <li onClick="document.forms[0].elements['entrytext'].value='Entry 2'; document.getElementById('ul1').style.display = 'none';"><a href="#">Entry 2</a></li>
    <li onClick="document.forms[0].elements['entrytext'].value='Entry 3'; document.getElementById('ul1').style.display = 'none';"><a href="#">Entry 3</a></li>
</ul>
</div>
</form>

Lütfen yalnızca biriyle bağlantı kurmak yerine bir örnek verin.
Tüm İşçiler

Cevabını istediğin gibi değiştirdim.
Christoph Letmaier

1
Şimdi çok daha iyi görünüyor. BTW, çalışan bir örneğe veya bir örneği gösteren bir kaynağa bağlantı vermede yanlış bir şey yoktur (oldukça yararlı olabilir). Ancak kaçınılmaz olarak bağlantılar zamanla geçersiz hale gelir, bu nedenle yararlı bağlantılar sağlansa bile yanıtın kendisinde (sağladığınız) her zaman gerekli bilgileri sağlamak istenir.
Tüm İşçiler

Tamam, anlaşıldı ... :-) Bağlantıyı canlı tutmak için elimden geleni yapacağım ...
Christoph Letmaier

2

2014 için güncellendi: Bunun için jQuery gerekmez . StyleSelect'i kullanarak bir seçim kutusunu jQuery olmadan tamamen biçimlendirebilirsiniz . Örneğin, aşağıdaki seçim kutusu verildiğinde:

<select class="demo">
  <option value="value1">Label 1</option>
  <option value="value2" selected>Label 2</option>
  <option value="value3">Label 3</option>
</select>

Çalıştırılması styleSelect('select.demo'), aşağıdaki gibi tarzlı bir seçim kutusu oluşturur:

resim açıklamasını buraya girin


Yan not, IE9 ve altı için destek yok
Ben Sewards

1

Birkaç gün önce jQuery eklentisi SelectBoxIt'i oluşturdum . Normal bir HTML seçim kutusunun davranışını taklit etmeye çalışır, ancak jQueryUI kullanarak seçim kutusunu stilleştirmenize ve canlandırmanıza izin verir. Bir göz atın ve ne düşündüğünüzü bana bildirin.

http://www.selectboxit.com





-1

Basit çözüm, seçim kutunuzu div içinde çözgü yapın ve div tasarımınıza uygun şekilde şekillendirin. Opaklığı ayarla: 0 kutuyu seçmek için, seçim kutusunu görünmez yapar. JQuery ile bir span etiketi ekleyin ve kullanıcı açılır değeri değiştirirse değerini dinamik olarak değiştirin. Bu öğreticide kod açıklamasıyla birlikte gösterilen toplam gösterim . Sorununuzu çözeceğini umuyoruz.

JQuery Kodu buna benzer.

 <script>
   $(document).ready(function(){
     $('.dropdown_menu').each(function(){
       var baseData = $(this).find("select option:selected").html();
       $(this).prepend("<span>" + baseData + "</span>");
     });

     $(".dropdown_menu select").change(function(e){
       var nodeOne = $(this).val();
       var currentNode = $(this).find("option[value='"+ nodeOne +"']").text();
       $(this).parents(".dropdown_menu").find("span").text(currentNode);
     });
   });
</script>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.