อะไรคือความแตกต่างระหว่าง: มุ่งเน้นและ: ใช้งานอยู่?


คำตอบ:


413

:focusและ:activeเป็นสองสถานะที่แตกต่างกัน

  • :focus แสดงสถานะเมื่อองค์ประกอบถูกเลือกเพื่อรับอินพุตและ
  • :active แสดงสถานะเมื่อองค์ประกอบกำลังถูกเปิดใช้งานโดยผู้ใช้

<button>ตัวอย่างเช่นสมมติว่าเรามี <button>จะไม่ได้มีรัฐใด ๆ จะเริ่มต้นด้วย มันมีอยู่จริง หากเราใช้Tabเพื่อให้ "โฟกัส" กับ<button>มันตอนนี้มันเข้าสู่:focusสถานะของมัน หากคุณคลิก (หรือกดspace) คุณจะทำให้ปุ่มเข้าสู่สถานะ ( :active)

เมื่อทราบว่าเมื่อคุณคลิกที่องค์ประกอบคุณให้มันมุ่งเน้นไปที่ยัง cultivates ภาพลวงตาว่า: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 การทดสอบใน chrome (v24) ฉันสังเกตเห็นว่าการคลิกที่ปุ่มจะเรียกเฉพาะ:activeสถานะเท่านั้น
Zaki Aziz

3
Nit: ลำดับของการโฟกัสและแอ็คทีฟส่งผลต่อสถานะของปุ่ม HTML หากไม่มี: แอ็คทีฟ: สถานะการโฟกัส - การใส่: แอ็คทีฟหลัง: โฟกัสฉันได้รับการเปลี่ยนแปลงที่ใช้งานอยู่เมื่อฉันกดแท็บและพื้นที่ว่าง ถ้า: โฟกัสสุดท้ายฉันไม่เคยเห็นสถานะที่ใช้งานอยู่
Matt Gaunt

@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 Pseudo-classes


10
แม้ว่าจะเกี่ยวข้องกัน แต่สิ่งนี้ไม่ได้ตอบคำถาม
Gregor Weber

6
@GregorWeber มันเปิดเผยความแตกต่างโดยแสดงคำจำกัดความ
Kamil Kiełczewski

1
คุณอาจจะรู้สิ่งนี้ แต่ถ้าคุณกำหนดไว้ในvisitedลิงก์คำสั่งนั้นจะไม่เปลี่ยนรูปแบบเมื่อโฮเวอร์หรือคลิกเพราะ "การเยี่ยมชม" ของพวกเขาจะแทนที่คลาสหลอกอื่น ๆ LVHFAเป็นคำสั่งที่คนส่วนใหญ่ต้องการใช้ในกรณีส่วนใหญ่ ไม่แน่ใจว่าทำไมคุณถึงรวมlang...
Mentalist

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 เมื่อคุณกดแท็บคุณจะมุ่งเน้น div ที่สองและดูมันแสดงกรณีที่ 2 เมื่อคุณคลิกที่ div แรกที่คุณเห็นกรณีที่ 3 เมื่อคุณคลิก div ที่สองคุณจะเห็นกรณีที่ 4 .


ไม่ว่าจะเป็นองค์ประกอบที่สามารถโฟกัสหรือไม่เป็นคำถามอื่น ส่วนใหญ่ไม่ได้เป็นค่าเริ่มต้น แต่ก็ถือว่าปลอดภัย<a>, <input>, <textarea>มีความสามารถโฟกัสโดยค่าเริ่มต้น


ขอบคุณสำหรับการชี้ให้เห็นว่าองค์ประกอบสามารถมีแต่ไม่:active :focusนั่นคือสิ่งหนึ่งที่ฉันสับสนเกี่ยวกับคำตอบอื่น ๆ ที่ไม่ได้อยู่
B-Stewart

6

: โฟกัสคือเมื่อองค์ประกอบสามารถรับอินพุต - เคอร์เซอร์ในกล่องอินพุตหรือลิงก์ที่ถูกแท็บ

: active คือเมื่อองค์ประกอบถูกเปิดใช้งานโดยผู้ใช้ - เวลาระหว่างที่ผู้ใช้กดปุ่มเมาส์แล้วปล่อย


2
Hi! มีสถานะของ "คลิกที่ปัจจุบัน" หรือไม่? ให้บอกว่ามีสามลิงค์ในเมนูการนำทางคุณจะทำให้มันคงสีได้อย่างไรเมื่ออยู่ที่ลิงค์ "on"? เพื่อแสดงผู้ใช้ว่าเขาอยู่ที่ไหนในขณะนี้ เป็น: แอคทีฟจะทำงานได้ตราบเท่าที่ลิงก์ (ในกรณีนี้) กำลังถูกคลิก แต่จะเปลี่ยนกลับเมื่อปล่อยปุ่มเมาส์
Kizer Yakuza

