2009-11-09 3 views
27

Я работаю над веб-сайтом, который включает автоматическое заполнение окна выбора с использованием PHP-скрипта. Все это прекрасно работает, но проблема заключается в том, что то, что я использую для заполнения текстового поля, имеет очень длинные заголовки (это статьи журналов и заголовки презентаций). Выпадающий квадрат простирается до ширины самого длинного элемента, который простирается от края экрана, поэтому сделать полосу прокрутки невозможно. Я пробовал различные методы, пытаясь вручную установить раскрывающийся список с помощью CSS на определенную ширину, но до сих пор безрезультатно. Лучшее, что я сделал, чтобы установить поле «Выбор» на определенную ширину, но выпадающее меню само по себе намного шире.Установить ширину выпадающего элемента в HTML выберите раскрывающийся список

Любые советы по этому вопросу будут очень признательны.

EDIT:

Оказывается, что следующий CSS линия работает во всех основных браузерах для Google Chrome (который является то, что я тестировал страницу в), за исключением. Если решение для Chrome известно, об этом было бы полезно узнать.

select, option { width: __; } 

ответ

10

Вы можете стиль (хотя и с некоторыми ограничениями) сами фактические элементы с option селекторе:

select, option { width: __; } 

Таким образом, вы не только сдерживающим раскрывающийся, но и все его элементы ,

+1

Это то, что я уже пробовал, но я изначально тестировал его только на Chrome. Оказывается, это работает в Internet Explorer, Firefox, Safari и Opera. Поэтому я скажу, что это отвечает на вопрос, поскольку основной пользователь этой конкретной страницы (так как это часть административной части сайта) не использует Google Chrome. Если бы в Google Chrome был известный способ преодолеть это, это было бы хорошо услышать (также было бы неплохо, если бы все браузеры обрабатывали CSS одинаково. Я думал, что это будет более стандартизировано к настоящему времени). –

+0

Кроме того, спасибо за ridonkulously быстрый ответ! –

+0

Помните, что установка ширины набора элемента выбора не самая лучшая из идей, см.: Http://stackoverflow.com/questions/1700807/how-to-show-extended-option-in-select-list – anddoutoi

1

На стороне сервера:

  1. Определить максимальную длину строки
  2. Clip строка
  3. (по желанию) добавить горизонтальное многоточие

Альтернативного решения: выбор элемента в вашем случае (только гадание) - элемент управления с одним выбором, и вместо этого вы можете использовать группу переключателей. Тогда вы могли бы лучше стилизовать стиль. Если у вас есть выбор [@multiple], вы можете сделать то же самое с группой флажков, потому что оба они могут рассматриваться как элемент управления с несколькими вариантами выбора.

+0

Спасибо за ответ. Ваше первое решение - это то, о чем я думал, нужно было сделать, но надеялся, что будет более простой способ. Оказывается, до тех пор, пока вы игнорируете Chrome. –

15

Я считаю, что лучший способ обработки длинных выпадающих списков - разместить его в контейнере с фиксированной шириной div и использовать ширину: автоматически по тегу select. Большинство браузеров будут содержать раскрывающийся список в div, но когда вы нажмете на него, он будет расширяться, чтобы отобразить полное значение параметра. Он не работает с IE Explorer, но есть исправление (как всегда, необходимо с IE). Ваш код будет выглядеть примерно так.

HTML

<div class="dropdown_container"> 
    <select class="my_dropdown" id="my_dropdown"> 
    <option value="1">LONG OPTION</option> 
    <option value="2">short</option> 
    </select> 
</div> 

CSS

div.dropdown_container { 
    width:10px; 
} 

select.my_dropdown { 
    width:auto; 
} 

/*IE FIX */ 
select#my_dropdown { 
    width:100%; 
} 

select:focus#my_dropdown { 
    width:auto\9; 
} 
+3

Я сделал jsfiddle: http://jsfiddle.net/3BEtk/1/ (увеличенная ширина до 55 пикселей) – user984003

+1

Я тестировал аналогичный пример на Firefox 45.x, Chromium 39.x и IE 11.x и нуждался в ширине: 100% ' – LosManos

-5

Малый и лучше Один

var i = 0; 
$("#container > option").each(function(){ 
    if($(this).val().length > i) { 
     i = $(this).val().length; 

     console.log(i); 
     console.log($(this).val()); 
    } 
}); 
+0

Стиль должен быть выполнен в CSS, и это не меняет ширину выпадающего списка. –

0

Малый и лучший Один

#test{ 
width: 202px; 
} 
<select id="test" size="1" name="mrraja"> 
-2

и можно просто использовать «ширина» атрибут «стиль», чтобы изменить длину выпадающего списка

<select class="my_dropdown" id="my_dropdown" style="width:APPROPRIATE WIDTH IN PIXLES"> 
<option value="1">LONG OPTION</option> 
<option value="2">short</option> 
</select> 

например,

style="width:200px" 
2

HTML:

<select class="shortenedSelect"> 
    <option value="0" disabled>Please select an item</option> 
    <option value="1">Item text goes in here but it is way too long to fit inside a select option that has a fixed width adding more</option> 
</select> 

CSS:

.shortenedSelect { 
    max-width: 350px; 
} 

Javascript:

// Shorten select option text if it stretches beyond max-width of select element 
$.each($('.shortenedSelect option'), function(key, optionElement) { 
    var curText = $(optionElement).text(); 
    $(this).attr('title', curText); 

    // Tip: parseInt('350px', 10) removes the 'px' by forcing parseInt to use a base ten numbering system. 
    var lengthToShortenTo = Math.round(parseInt($(this).parent('select').css('max-width'), 10)/7.3); 

    if (curText.length > lengthToShortenTo) { 
     $(this).text('... ' + curText.substring((curText.length - lengthToShortenTo), curText.length)); 
    } 
}); 

// Show full name in tooltip after choosing an option 
$('.shortenedSelect').change(function() { 
    $(this).attr('title', ($(this).find('option:eq('+$(this).get(0).selectedIndex +')').attr('title'))); 
}); 

отлично работает. У меня была такая же проблема. Проверьте это JSFiddle http://jsfiddle.net/jNWS6/426/

Смежные вопросы