© Khmer Angkor Academy - sophearithput168

Pseudo Classes និង Pseudo Elements

សេចក្តីផ្តើម

Pseudo-classes និង Pseudo-elements គឺជាឧបករណ៍មានឥទ្ធិពលខ្លាំងក្នុង CSS ដែលអនុញ្ញាតឱ្យយើងកំណត់រចនាប័ទ្មលើធាតុតាមលក្ខខណ្ឌពិសេស ឬផ្នែកជាក់លាក់នៃធាតុ ដោយមិនចាំបាច់បន្ថែម classes ឬ IDs ផ្សេងទៀត។

ភាពខុសគ្នារវាង Pseudo-Class និង Pseudo-Element

  • Pseudo-Class (:) - កំណត់ស្ថានភាពពិសេសនៃធាតុ (state)
  • Pseudo-Element (::) - កំណត់ផ្នែកជាក់លាក់នៃធាតុ (part)

Pseudo-Classes (ចំណុចស្ថានភាព)

Pseudo-Class ប្រើសម្រាប់កំណត់រចនាប័ទ្មលើធាតុនៅពេលវាស្ថិតក្នុងស្ថានភាពជាក់លាក់មួយ។ វាប្រើសញ្ញា colon តែមួយ (:) មុនឈ្មោះ។

១. Pseudo-Classes សម្រាប់អន្តរកម្ម (User Interaction)

ទាំងនេះប្រែប្រួលតាមការប្រតិបត្តិការរបស់អ្នកប្រើប្រាស់៖

Pseudo-Class ពិពណ៌នា ឧទាហរណ៍
:hover នៅពេល mouse រំលងពីលើធាតុ button:hover
:active នៅពេលកំពុងចុចលើធាតុ a:active
:focus នៅពេលធាតុទទួលបានការផ្តោត (focused) input:focus
:visited សម្រាប់តំណដែលបានចូលមើលរួចហើយ a:visited
:link សម្រាប់តំណដែលមិនទាន់បានចូលមើល a:link

២. Structural Pseudo-Classes (រចនាសម្ព័ន្ធ)

ទាំងនេះជ្រើសរើសធាតុតាមទីតាំងក្នុងរចនាសម្ព័ន្ធ HTML៖

Pseudo-Class ពិពណ៌នា ឧទាហរណ៍
:first-child កូនដំបូងបំផុតរបស់ parent li:first-child
:last-child កូនចុងក្រោយរបស់ parent li:last-child
:nth-child(n) កូនទីn របស់ parent li:nth-child(2)
:nth-child(odd) កូនលេខសេស (1, 3, 5...) tr:nth-child(odd)
:nth-child(even) កូនលេខគូ (2, 4, 6...) tr:nth-child(even)
:nth-of-type(n) ធាតុប្រភេទដូចគ្នាទីn p:nth-of-type(2)
:only-child កូនតែមួយគត់របស់ parent p:only-child
:empty ធាតុដែលគ្មានខ្លឹមសារ div:empty

៣. Form Pseudo-Classes (ទម្រង់)

សម្រាប់ធាតុក្នុងទម្រង់ (forms)៖

Pseudo-Class ពិពណ៌នា
:enabled ធាតុដែលបើកប្រើប្រាស់
:disabled ធាតុដែលបិទប្រើប្រាស់
:checked checkbox/radio ដែលបានគូស
:required input ដែលត្រូវការចាំបាច់
:optional input ដែលមិនចាំបាច់
:valid input ដែលត្រឹមត្រូវ
:invalid input ដែលមិនត្រឹមត្រូវ
:placeholder-shown input ដែលកំពុងបង្ហាញ placeholder

៤. Other Useful Pseudo-Classes

Pseudo-Class ពិពណ៌នា ឧទាហរណ៍
:not(selector) ជ្រើសរើសធាតុដែលមិនត្រូវនឹង selector p:not(.intro)
:root ធាតុ root (ជាធម្មតា <html>) :root { --color: blue; }
:target ធាតុដែលត្រូវ target ដោយ URL fragment :target { background: yellow; }

Pseudo-Elements (ផ្នែកធាតុ)

Pseudo-Elements អនុញ្ញាតឱ្យយើងកំណត់រចនាប័ទ្មលើផ្នែកជាក់លាក់មួយនៃធាតុ។ វាប្រើសញ្ញា double colon (::) មុនឈ្មោះ។

ចំណាំ: ក្នុង CSS3 បានប្តូរពី : មកជា :: ដើម្បីបែងចែកពី pseudo-classes។ ទោះជាយ៉ាងណា browsers នៅតែទទួលយក syntax ចាស់ដែរ។

Pseudo-Elements សំខាន់ៗ

Pseudo-Element ពិពណ៌នា
::before បញ្ចូលខ្លឹមសារមុនធាតុ
::after បញ្ចូលខ្លឹមសារបន្ទាប់ធាតុ
::first-letter តួអក្សរដំបូងនៃធាតុ
::first-line បន្ទាត់ដំបូងនៃធាតុ
::selection ផ្នែកដែលអ្នកប្រើប្រាស់បានជ្រើសរើស
::marker សញ្ញារបស់ list items
::placeholder អត្ថបទ placeholder ក្នុង input

::before និង ::after - ការប្រើប្រាស់ឧស្សាហ៍

Pseudo-elements ទាំងនេះមានប្រយោជន៍ខ្លាំងណាស់ក្នុងការបង្កើតធាតុលម្អដោយមិនចាំបាច់បន្ថែម HTML។

::first-letter និង ::first-line

ប្រើសម្រាប់បង្កើតរចនាប័ទ្មពិសេសលើបន្ទាត់ដំបូង ឬអក្សរដំបូង (drop caps)។

