Как встроить теги опций в select и разделить их с помощью optgroup?

Актуальная проблема заключается в том, чтобы использовать тег параметра в блоке выбора по горизонтали и разделить значения параметров с помощью группы опций.

Таким образом, ожидаемый результат будет следующим:

Showing elements on the page 10 | 20 | 30, где можно выбрать 10, 20, 30, а в таблице будет показано выбранное количество элементов.

Решение, к которому я пришел:

HTML:

<div class = "styled-select">
   <select size = "3">
       <optgroup label = "|">
           <option value = "10">10</option>
       </optgroup>
       <optgroup label = "|">
           <option value = "20">20</option>
       </optgroup>
       <optgroup label = "|">
           <option value = "30">30</option>
       </optgroup>
   </select>
</div>

CSS:

.styled-select {
  display:inline-block;
  overflow:hidden;
  margin-top:30px;
  overflow-x:hidden;
  height:25px;
}

.styled-select select {
  margin: -1px -20px -5px -5px;

}

optgroup {
  position:relative;
  display:inline-block;
  width:32px;
  padding-left:5px;
  padding-right: 0px;
}

optgroup:nth-child(1) {
  visibility:hidden;
}

.styled-select select option{
  visibility:visible;
  position:absolute;
  display:inline-block;
  width:15px;
  margin-left:12px !important;
  padding-top:-10px !important;
  margin-top:-16px !important;
  text-align: center;

}

.styled-select select option::before{
  content: none;
  padding-left: 0 !important;
  padding-right: 0 !important;
  margin: 0 0 0 0;
}

Результат вы можете увидеть здесь: https://jsfiddle.net/834gwtz7/4/

Если у вас есть какие-либо предложения, как сделать это более элегантно, пожалуйста, помогите!

UPD: я привязан к использованию выбора с опцией, потому что я использую DataTables для отображения элементов. И select используется для установки максимального количества элементов, отображаемых на странице.

Stason1o 30.01.2019 13:05
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
1
203
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Не уверен, что я следовал тому, что вы хотели сделать, но, может быть, что-то более простое, как это, работает так же?

<!DOCTYPE html>
<html>
<body>
<style>
#styled-select select optgroup {
  display:inline-block;
}
</style>
<div id = "styled-select">
   <select size = "3">
       <optgroup label = "option1">
           <option value = "10">10</option>
           <option value = "10">10</option>
       </optgroup>
       <optgroup label = "option2">
           <option value = "20">20</option>
           <option value = "10">10</option>
       </optgroup>
       <optgroup label = "option3">
           <option value = "30">30</option>
           <option value = "10">10</option>
       </optgroup>
   </select>
</div>

</body>
</html>

Нет, это не похоже на мой результат. См. ссылку, прикрепленную к вопросу jsfiddle.net/834gwtz7/4

Stason1o 30.01.2019 13:30
Ответ принят как подходящий

Итак, в качестве «грязного» решения для тех, кто также имеет такие требования и использует таблицы данных, вы можете использовать решение из моего вопроса. Я искренне понимаю, что это не такой элегантный способ сделать это, поэтому предложения приветствуются =)

Другие вопросы по теме