Kaydırma çubuğu olmayan seçeneklere uyacak şekilde yüksekliğini ayarlamak için çoklu seçim yapın


104

Görünüşe göre bu işe yaramıyor:

   select[multiple]{
     height: 100%;
   }

seçimin% 100 sayfa yüksekliğine sahip olmasını sağlar ...

auto da çalışmıyor, hala dikey kaydırma çubuğunu alıyorum.

Başka fikir var mı?

görüntü açıklamasını buraya girin


1
Sanırım biraz javascript kullanmak zorunda kaldın. Bir seçim kutusunun yalnızca css'i içeriği içerecek şekilde otomatik olarak uzatılmasının bir yolu olduğuna inanmıyorum.
random_user_name

Yanıtlar:


148

Sanırım sizeözniteliği kullanabilirsiniz . Tüm yeni tarayıcılarda çalışır.

<select name="courses" multiple="multiple" size="30" style="height: 100%;">

2
Merhabalar, Bunun işe yaramama sorusunda belirtilenden farkı nedir?
Yerçekimi

2
Merhaba, boyut özelliğini içerdiği için farklı. İlk soru yalnızca yükseklik özelliğiyle ilgilidir
Alex

2
Ah tamam. Aslında kutuyu içeriğin boyutuna küçültmez, sayı boyutu değerini manuel olarak ayarlamanız gerekir; bu, kaç seçenek olduğunu biliyorsanız, ancak dinamik sayıda seçenek varsa daha fazla sorun olduğunu biliyorsanız sorun olmaz. . Bu durumda, kutuyu doldurduğunuzda boyut özelliğini yeniden boyutlandırmanız gerekir. Şimdi anlıyorum, açıkladığınız için teşekkürler.
Yerçekimi

20
Ah, hadi ama! Sunucuda "dolduruyorsanız", kaç tane olacağını bilirsiniz. Ve AJAX kullanarak "doldurabilirseniz", mütevazı bir özniteliği değiştirmek zor olmayacaktır. "Doldurduktan" sonra JS'deki seçenekleri sayabilirsiniz.
Tomasz Gandor

