Яка різниця між :focus
і :active
псевдокласами?
Яка різниця між :focus
і :active
псевдокласами?
Відповіді:
:focus
і :active
є двома різними станами.
:focus
представляє стан, коли в даний момент елемент обраний для прийому вводу і :active
представляє стан, коли елемент в даний час активується користувачем.Наприклад, скажімо, у нас є <button>
. Не <button>
буде жодної держави для початку. Він просто існує. Якщо ми використовуємо Tabдля того, щоб "зосередити увагу" на цьому <button>
, він зараз переходить у його :focus
стан. Якщо потім натиснути (або натиснути space), ви змусите кнопку ввести його :active
стан ( ).
На цій ноті, натискаючи на елемент, ви приділяєте йому фокус, що також культивує ілюзію, що :focus
і :active
є однаковою. Вони не однакові. При натисканні кнопка знаходиться в :focus:active
стані.
Приклад:
<style type="text/css">
button { font-weight: normal; color: black; }
button:focus { color: red; }
button:active { font-weight: bold; }
</style>
<button>
When clicked, my text turns red AND bold!<br />
But not when focused only,<br />
where my text just turns red
</button>
редагувати: jsfiddle
:active
стан
focus
та active
декларації не має значення. Має значення лише тоді, коли вони суперечать один одному, наприклад, color:red
і color:blue
(тоді перемагає останній).
:active Adds a style to an element that is activated
:focus Adds a style to an element that has keyboard input focus
:hover Adds a style to an element when you mouse over it
:lang Adds a style to an element with a specific lang attribute
:link Adds a style to an unvisited link
:visited Adds a style to a visited link
Джерело: CSS Псевдокласи
visited
посилання не змінять стиль при наведенні або натисканні, тому що їх "відвідуваність" буде змінювати інші псевдокласи. LVHFA - це порядок, який більшість людей захоче використовувати у більшості випадків. Не впевнений, чому ви включили lang
...
Є чотири випадки.
:focus
(без активних).:active
(без фокусу).:active:focus
фокусується, він вводиться (активний і одночасно фокусується).Приклад:
<div>
I cannot be focused.
</div>
<div tabindex="0">
I am focusable.
</div>
div:focus {
background: green;
}
div:active {
color: orange;
}
div:focus:active {
font-weight: bold;
}
Коли сторінка завантажується в обох випадках у випадку 1. Коли ви натискаєте на вкладку, ви сфокусуєте другий поділ і побачите його, як показано випадок 2. Коли ви клацнете на першому діві, ви побачите випадок 3. Коли ви клацнете другий розділ, ви побачите випадок 4 .
Фокусується чи ні елемент - це інше питання . Більшість не за замовчуванням. Але, з упевненістю припустити <a>
, <input>
, <textarea>
є фокусируемое за замовчуванням.
:active
але ні :focus
. Це одне, що мене збентежило, що інші відповіді не стосувалися.
: фокус - це коли елемент здатний прийняти введення - курсор у полі введення або посилання, на яке було вкладено вкладку.
: active - це коли елемент активується користувачем - час між тим, коли користувач натискає кнопку миші та потім відпускає її.
Активним є те, коли користувач активує цю точку (як і клацання миші; якщо ми використовуємо вкладку з поля в поле, немає ознаки активного стилю. Можливо, для натискання потрібно більше часу, просто спробуйте утримувати клацання на цій точці), фокус відбувається після точка активована. Спробуйте це :
<style type="text/css">
input { font-weight: normal; color: black; }
input:focus { color: green; outline: 1px solid green; }
input:active { color: red; outline: 1px solid red; }
</style>
<input type="text"/>
<input type="text"/>
Фокус може бути наданий лише за допомогою клавіатури, але елемент може бути активований обома, мишею або клавіатурою.
Якщо використовується: фокус на посиланні, правило стилю застосовуватиметься лише при натисканні на клавіатуру ботону.
:focus
не працює так. Наразі в текстовій області, в яку я набираю, є фокус, тому що я натиснув кнопку. Він також може втратити і відновити фокус, клацнувши з нього та знову в ньому. Лише за секунду я кладу фокус на кнопку Додати коментар праворуч, натискаючи на неї. Все це без введення клавіатури, що не викликає фокус.
Використання "фокусу" надасть користувачам клавіатури той самий ефект, який отримують користувачі миші, коли вони наводяться курсор миші. "Активний" потрібен, щоб отримати такий же ефект в Internet Explorer.
Реальність полягає в тому, що ці стани працюють не так, як слід для всіх користувачів. Не використання всіх трьох селекторів створює проблеми доступності для багатьох користувачів клавіатури, які фізично не в змозі користуватися мишею. Я запрошую вас прийняти виклик #nomouse (nomouse dot org).
document.activeElement
властивість, хоча це має бути у спробі ловити, оскільки IE8 може кинути виняток. І пам’ятайте, що старіші версії веб-переглядачів можуть по-різному ставитися до: активних та:function activeElement() { try { return document.activeElement; /* can get exeption in IE8 */ } catch(e) { } }