Удалить радиус границы из тега Select в bootstrap 3

133

Это кажется тривиальной проблемой, но я не могу ее понять.

На собственном веб-сайте Bootstraps есть пример Select.

выбор начальной загрузки



Глядя на код, кажется, что у этого элемента select есть border-radius 4. введите описание изображения здесь



Я надеюсь, что изменение этого border-radius на 0 затем удалит border-radius из элемента select, однако это не так - как показано на рисунке ниже.

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



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

Тайлер МакГиннис
источник
1
.form-controlМеня устраивает изменение радиуса границы класса. bootply.com/Q7goAsFc0B
j08691
1
Даже в вашем примере на этом элементе select есть закругленные углы ...?
Tyler McGinnis
2
Оказывается, проблема в Chrome. Открывая загрузку в firefox, он не округляется. Weird.
Тайлер МакГиннис
У меня работает как в Chrome, так и в FF.
j08691
1
для меня он не работает в Chrome, но отлично работает в firefox
Maverick

Ответы:

256

Вот версия, которая работает во всех современных браузерах. Ключ using, appearance:noneкоторый удаляет форматирование по умолчанию. Поскольку все форматирование исчезло, вам нужно снова добавить стрелку, которая визуально отличает выбор от ввода. Примечание: appearanceне поддерживается в IE .

Рабочий пример: https://jsfiddle.net/gs2q1c7p/

select:not([multiple]) {
    -webkit-appearance: none;
    -moz-appearance: none;
    background-position: right 50%;
    background-repeat: no-repeat;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAMCAYAAABSgIzaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZFNDEwNjlGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZFNDEwNkFGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkU0MTA2N0Y3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkU0MTA2OEY3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuGsgwQAAAA5SURBVHjaYvz//z8DOYCJgUxAf42MQIzTk0D/M+KzkRGPoQSdykiKJrBGpOhgJFYTWNEIiEeAAAMAzNENEOH+do8AAAAASUVORK5CYII=);
    padding: .5em;
    padding-right: 1.5em
}

#mySelect {
    border-radius: 0
}
<select id="mySelect">
    <option>Option 1</option>
    <option>Option 2</option>
</select>

Основываясь на предложении Арно Тенкинка в комментариях, вот пример использования вместо для значка стрелки.

select:not([multiple]) {
    -webkit-appearance: none;
    -moz-appearance: none;
    background-position: right 50%;
    background-repeat: no-repeat;
    background-image: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="12" version="1"><path d="M4 8L0 4h8z"/></svg>');
    padding: .5em;
    padding-right: 1.5em
}

#mySelect {
    border-radius: 0
}
<select id="mySelect">
    <option>Option 1</option>
    <option>Option 2</option>
</select>

Эрик
источник
26
Это должен быть настоящий ответ.
avoliva
1
Это лучший ответ, чем выбранный
Крис Джеймс Шампо
7
Вы также можете использовать для этого SVG. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="14px" height="12px" viewBox="0 0 14 12" enable-background="new 0 0 14 12" xml:space="preserve"> <polygon points="3.862,7.931 0,4.069 7.725,4.069 "/></svg>это экономит то же файловое пространство. Он также кэшируется и его легче поддерживать. Скопируйте его в файл, сохраните как .svg и используйте в качестве фона.
Арно Тенкинк,
1
это ответ.
Конрад Уорхол
2
Это определенно лучший ответ. Я искал способ сделать это несколько раз. Это должно очень помочь, спасибо! :)
jaredwilli
215

В дополнение к border-radius: 0доп -webkit-appearance: none;.

user1732055
источник
2
решение правильное, но неспособность понять, почему это происходит в инструментах разработки, просто неправильно. спасибо за разгадку загадки!
mmln 06
101
Он работает, но не идеально, -webkit-appearance: none;вызовет отсутствие индикатора стрелки с правой стороны.
ночнушка
41
@nightire Он работал для меня , если вы используете border: 0и добавить схему , как: outline: 1px inset black; outline-offset:-1px. Сохраним стрелки и можно подделать границу с контуром.
Filipe Pereira
2
Да, это не совсем решение, потому что, как все уже сказали, стрелка выбора исчезает.
Чад Джонсон
2
Не забывайте IE! :) select :: - ms-expand {display: none; }
Кайл Хок
13

