Как добиться мини-стиля выбора с помощью Bootstrap (или прямого CSS)?

Я использую класс Bootstrap btn-mini для "мини" кнопок и ищу что-то аналогичное для создания "мини" элемента выбора, где кнопка выбора (т.е. часть, которую вы нажимаете, чтобы показать список параметров, а не сам список параметров ) имеет тот же размер и стиль, что и мини-кнопка.

Когда я применяю класс btn-mini к элементу выбора, стиль шрифта кнопки выбора имеет тот же размер, что и мини-кнопка, но размер самой кнопки выбора не изменяется по сравнению с размером по умолчанию.

Есть ли другой класс Bootstrap, который я должен использовать? Или другой способ сделать это?

P.S. Я работаю над OS X Chrome, но, естественно, надеюсь, что есть решение, совместимое с разными браузерами.


person Ghopper21    schedule 27.08.2012    source источник
comment
если вы хотите уменьшить меню выбора, вам нужно только настроить font-size и, возможно, добавить немного отступов, чтобы сделать его более разборчивым   -  person jackwanders    schedule 28.08.2012
comment
@jackwanders - кажется, этого недостаточно. CSS-класс Bootstrap btn-mini включает настройку font-size. При применении к выбору класс уменьшает размер шрифта, но не уменьшает размер поля.   -  person Ghopper21    schedule 28.08.2012
comment
это потому, что .btn-mini также включает правила для высоты строки и заполнения. .btn-mini не предназначен для использования с элементами select. Вам лучше создать свой собственный класс. Посмотрите эту демонстрацию, чтобы понять, о чем я говорю: jsfiddle.net/jackwanders/NQPBW   -  person jackwanders    schedule 28.08.2012
comment
Скопируйте css и HTML в свой вопрос, и я уверен, что кто-то кратко ответит.   -  person Noah Clark    schedule 28.08.2012
comment
@jackwanders -- а, понял. Спасибо!   -  person Ghopper21    schedule 28.08.2012
comment
@jackwanders - хм, поле выбора сжимается до размера шрифта в скрипке, но не с Bootstrap. Похоже, Bootstrap фиксирует высоту выбора независимо от размера шрифта...   -  person Ghopper21    schedule 28.08.2012
comment
Хорошо понял. CSS Bootstrap действительно устанавливает как height, так и line-height выбора в разных местах. Так что явное задание обоих на то, что я хочу, работает.   -  person Ghopper21    schedule 28.08.2012


Ответы (6)


HTML

<select class="btn btn-mini">
    <!-- options -->
</select>
<span class="caret"></span>

CSS

select.btn-mini {
    height: auto;
    line-height: 14px;
}

/* this is optional (see below) */
select.btn {
    -webkit-appearance: button;
       -moz-appearance: button;
            appearance: button;
    padding-right: 16px;
}

select.btn-mini + .caret {
    margin-left: -20px;
    margin-top: 9px;
}

Последние 2 правила являются необязательными, они сделают <select> похожим на <button>, я также добавил к нему знак вставки. См. эту скрипту.

person Pavlo    schedule 28.08.2012
comment
Это мило! Изменение внешнего вида кнопки вместе с применением нового правила select.btn-mini — вот что делает ее последовательной. Теперь, что касается каре, какие-нибудь советы о том, как это сделать? - person Ghopper21; 28.08.2012
comment
Это потрясающе и должно быть включено как часть Bootstrap по умолчанию. Благодарю вас! - person Clay; 14.12.2012
comment
Только что проверил это в Firefox (20 с чем-то) на MacBook Pro. То, что я вижу в JS Fiddle, — это выбор с двумя раскрывающимися треугольниками (каретка). Хорошая концепция, однако, кажется немного странной. Должно быть, моя машина. - person Ace; 25.04.2013
comment
@Ace Похоже, -moz-appearance не влияет на Firefox 20 (и, возможно, раньше). В конце концов, нестандартные свойства — это зло. Я подумаю, как изменить этот ответ. - person Pavlo; 25.04.2013

На всякий случай, если пользователи Bootstrap 3 столкнутся с этим старым вопросом, вот способ BS3:

<select class="form-control input-lg"></select>
<select class="form-control"></select>
<select class="form-control input-sm"></select>

<input class="form-control input-lg">
<input class="form-control">
<input class="form-control input-sm">

Однако ввода-xs нет, поэтому вам придется сделать это самостоятельно, если вы хотите меньше.

.input-xs, select.input-xs {
  height: 20px;
  line-height: 20px;
}
person Will Stern    schedule 19.12.2013
comment
Не работает, если выбрать размер › 1, в этом случае он должен уменьшить размер текста и отступы. - person Pablo Pazos; 11.01.2016

Для Bootstrap 4 для установки высоты мы можем использовать класс form-control-sm с form-control.

<select class="form-control form-control-lg">
  <option>Large select</option>
</select>
<select class="form-control">
  <option>Default select</option>
</select>
<select class="form-control form-control-sm">
  <option>Small select</option>
</select>

введите описание изображения здесь

И чтобы установить их ширину, мы должны использовать классы столбцов сетки, такие как .col-sm-*, .col-md-*, .col-lg-* и т. д.

Итак, введите код выбора:

<div class="row">
  <div class="col-md-3">
    ... select tag code ...
  </div>
</div>

и это будет выглядеть так:

введите описание изображения здесь

Вы можете назвать последний элементом выбора "mini".

person Rajkaran Mishra    schedule 17.08.2017
comment
Хорошо, проверил: ‹select class=custom-select custom-select-sm› тоже работает. Потрясающий! - person JonSnow; 05.12.2017

Это не окончательный ответ, но я хотел поделиться тем, что я получил до сих пор, для всех, кому интересно это сделать.

Как предложил jackwanders, я пошел дальше и создал собственный класс CSS:

.select-mini {
  font-size: 11px;
  height: 20px;
  width: 100px;
}

Эти правила font-size и height более или менее заставляют поле выбора иметь тот же размер, что и мини-кнопка, но текст не совсем выровнен таким же образом (он немного сдвинут вверх). Обратите внимание, что вам нужно использовать height, а не line-height, чтобы переопределить правило height для выбранных элементов, которые Bootstrap устанавливает в другом месте. (Правило width заключается в том, чтобы просто изменить виджет, и он может быть любым, каким вы хотите.)

Мой CSS-фу недостаточно хорош, чтобы быстро заставить мини-выбор полностью соответствовать мини-кнопкам, и, насколько я вижу, выбор ведет себя странно, когда дело доходит до CSS, но, надеюсь, это будет полезно в качестве начала для других. . Между тем, все еще открыты для лучших ответов!

person Ghopper21    schedule 28.08.2012

На основе класса btn-xs я подготовил это:

.input-xs{
    height: 20px;
    line-height: 1.5;
    font-size: 12px;
    padding: 1px 5px;
    border-radius: 3px;
}

Обратите внимание, что ширина не ограничена!

Проверьте эту скрипту, чтобы увидеть ее в действии.

person 1_bug    schedule 03.03.2017

Павел ответит лучше. Но когда курсор мыши находится над кареткой, щелчок не работает. Чтобы это исправить, в класс каретки нужно добавить всего одну вещь:

select.btn-mini + .caret {
    margin-left: -14px;
    margin-top: 19px;
	pointer-events: none;
}

person EminST    schedule 25.02.2018