::selection - ការជ្រើសរើសអត្ថបទ

ផ្លាស់ប្តូររូបរាងនៃអត្ថបទនៅពេលជ្រើសរើស។

::placeholder - Input Placeholder

កំណត់រចនាប័ទ្មលើអត្ថបទ placeholder ក្នុង input fields។


ឧទាហរណ៍ជាក់ស្តែង - Navigation Menu

ឧទាហរណ៍នេះបង្ហាញការប្រើប្រាស់ pseudo-classes ជាច្រើនលើ navigation menu។


ឧទាហរណ៍ជាក់ស្តែង - Card Design

ប្រើ pseudo-elements ដើម្បីបង្កើតប្រយោជន៍លម្អលើ card។


ឧទាហរណ៍ជាក់ស្តែង - Tooltip

បង្កើត tooltip ដោយប្រើ ::before និង ::after។


តារាងសង្ខេបប្រៀបធៀប

Pseudo-Classes vs Pseudo-Elements

លក្ខណៈ Pseudo-Classes Pseudo-Elements
Syntax Single colon : Double colon ::
គោលបំណង ជ្រើសរើសធាតុតាមស្ថានភាព ជ្រើសរើសផ្នែកនៃធាតុ
ឧទាហរណ៍ :hover, :focus, :first-child ::before, ::after, ::first-letter
ចំនួនក្នុង selector អាចប្រើបានច្រើន មួយក្នុងមួយ selector

nth-child() Formula

Pseudo-class :nth-child() អាចប្រើ formula an+b

  • :nth-child(2n) - លេខគូទាំងអស់ (same as even)
  • :nth-child(2n+1) - លេខសេសទាំងអស់ (same as odd)
  • :nth-child(3n) - រាល់ធាតុទី 3 (3, 6, 9...)
  • :nth-child(3n+1) - (1, 4, 7, 10...)
  • :nth-child(n+3) - ចាប់ពីធាតុទី 3 តទៅ
  • :nth-child(-n+3) - 3 ធាតុដំបូង

ករណីប្រើប្រាស់ទូទៅ (Common Use Cases)

១. Button States

ប្រើ :hover, :active, :focus ដើម្បីបង្កើតអន្តរកម្មលើ buttons។

២. Form Validation

ប្រើ :valid, :invalid, :required ដើម្បីបង្ហាញស្ថានភាពទម្រង់។

៣. Decorative Elements

ប្រើ ::before និង ::after ដើម្បីបន្ថែម icons, decorations ដោយមិនចាំបាច់ HTML បន្ថែម។

៤. Table Styling

ប្រើ :nth-child(even/odd) ដើម្បីបង្កើត zebra striping លើតារាង។

៥. Typography

ប្រើ ::first-letter សម្រាប់ drop caps, ::first-line សម្រាប់រចនាប័ទ្មបន្ទាត់ដំបូង។

៦. Custom Selection

ប្រើ ::selection ដើម្បីផ្លាស់ប្តូរពណ៌ជ្រើសរើសអត្ថបទ។


ចំណាំសំខាន់និងការអនុវត្តល្អបំផុត

⚠️ ចំណាំសំខាន់

  • ::before និង ::after ត្រូវការ content: property content ជាចាំបាច់ទោះបីវាទទេក៏ដោយ
  • Browser support: pseudo-elements មួយចំនួនមិនទាន់ត្រូវបានគាំទ្រពេញលេញក្នុង browsers ចាស់
  • Performance: ការប្រើ :hover លើធាតុច្រើនពេកអាចប៉ះពាល់ដល់ performance
  • Specificity: pseudo-classes និង pseudo-elements មាន specificity ដូចគ្នានឹង classes

✅ ការអនុវត្តល្អបំផុត (Best Practices)

  • ប្រើ :: (double colon) សម្រាប់ pseudo-elements ដើម្បីភាពច្បាស់លាស់
  • ប្រើ ::before/::after ជំនួស HTML បន្ថែមសម្រាប់ decorative content
  • រក្សា pseudo-class order សម្រាប់ links: LVHA (:link, :visited, :hover, :active)
  • ប្រើ :not() ដើម្បីជៀសវាង overriding styles មិនចាំបាច់
  • តែងតែបន្ថែម content: ""; នៅពេលប្រើ ::before/::after
  • ប្រើ :focus-visible ជំនួស :focus ដើម្បី UX ល្អជាង
  • កុំប្រើ pseudo-elements លើធាតុដែល self-closing (img, input, br...)

🎯 Tips & Tricks

  • ប្រើ ::before { content: attr(data-label); } ដើម្បីបង្ហាញតម្លៃ attribute
  • ប្រើ :empty ដើម្បីលាក់ធាតុដែលគ្មានខ្លឹមសារ
  • រួមបញ្ចូល pseudo-classes: li:first-child:hover
  • ប្រើ :is() និង :where() ដើម្បីកាត់បន្ថយ code duplication

សង្ខេប: Pseudo-classes និង Pseudo-elements គឺជាឧបករណ៍មានឥទ្ធិពលខ្លាំងដែលជួយយើងសរសេរ CSS ស្អាតជាង និងមានប្រសិទ្ធភាពខ្ពស់។ Pseudo-classes ជ្រើសរើសធាតុតាមស្ថានភាពរបស់វា ចំណែក Pseudo-elements ជ្រើសរើសផ្នែកជាក់លាក់នៃធាតុ។ ការយល់ដឹងនិងប្រើប្រាស់ត្រឹមត្រូវនឹងធ្វើឱ្យកូដរបស់អ្នកមានភាពទំនើប maintainable និងមាន performance ល្អ។