У меня была такая же проблема, и хотя ответ user1732055 исправляет границу, он удаляет стрелки раскрывающегося списка. Я решил эту проблему, удалив границу с selectэлемента и создав оболочку spanс рамкой.

HTML:

<span class="select-wrapper">
    <select class="form-control no-radius">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
</span>

CSS:

select.no-radius{
    border:none;
}    
.select-wrapper{
    border: 1px solid black;
    border-radius: 0px;
}

https://jsfiddle.net/Lrqh0drd/6/

Логан Бесеккер
источник
Это работает, только если выделение имеет белый фон. В противном случае будет радиус, если используется другой цвет.
MichalCh
Привет @MichalCh, хороший улов! Один из способов обойти это - установить цвет фона оболочки на то же значение, что и у элемента select. Вот модифицированная версия на jsfiddle для демонстрации: https://jsfiddle.net/Lrqh0drd/75/
Логан Бесекер
Это самое чистое решение.
Николай Ценков
2

Вы можете использовать -webkit-border-radius: 0;. Как это:-

-webkit-border-radius: 0;
border: 0;
outline: 1px solid grey;
outline-offset: -1px;

Это даст квадратные углы, а также стрелки раскрывающегося списка. Использование -webkit-appearance: none;не рекомендуется, так как оно отключит все стили, выполняемые Chrome.

GNS
источник
но с этим тоже есть проблема; при фокусировке он не очищает радиус границы контура.
elquimista
@elquimista вы можете просто использовать outline: none;для этого.
gns
0

Использование SVG из @ArnoTenkink в качестве URL-адреса данных в сочетании с принятым ответом дает нам идеальное решение для дисплеев Retina.

select.form-control:not([multiple]) {
    border-radius: 0;
    appearance: none;
    background-position: right 50%;
    background-repeat: no-repeat;
    background-image: url(data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%20%3C%21DOCTYPE%20svg%20PUBLIC%20%22-//W3C//DTD%20SVG%201.1//EN%22%20%22http%3A//www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd%22%3E%20%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2214px%22%20height%3D%2212px%22%20viewBox%3D%220%200%2014%2012%22%20enable-background%3D%22new%200%200%2014%2012%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpolygon%20points%3D%223.862%2C7.931%200%2C4.069%207.725%2C4.069%20%22/%3E%3C/svg%3E);
    padding: .5em;
    padding-right: 1.5em
}
Marius
источник
-5

класс называется:

.form-control { border-radius: 0; }

обязательно вставьте переопределение после включения начальной загрузки css.

Если вы хотите удалить радиус ТОЛЬКО при выборе элементов управления формой, используйте

select.form-control { ... }

вместо

РЕДАКТИРОВАТЬ: работает для меня в chrome, firefox, opera и safari, IE9 + (все работает на linux / safari и IE на playonlinux)

jBear Графика
источник
Я специально показал в вопросе, как я изменил радиус границы в элементе управления формой, и это не сработало ... что и побудило меня задать вопрос.
Tyler McGinnis
1
jsfiddle.net/Ut4y9/3 вот рабочая скрипка. Если он все еще не работает на вашем компьютере, не могли бы вы указать, какой браузер вы используете? Я не могу воспроизвести вашу проблему. извините
jBear Graphics
Weird. Я использую последнюю версию Chrome. Очевидно, это что-то специфическое для машины, поскольку вы оба видите, как это изменилось. Отредактируйте свой ответ, чтобы я мог изменить свой голос против :)
Тайлер МакГиннис
У меня та же проблема. Несмотря на то, что я переопределил радиус границы, он все еще отображается. Сводит меня с ума.
user1732055
Это по-прежнему относится к самому последнему Bootstrap 3
genkilabs