0

Active คือเมื่อผู้ใช้เปิดใช้งานจุดนั้น (เช่นการคลิกเมาส์ถ้าเราใช้แท็บจาก field-to-field ไม่มีสัญญาณจาก style ที่ใช้งานอยู่บางทีการคลิกต้องใช้เวลามากขึ้นเพียงแค่ลองคลิกคลิกที่จุดนั้น) จุดถูกเปิดใช้งาน ลองสิ่งนี้:

<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ไม่ทำงานอย่างนั้น ข้อความที่ฉันกำลังพิมพ์อยู่ในขณะนี้มีโฟกัสเนื่องจากฉันคลิกปุ่ม นอกจากนี้ยังสามารถสูญเสียและคืนค่าโฟกัสโดยการคลิกจากมันและเข้าไปอีกครั้ง เพียงเสี้ยววินาทีฉันจะให้ความสำคัญกับปุ่มเพิ่มความคิดเห็นทางด้านขวาโดยคลิกที่ปุ่ม ทั้งหมดนี้ไม่มีการใส่คีย์บอร์ดทำให้เกิดการโฟกัส
Joel Mellon

หากคุณไม่สามารถมุ่งเน้นไปที่การเชื่อมโยงก็เป็นเพราะการเชื่อมโยงไม่สามารถมุ่งเน้นจนกว่าคุณจะวางไว้ที่จุดยึดหรือคุณเพิ่มแอตทริบิวต์ tabindex แต่คุณสามารถเน้นองค์ประกอบ DOM เช่น divs หรือ input
อเล็กซ์

-5

การใช้ "โฟกัส" จะให้เอฟเฟกต์แบบเดียวกับที่ผู้ใช้เมาส์ได้รับเมื่อวางเมาส์ไว้ จำเป็นต้องใช้ "แอคทีฟ" เพื่อรับเอฟเฟกต์เดียวกันใน Internet Explorer

ความจริงก็คือรัฐเหล่านี้ไม่ทำงานตามที่ควรสำหรับผู้ใช้ทั้งหมด การไม่ใช้ตัวเลือกทั้งสามตัวจะสร้างปัญหาการช่วยสำหรับการเข้าถึงสำหรับผู้ใช้ที่ใช้คีย์บอร์ดเท่านั้นซึ่งไม่สามารถใช้เมาส์ได้ ฉันขอเชิญคุณลองใช้ #nomouse challenge (Nomouse dot org)


1
: โฮเวอร์และ: โฟกัสไม่เหมือนกัน : โฮเวอร์เป็นสถานะเฉพาะและ: โฟกัสเป็นสถานะเฉพาะ มันทำให้สับสนและทำให้เข้าใจผิดเล็กน้อยเพื่อให้เท่ากัน
Garry Polley

1
ฉันไม่สงสัยความเชี่ยวชาญของคุณ ฉันกำลังพยายามชี้ให้เห็นว่า: โฮเวอร์และ: แอคทีฟไม่เหมือนกัน และสร้างความสับสนให้กับผู้ที่เพิ่งเริ่มใช้งานเว็บและการเข้าถึงได้ง่ายเมื่อวางไว้เพียง: โฮเวอร์นั้นเท่ากับ: ใช้งานสำหรับการใช้แป้นพิมพ์ ฉันซาบซึ้งกับคำตอบ แต่อาจช่วยได้มากขึ้น
Garry Polley

แน่นอนพวกเขาไม่เหมือนกัน! ฉันไม่ได้พูดว่าพวกเขาประมาณเดียวกัน (โปรดอ่านโพสต์ของฉันอีกครั้ง) ฉันกำลังพูดถึงความแตกต่างระหว่างการใช้เมาส์และการใช้แป้นพิมพ์เพื่อทำงานเดียวกัน ฉันกำลังบอกว่าคุณต้องใช้พวกเขาทั้งหมดเพื่อให้ผู้ใช้ทั้งสองชุดได้รับประสบการณ์เดียวกัน ไม่เช่นนั้นผู้ใช้แป้นพิมพ์จะมีเพียงผู้ใช้ที่ไม่สามารถใช้เมาส์ได้เท่านั้นจะมีปัญหาในการดูว่าพวกเขาได้แท็บไปที่หน้าใด สิ่งนี้สร้างปัญหาการเข้าถึงสำหรับผู้คนเหล่านี้ในการนำทางหน้าเว็บ
AMG
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.