CSS / Pseudo-class (:hover, :focus)

Pseudo-class (:hover, :focus)

Pseudo-class нь элементийн тодорхой төлөв эсвэл байрлалыг сонгодог тусгай selector юм. JavaScript ашиглахгүйгээр интерактив эффект нэмэх боломжийг олгоно.

Үндсэн синтакс

css
selector:pseudo-class {
  property: value;
}

:hover — хулгана дээр очих

css
.button:hover {
  background-color: #7c3aed;
  transform: translateY(-2px); /* дээш шилжих */
}

.link:hover {
  color: #a78bfa;
  text-decoration: underline;
}

/* Зөвхөн хулганатай төхөөрөмжид hover ажилладаг */
@media (hover: hover) {
  .card:hover {
    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
  }
}

:focus — фокус авах

Form элемент сонгогдох, товч tab-оор идэвхжих үед:

css
.input:focus {
  outline: none; /* анхдагч хүрээ арилгах */
  border-color: #a78bfa;
  box-shadow: 0 0 0 3px rgba(167, 139, 250, 0.25);
}

/* Keyboard navigation хэрэглэгчдэд чухал */
.button:focus-visible {
  outline: 2px solid #a78bfa;
  outline-offset: 2px;
}

Анхаар: outline: none хэрэглэхдээ өөр дүрслэл (box-shadow, border) нэмж өгнө. Эс тэгвэл keyboard хэрэглэгчид фокусыг харахгүй болно.

:active — дарагдах мөч

Хулгана товчийг дарж байх үед:

css
.button:active {
  transform: translateY(0); /* hover дээш шилжсэнийг буцааж доош */
  background-color: #6d28d9;
}

:visited — нэгэнт зочилсон холбоос

css
a:link {
  color: #a78bfa;
} /* зочлоогүй */
a:visited {
  color: #7c3aed;
} /* нэгэнт зочилсон */
a:hover {
  color: #c4b5fd;
} /* hover */
a:active {
  color: #6d28d9;
} /* дарагдах мөч */
/* Дараалал: LoVe HAte — Link, Visited, Hover, Active */

:nth-child() — дугаараар сонгох

css
li:nth-child(1) {
} /* эхний элемент */
li:nth-child(2) {
} /* хоёр дахь */
li:nth-child(odd) {
} /* тэгш бус (1, 3, 5...) */
li:nth-child(even) {
} /* тэгш (2, 4, 6...) */
li:nth-child(3n) {
} /* 3, 6, 9... */
li:nth-child(3n + 1) {
} /* 1, 4, 7... */

Жишээ — хүснэгтийн мөр өнгөлөх:

css
tr:nth-child(even) {
  background-color: #0f172a; /* тэгш мөр бүрт дэвсгэр */
}

tr:nth-child(odd) {
  background-color: transparent;
}

:first-child ба :last-child

css
li:first-child {
  border-top: none; /* эхний item-д дээд хүрээ байхгүй */
}

li:last-child {
  border-bottom: none; /* сүүлийн item-д доод хүрээ байхгүй */
}

/* Эсвэл товч: */
li + li {
  border-top: 1px solid #1e293b; /* эхнийхээс бусад бүгдэд */
}

:not() — гадуурхах

css
/* .disabled биш бүх товч */
.button:not(.disabled):hover {
  background-color: #7c3aed;
}

/* Сүүлийнхийг гадуурхах */
li:not(:last-child) {
  border-bottom: 1px solid #1e293b;
}

/* Хоосон биш input */
input:not([type="checkbox"]):not([type="radio"]) {
  border: 1px solid #1e293b;
}

Бодит жишээ — товчны бүх төлөв

css
.btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 20px;
  background: #7c3aed;
  color: #fff;
  border: none;
  border-radius: 8px;
  cursor: pointer;
  font-size: 15px;
  transition: all 0.15s ease; /* өөрчлөлт жигдрэх */
}

.btn:hover {
  background: #6d28d9;
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(124, 58, 237, 0.4);
}

.btn:active {
  transform: translateY(0);
  box-shadow: none;
}

.btn:focus-visible {
  outline: 2px solid #a78bfa;
  outline-offset: 3px;
}

.btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
  transform: none;
}

Бодит жишээ — form input

css
.form-input {
  width: 100%;
  padding: 10px 14px;
  background: #0f172a;
  border: 1px solid #1e293b;
  border-radius: 8px;
  color: #f1f5f9;
  font-size: 15px;
  transition:
    border-color 0.15s,
    box-shadow 0.15s;
}

.form-input:hover {
  border-color: #475569;
}

.form-input:focus {
  outline: none;
  border-color: #a78bfa;
  box-shadow: 0 0 0 3px rgba(167, 139, 250, 0.2);
}

.form-input:invalid:not(:placeholder-shown) {
  border-color: #f87171; /* утга буруу байвал улаан */
}

Дараагийн хичээлд:

::before, ::after pseudo-element-уудыг судална. Эдгээр нь HTML өөрчлөхгүйгээр элементэд нэмэлт агуулга болон дизайн нэмэх боломжийг олгодог хүчтэй хэрэгсэл юм.