Изменение поведения кнопок по щелчку Bootstrap, CSS

203
14 декабря 2018, 18:00

Есть кнопка:

<input type="submit" class="btn btn-primary btn-lg">

Если зажать левой клавишей мыши по кнопке происходит примерно следующее: выделяется кнопка по контуру и прожимается. После самого клика - отжимается. Если быстро кликнуть - то происходит моментальное зажатие и сразу же отжатие кнопки.

Как убрать любые эффекты, которые происходят при нажатии? То есть нужно чтобы она максимум выделялась, а не прожималась и отжималась.

Данный код не решил проблему:

.btn-primary:focus,.btn-primary:active, .btn-primary:hover{ 
    outline: none; !important; 
    box-shadow: none; !important; 
} 
.btn:focus,.btn:active,.btn:hover{ 
    outline: none; !important; 
    box-shadow: none; !important; 
}
<input type="submit" class="btn btn-primary btn-lg"> 
 
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">

update: изменил описание стилей

Возможно что-то излишне, но пока что лишь бы работало.

        .btn:focus,
        .btn:active {
            box-shadow: none !important;
        }
        .btn-primary:active,
        .btn-primary:focus {
            box-shadow: none !important;
        }
        .btn-lg:active,
        .btn-lg:focus {
            box-shadow: none !important;
        }

Теперь при наведении на кнопку перестал изменяться(затемняться) цвет фона, она лишь подсвечивается по контуру. Но при нажатии этот эффект остался.

update: с bootstrap buttons благодаря документации разобрался. Остался последний вопрос:

<input type="button" name"SomeButton">

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

update:

В примере у вас именно то что нужно по сути. При наведении на кнопку, нажатии на нее, она такая же, как и зажатая. Т.е. focus, hover, active нужно привести к одному виду - к active.

Берем в спецификации:

.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,
.show > .btn-primary.dropdown-toggle {
  color: #fff;
  background-color: #0062cc;
  border-color: #005cbf;
}
.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,
.show > .btn-primary.dropdown-toggle:focus {
  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
}

И, чтобы нигде накосячить, все это реализуем однообразно:

.btn:focus, 
.btn:hover, 
.btn:active, 
.btn:not(:disabled):not(.disabled):active, 
.btn:not(:disabled):not(.disabled).active { 
  background-image: none !important; 
  box-shadow: none !important; 
  outline: 0 !important; 
} 
 
.btn-primary:focus, 
.btn-primary:hover, 
.btn-primary:active, 
.btn-primary:not(:disabled):not(.disabled):active, 
.btn-primary:not(:disabled):not(.disabled).active, 
.show>.btn-primary.dropdown-toggle, 
.btn-primary:not(:disabled):not(.disabled):active:focus, 
.btn-primary:not(:disabled):not(.disabled).active:focus { 
  background-color: #0062cc !important; 
  border-color: #005cbf !important; 
  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5) !important; 
}
<input type="submit" class="btn btn-primary btn-lg"> 
 
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">

Получаем то, что нужно по сути, но совершенно другой внешний вид зажатой кнопки (

Answer 1

1) Убираем тень

  1. Перед !important не должно быть точек с запятой. Уберите их, и ваш код заработает.
  2. outline: 0; для класса .btn Бутстрап добавляет сам. Эту инструкцию от себя можно уже не писать. См. bootstrap.css:
.btn:focus, .btn.focus {
    outline: 0;
}
  1. А тень Бутстрап назначает дважды — и для .btn, и для .btn-primary:
.btn:focus, .btn.focus {
    box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
}
.btn-primary:not(:disabled):not(.disabled):active:focus {
    box-shadow: 0 0 0 0.2rem rgba(0,123,255,.5);
}

Поэтому, чтобы убрать тень, надо либо копировать из Бутстрапа строку для .btn-primary, либо добавлять !important, либо ещё как-нибудь пересиливать Бутстрап по специфичности.

Если тень не нужна у всех кнопок на сайте, то инструкция с !important выглядит проще и работает жёстче.

Проверьте:

.btn:focus, 
.btn:active { 
  box-shadow: none !important; 
}
<input type="submit" class="btn btn-primary btn-lg"> 
 
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">

2) Устраняем мерцание для .btn-primary

Бутстрап задаёт для .btn-primary фон и границу: background-color: #007bff; border-color: #007bff;. При наведении мыши делает их темнее: background-color: #0069d9; border-color: #0062cc;. При нажатии — ещё темнее: background-color: #0062cc; border-color: #005cbf;.

Получается, что при нажатии и отпускании кнопка «мерцает»: фон и граница меняют цвет при переходах между состояниями :hover и :active.

Чтобы от этого избавится, задайте этим состояниям одинаковые цвета для фона и границы. Например:

.btn:focus, 
.btn:active { 
  box-shadow: none !important; 
} 
 
.btn-primary:hover, 
.btn-primary:active { 
  background-color: #0069d9 !important; 
  border-color: #0062cc !important; 
}
<input type="submit" class="btn btn-primary btn-lg"> 
 
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">

3) Устраняем мерцание для кнопки без классов

Ели правильно понял доп. вопрос, он уже не про Бутстрап, а про стили, добавленные браузером. Чтобы избавиться от них, задаём собственные.

Если кнопка не должна меняться, чтобы с ней не происходило, проще всего поставить !important:

input[type="button"] { 
  border-style: solid !important; 
  box-shadow: none !important; 
  outline: none !important; 
}
<input type="button" value="Some Button">

Answer 2

<form> 
  <label class="btn btn-primary btn-lg"> 
    Click<input type="submit" style="display:none"/> 
  </label> 
</form>

READ ALSO
Загрузка фото drag&amp;drop

Загрузка фото drag&drop

Всем привет,у меня есть вот такая загрузка фото на сайт(при клике на картинку пользователь загружает фотку на сайт,и в рамках этой картинки...

169
Как изменить value при клике по кнопке чистым JS?

Как изменить value при клике по кнопке чистым JS?

Есть следующая разметкаКак на чистом js написать чтобы при клике на кнопку плюс - увеличить value на 1, при клике на кнопку минус - уменьшить на 1

146
Проверить на javascript существование cookie

Проверить на javascript существование cookie

На сайте в куку OTK я записываю источник перехода на сайт:

144
Удаление из строки всех символов кроме цифр и символа + вначале?

Удаление из строки всех символов кроме цифр и символа + вначале?

только такие варианты подходят вида +2992924004

131