1
İşe yaradı, ancak aynı zamanda boyuta göre <select> yüksekliği arttı ve sonuç olarak düzenimi bozdu. ; (-
shubham

67

Bunu size, selectetiketindeki özniteliği kullanarak yapabilirsiniz . 8 seçeneğiniz olduğunu varsayarsak, bunu şöyle yaparsınız:

<select name='courses' multiple="multiple" size='8'>

İşe yaradı, ancak aynı zamanda boyuta göre <select> yüksekliği arttı ve sonuç olarak düzenimi bozdu. ; (
shubham

css'de bu değer nasıl belirtilir?
Lei Yang

29

Eski, ancak bu, jQuery'ye ihtiyaç duymadan peşinde olduğunuz şeyi yapacak. Gizli taşma kaydırma çubuğundan kurtulur ve javascript onu doğru boyuta getirir.

<select multiple='multiple' id='select' style='overflow:hidden'>
<option value='foo'>foo</option>
<option value='bar'>bar</option>
<option value='abc'>abc</option>
<option value='def'>def</option>
<option value='xyz'>xyz</option>
</select>

Ve çok az miktarda javascript

var select = document.getElementById('select');
select.size = select.length;

13

JQuery için bunu deneyebilirsiniz. Ben her zaman aşağıdakileri yapıyorum ve işe yarıyor.

$(function () {
   $("#multiSelect").attr("size",$("#multiSelect option").length);
});

10

Bunu yalnızca Javascript / JQuery'de yapabilirsiniz, aşağıdaki JQuery ile yapabilirsiniz (seçiminize çoklu seçim kimliği verdiğinizi varsayarak):

$(function () {
    $("#multiSelect").css("height", parseInt($("#multiSelect option").length) * 20);
});

Demo: http://jsfiddle.net/AZEFU/


16
Sıra yüksekliğine güvenmeden aynı fikir:$('select.expandable').each(function() { $(this).attr('size', $(this).find('option').length) })
Francesc Rosas

2
@ FrancescRosàs Mükemmel! Yazık ki, bunun kabul edilen cevap olmak yerine bir yoruma gömülmesi.
Nick

5

Sorunun eski olduğunu biliyorum ama konu nasıl kapanmazsa yardım edeceğim.

"Beden" özelliği sorununuzu çözecektir.

Misal:

<select name="courses" multiple="multiple" size="30">

2
Seçimde her zaman 30 seçenek olması şartıyla.
Anders Lindén

5

selectoptgroupher biri bir satır alan içerebilir :

<select id="list">
  <optgroup label="Group 1">
    <option value="1">1</option>
  </optgroup>
  <optgroup label="Group 2">
    <option value="2">2</option>
    <option value="3">3</option>
  </optgroup>
</select>
<script>
  const l = document.getElementById("list")
  l.setAttribute("size", l.childElementCount + l.length)
</script>

Bu örnekte toplam size olup (1+1)+(1+2)=5.


Yukarıdaki cevapların ikisi de teknik olarak doğrudur, ancak bu daha ilginç cevaptır.
russellmania

Listede kaç öğenin görüneceğini bilmediğim için bu yanıtı tercih ediyorum. Ama ben sadece şunu ayarlıyorum: l.setAttribute ('size', l.childElementCount +1); (yukarıdaki kodda gösterildiği gibi uzunluğu iki katına
çıkarmayın

@RobertAchmann İki katı büyüklükte değil. <optgroup>S ve <option>s sayılarını toplar .
Andrii Nemchenko

3

Bunu basit bir javascript ile yapabilirsiniz ...

<select multiple="multiple" size="return this.length();">

... veya kayıt sayısına kadar yüksekliği sınırlayın ...

<select multiple="multiple" size="return this.length() > 10 ? this.length(): 10;">

Görünüşe göre bu artık çalışmıyor. İşim etrafta $('#firstSelect').attr('size', $('#firstSelect').length);. Şu
kemana

3

Kaydırma çubuğunu kaldırmak için aşağıdaki CSS'yi ekleyin:

select[multiple] {
    overflow-y: auto;
}

İşte bir pasaj:

select[multiple] {
  overflow-y: auto;
}
<select>
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>

<select multiple size="3">
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>


1

Size özelliğini kullanmak en pratik çözümdür, ancak yalnızca iki veya üç seçeneğe sahip öğelerin seçilmesine uygulandığında tuhaflıklar vardır .

  • Boyut özelliği değerinin "0" veya "1" olarak ayarlanması, çoğunlukla varsayılan bir seçim öğesi (açılır menü) oluşturur.
  • Boyut özniteliğinin "1" den daha büyük bir değere ayarlanması, çoğunlukla en az dört öğeyi görüntüleyebilen bir yüksekliğe sahip bir seçim listesi oluşturacaktır. Bu, istenmeyen beyaz boşluğa neden olan yalnızca iki veya üç öğe içeren listeler için de geçerlidir.

Basit JavaScript, size özniteliğini otomatik olarak doğru değere ayarlamak için kullanılabilir , örneğin bu kemana bakın .

$(function() {
    $("#autoheight").attr("size", parseInt($("#autoheight option").length)); 
});

Yukarıda bahsedildiği gibi, bu çözüm yalnızca iki veya üç seçenek olduğunda sorunu çözmez.


1
Bu çözüm jQuery gerektirir ve bu nedenle bence "basit JavaScript" değildir. Ayrıca, bu kodu zaten daha önceki cevaplarında gösterilmiştir ..
sap

0

arkadaşlar: bir veritabanından de veri alırsanız: bunu $ registers = * _num_rows (Result_query) olarak çağırabilirsiniz

<select size=<?=$registers + 1; ?>"> 

0

Yakın zamanda bu şartı aldım ve bu komut dosyasını oluşturmak için bu sorudaki diğer gönderileri kullandım:

$("select[multiple]").each(function() {
  $(this).css("height","100%")
    .attr("size",this.length);
})

0

Tüm çoklu seçimlerin boyutunu (yüksekliğini) seçenek sayısına göre ayarlamak için jQuery'yi kullanın:

$('select[multiple = multiple]').each(function() {
    $(this).attr('size', $(this).find('option').length)
})

0

Önce seçenek etiketini sayabilir ve ardından boyut özelliği için sayımı ayarlayabilirsiniz. Örneğin, PHP'de diziyi sayabilir ve ardından dizi için bir foreach döngüsü kullanabilirsiniz.

<?php $count = count($array); ?>
<select size="<?php echo $count; ?>" style="height:100%;">
<?php foreach ($array as $item){ ?>
    <option value="valueItem">Name Item</option>
<?php } ?>
</select>

-1

Bir seçim kutusunun işlenme şekli tarayıcının kendisi tarafından belirlenir. Böylece her tarayıcı size seçenek listesi kutusunun yüksekliğini başka bir yükseklikte gösterecektir. Bunu etkileyemezsin. Bunu değiştirmenin tek yolu, sıfırdan kendi seçiminizi yapmaktır.


-1

Laravel topluluğunda oldukça popüler olan örnek bir paket kullanımı:

{!! Form::select('subdomains[]', $subdomains, null, [
    'id' => 'subdomains',
    'multiple' => true,
    'size' => $subdomains->count(),
    'class' => 'col-12 col-md-4 form-control '.($errors->has('subdomains') ? 'is-invalid' : ''),
]) !!}

Paket: https://laravelcollective.com/


1
Bu Laravel değil, bu bir Laravel paketi.
duygusallık

1
Düzelttiğiniz için teşekkürler. Gönderiyi güncelleyeceğim.
Sinan Eldem
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.