Яка різниця між: фокусом та: активним?


Відповіді:


413

: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


2
Також зауважте, що ви можете отримати сфокусований елемент, використовуючи заплутано названий document.activeElementвластивість, хоча це має бути у спробі ловити, оскільки IE8 може кинути виняток. І пам’ятайте, що старіші версії веб-переглядачів можуть по-різному ставитися до: активних та: function activeElement() { try { return document.activeElement; /* can get exeption in IE8 */ } catch(e) { } }
robocat

6
Я створив тут JSFiddle з вашого прикладу: jsfiddle.net/NCwvj Тестування в хромі (v24) Я помітив, що натискання кнопки викликає лише :activeстан
Закі Азіз,

3
Nit: порядок фокусування та активність впливає на стан HTML-кнопки, якщо немає: active: focus focus - Ставлення: active state after: focus, я отримую активні зміни, коли потрапляю на вкладку та потрапляє пробіл. Якщо: фокус останній, я ніколи не бачу активного стану.
Метт Гонт

@GauntFace, який браузер ви використовуєте? У Chrome порядок вашої заяви focusта activeдекларації не має значення. Має значення лише тоді, коли вони суперечать один одному, наприклад, color:redі color:blue(тоді перемагає останній).
Pacerier

Питання та відповідь, пов’язані із цим: stackoverflow.com/a/48597351/5587480 . З моєї точки зору, це дуже легко зрозуміти
john cj

59
: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 Псевдокласи


10
Хоча це стосується, це не відповідає на питання
Грегор Вебер,

6
@GregorWeber це викриває різницю, показуючи визначення
Kamil Kiełczewski

1
Ви, мабуть, знаєте це, але якщо ви визначите їх у такому порядку, visitedпосилання не змінять стиль при наведенні або натисканні, тому що їх "відвідуваність" буде змінювати інші псевдокласи. LVHFA - це порядок, який більшість людей захоче використовувати у більшості випадків. Не впевнений, чому ви включили lang...
менталіст

22

Є чотири випадки.

  1. За замовчуванням активоване та фокусування вимкнено.
  2. Коли ви перейдете на вкладку, щоб перейти через фокусуються елементи , вони ввійдуть:focus (без активних).
  3. При натисканні на нефокусований елемент він входить :active(без фокусу).
  4. При натисканні на елемент, що :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. Це одне, що мене збентежило, що інші відповіді не стосувалися.
B-Stewart

6

: фокус - це коли елемент здатний прийняти введення - курсор у полі введення або посилання, на яке було вкладено вкладку.

: active - це коли елемент активується користувачем - час між тим, коли користувач натискає кнопку миші та потім відпускає її.


2
Привіт! Чи існує стан для "натиснутого в даний момент"? Скажімо, у навігаційному меню є три посилання, як змусити його зберігати певний колір, якщо в даний момент посилання "включено"? показати користувачеві, де він зараз знаходиться. як: active працює лише до тих пір, поки посилання (у цьому випадку) натискається, але змінюється назад при відпуску кнопки миші.
Кізер Якуза

0

Активним є те, коли користувач активує цю точку (як і клацання миші; якщо ми використовуємо вкладку з поля в поле, немає ознаки активного стилю. Можливо, для натискання потрібно більше часу, просто спробуйте утримувати клацання на цій точці), фокус відбувається після точка активована. Спробуйте це :

<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"/>

-3

Фокус може бути наданий лише за допомогою клавіатури, але елемент може бути активований обома, мишею або клавіатурою.

Якщо використовується: фокус на посиланні, правило стилю застосовуватиметься лише при натисканні на клавіатуру ботону.


1
:focusне працює так. Наразі в текстовій області, в яку я набираю, є фокус, тому що я натиснув кнопку. Він також може втратити і відновити фокус, клацнувши з нього та знову в ньому. Лише за секунду я кладу фокус на кнопку Додати коментар праворуч, натискаючи на неї. Все це без введення клавіатури, що не викликає фокус.
Джоел Меллон

Якщо у вас немає можливості зосередити увагу на посиланні, це просто тому, що посилання не може бути сфокусована, якщо ви не ставите її на якір або не додаєте атрибут tabindex. Але ви можете зосередити елементи DOM, такі як div або input.
Олексій

-5

Використання "фокусу" надасть користувачам клавіатури той самий ефект, який отримують користувачі миші, коли вони наводяться курсор миші. "Активний" потрібен, щоб отримати такий же ефект в Internet Explorer.

Реальність полягає в тому, що ці стани працюють не так, як слід для всіх користувачів. Не використання всіх трьох селекторів створює проблеми доступності для багатьох користувачів клавіатури, які фізично не в змозі користуватися мишею. Я запрошую вас прийняти виклик #nomouse (nomouse dot org).


1
: навести курсор та: фокус - це не те саме. : наведення - специфічний стан і: фокус - конкретний стан. Трохи плутати і вводити в оману їх прирівнювати.
Гаррі Поллі

1
Я не сумніваюся у вашій експертизі. Я намагаюся зазначити: hover та: active - це не одне і те ж. І це заплутано для людей, які є новими в Інтернеті, і доступність, якщо це просто так: hover приблизно дорівнює: активно для використання клавіатури. Я ціную відповідь, але, можливо, допоможе трохи більше глибини?
Гаррі Поллі

Звичайно, це не одне і те ж! Я не сказав, що вони приблизно однакові. (Будь ласка, прочитайте мої повідомлення ще раз.) Я говорю про різницю між використанням миші та використанням клавіатури для виконання того ж завдання. Я кажу, що ви повинні використовувати їх усі, щоб дати обом наборам користувачів однаковий досвід. Інакше лише користувачі клавіатури, які фізично не в змозі користуватися мишкою, матимуть труднощі побачити, куди вони вкладені на сторінці. Це створює проблему доступності для цих людей під час навігації по сторінці.
AMG
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.