#html #css
#HTML #css
Вопрос:
Я пытаюсь создать рамку вокруг кнопки круга после нажатия, но граница представляет собой округленный квадрат вместо круга.
.dot {
height: 20px;
width: 20px;
border-radius: 50%;
display: inline-block;
border: none;
}
.dot:after {
border: solid 1px #232323;
border-radius: 50%;
}
<button class="dot" style="background-color: #cc6c6c;"></button>
Комментарии:
1.
:after
не делает того, что вы думаете (это влияет на псевдоэлемент) Черный контур, который вы видите, — это контур, который применяется как часть стиля фокусировки в Chrome, а не граница.2.
:after
это CSS2, вам действительно нужно использовать::after
, который указан как pesudoelement для CSS3. Однако это ничего не меняет после нажатия кнопки. Он используется для добавления somethign после этого элемента. Если у вас есть кнопка в качестве ссылки,:visited
вы можете использовать:focus
или использовать JS с событием onclick для изменения стиля.
Ответ №1:
Вы должны использовать :focus
селектор вместо :after
, и вам нужно скрыть свойство по умолчанию outline
, чтобы сделать ваш альтернативный стиль фокусировки (с использованием рамки) видимым.
(Вам также не нужно повторно устанавливать border-radius
свойство, поскольку оно не изменилось)
Чтобы кнопка не прыгала при фокусировке, вы можете использовать прозрачную рамку для вашего первоначального стиля кнопки, см. Комментарий CSS в примере.
.dot {
height: 20px;
width: 20px;
border-radius: 50%;
display: inline-block;
/*
Using an transparent border, rather than no border,
will prevent the focus style from causing the button to
jump down by the border thickness (1px in this case)
*/
border: solid 1px rgba(0,0,0,0);
}
.dot:focus {
border-color: #232323;
outline: none;
}
<button class="dot" style="background-color: #cc6c6c;"></button>
Комментарии:
1. Это предпочтительнее других подходов,
outline
поскольку оно заменяет другоеfocus
поведение, которое с большей вероятностью соответствует требованиям WCAG . Однако убедитесь, чтоfocus
-state достаточно виден / очевиден.2. Спасибо, но я замечаю, что при нажатии кнопки позиция немного сместится вниз, как мне этого избежать?
3. Самый простой способ — придать кнопке невидимую границу, когда она не сфокусирована, чтобы при добавлении новой границы высота не менялась. Я расширю свой ответ.