Select css line heights

Кастомизируем select на чистом css

Как-то вечером я убивал время, читая статьи в интернете, и наткнулся на вот этот хабропост пользователя Cyapa, где расписано, как кастомизировать select на чистом css. В процессе просмотра данного решения нашел несколько весьма неудобных моментов, которые постарался исправить в своем решении этой задачи. Итак, приступим.

Пока смотрел код того поста, заметил, что автор сделал селект, который невозможно закрыть при клике вне его, а также невозможность открыть селект при клике на название элемента, если оно уже выбрано.

В своем варианте кастомизации я, так же как и предыдущий автор, использовал label, input[type=«radio»] и мощь css-селекторов. Так как сам селект средствами css полностью кастомизировать нереально, я имитировал поведение селекта.

Для начала, я накидал вот такую разметку:

   

При просмотре данного кода у вас мог возникнуть вопрос: «Почему у всех инпутов одинаковое имя?». Отвечу сразу: это сделано для того, чтобы наш селект адекватно вел себя(открывался и закрывался тогда, когда нужно). Но обо всем по порядку. Давайте перейдем к самой интересной, на мой взгляд, части — css.

/* скрываем все инпуты, чтобы все выглядело красиво */ input < display: none; >/* стилизуем стандартный текст лейбела(желательно смотреть этот стиль после .items) */ #text < position: absolute; display: block; top: 0; padding-left: 10px; >/* Задаем параметры нашего селекта - ширину, высоту и line-height(для центрирования текста по вертикали;этот парметр меньше ширины на 4px, т.к. в нашем блоке есть border размером в 2px со всех сторон) */ .select < display: inline-block; width: 160px; height: 34px; line-height: 30px; position: relative; >/* Это наша стрелочка, показывающая, что селект можно раскрыть */ .select:before < content: ">"; display: inline-block; background: white; position: absolute; right: -5px; top: 2px; z-index: 2; width: 30px; height: 26px; text-align: center; line-height: 26px; border: 2px solid #ddd; transform: rotate(90deg); cursor: pointer; > /* Если ничего не выбрано, то наш изначальный текст черного цвета, как и должно быть */ .select input[name="list"]:not(:checked) ~ #text < color: black; background: white; >/* Если же что-то выбрано, то наш текст становится невидимым и встает сверху выбранного параметра, чтобы при клике на него можно было заного открыть селект, что не было реализовано прошлым автором */ .select input[name="list"]:checked ~ #text < background: transparent; color: transparent; z-index: 2; >/* Стилизация выключенного селекта */ #select:disabled ~ .items #text < background: #eee; >/* Стилизация блока с опциями. min-height сделана для фикса высоты при абсолютном позиционировании, overflow же сделан для фиксированной высоты(см. ниже) */ .items < display: block; min-height: 30px; position: absolute; border: 2px solid #ddd; overflow: hidden; width: 160px; cursor: pointer; >/* Если наш селект закрыт, то он имеет высоту 30px(сделано для того, чтобы слишком большие надписи не растягивали его в высоту) */ #select:not(:checked) ~ .items < height: 30px; >/* Все лейбелы(названия опций) изначально скрыты */ .items label < border-top: 2px solid #ddd; display: none; padding-left: 10px; background: white; >/* Тут много объяснять не надо - просто выделение при наведении */ .items label:hover < background: #eee; cursor: pointer; >/* Опять же фикс из-за абсолютного позиционирования */ #select:checked ~ .items < padding-top: 30px; >/* Если наш селект открыт, то надо сделать все опции видимыми */ #select:checked ~ .items label < display: block; >/* Если какая-либо опция была выбрана, то сделать ее видимой(при выборе селект автоматически закроется) */ .items input:checked + label < display: block!important; border: none; background: white; >/* При открытии селекта создать подложку во весь экран, при клике на которую селект закроется, а значение останется пустым. background сделан для наглядности */ #select:checked ~ .bg

Вот она — самая интересная часть, в которой надо осмыслить как смена выбора инпута (все инпуты с типом радио имеют одинаковое имя => мы можем выбрать только один из них) влияет на наш селект. Еще одной особенностью этого варианта является возможность отключить селект, используя атрибут disabled на #select.

Читайте также:  Python now unix timestamp

Готовый пример вы можете найти здесь.

Вот, собственно, и все. Парочка минусов предыдущего автора пофикшены, так что это решение, полагаю, на данный момент можно считать идеальным css-вариантом селекта. Надеюсь, мое решение кому-нибудь пригодится.

Источник

Стилизация select CSS для отображения в разных браузерах

В этой статье мы расскажем о том как реализуется стилизация select CSS для отображения в разных браузерах с примерами, фрагментами кода и скриншотами.

Для тестирования на Windows 8.1 использовались следующие браузеры:
• Firefox 35 ;
• Internet Explorer 11 ;
• Google Chrome 40 ;
• Windows Safari 5.1 .

Список свойств CSS , которые поддерживаются браузерами:

CSS Firefox Chrome IE11
Background ДА ДА ДА
Border ДА ДА ДА
box-shadow ДА ДА ДА
Color ДА ДА ДА
Font ДА ДА ДА
Height ДА ДА ДА
margin ДА ДА ДА
opacity ДА ДА ДА
padding ДА ДА ДА
position ДА ДА ДА
width ДА ДА ДА

Были протестированы следующие сценарии стилизации SELECT CSS :

  • Элемент SELECT без применения CSS ;
  • Элемент SELECT с применением свойств CSS padding и height или line-height ;
  • Элемент SELECT с применением свойств CSS border , background и text-color ;
  • Элемент SELECT с применением различных правил CSS .

Элемент SELECT без применения CSS

SELECT без применения CSS выглядит одинаково во всех перечисленных браузерах. За исключением того, что Internet Explorer для SELECT CSS оформления по умолчанию использует черную рамку, и стили стрелки выпадающего списка определяются по-разному.

// HTML 

Источник

CSS putting line-height in select box

The following tutorial shows you how to use CSS to do «CSS putting line-height in select box».

CSS Style

The CSS style to do «CSS putting line-height in select box» is

.select_box < font-size:12px; padding:14px; >

HTML Body

body> select >"select_box"> option value="" disabled style="display: none;">Categories option>10 option>25 option>50 option>100 option>all   

The following iframe shows the result. You can view the full source code and open it in another tab.

html> head> meta name="viewport" content="width=device-width, initial-scale=1"> style id="compiled-css" type="text/css"> .select_boxfont-size:12px;padding:14px;>  body> select >"select_box"> option value="" disabled="disabled" style="display: none;">Categories option>10 option>25 option>50 option>100 option>all    

  • CSS Pure CSS way to show/hide content based on option select
  • CSS Put text in line with top of select box
  • CSS Put text in line with top of select box (Demo 2)
  • CSS putting line-height in select box
  • CSS Radio button to display Text box if selected and disappear if other option is selected
  • CSS Radio buttons selecting multiple options
  • CSS Radio buttons selecting multiple options (Demo 2)

demo2s.com | Email: | Demo Source and Support. All rights reserved.

Источник

Оцените статью