Pseudo-element (::before, ::after)
Pseudo-element нь HTML өөрчлөхгүйгээр элементийн тодорхой хэсэгт CSS хэрэглэх буюу нэмэлт агуулга үүсгэх боломжийг олгоно. :: давхар давхар цэгтэй бичигддэгээрээ pseudo-class (:) -аас ялгагдана.
::before ба ::after
Элементийн дотор, контентийн өмнө (before) ба хойно (after) нэмэлт псевдо-элемент үүсгэнэ:
.element::before {
content: ""; /* заавал байх ёстой — хоосон байж болно */
}
.element::after {
content: "";
}
Чухал:
contentproperty байхгүй бол pseudo-element харагдахгүй. Хоосон мөр""бичнэ.
content property-ийн утгууд
.element::before {
content: ""; /* хоосон (дизайн shape-д) */
content: "★"; /* тэмдэгт */
content: " →"; /* текст */
content: attr(data-label); /* HTML attribute-ийн утга */
content: counter(item); /* тоолуур */
}
Дизайн трик жишээнүүд
1. Декоратив зураас — гарчгийн дор:
.section-title {
position: relative;
display: inline-block;
padding-bottom: 12px;
}
.section-title::after {
content: "";
position: absolute;
bottom: 0;
left: 0;
width: 48px;
height: 3px;
background: #a78bfa;
border-radius: 2px;
}
2. Badge — тоо дугаар:
.notification-icon {
position: relative;
display: inline-block;
}
.notification-icon::after {
content: attr(data-count); /* HTML: data-count="3" */
position: absolute;
top: -6px;
right: -6px;
background: #f87171;
color: #fff;
font-size: 11px;
font-weight: bold;
width: 18px;
height: 18px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
<div class="notification-icon" data-count="3">🔔</div>
3. Quote тэмдэгт:
blockquote {
position: relative;
padding: 24px 24px 24px 48px;
background: #0f172a;
border-left: 4px solid #a78bfa;
border-radius: 0 8px 8px 0;
}
blockquote::before {
content: "\201C"; /* Unicode: нээлтийн quote " */
position: absolute;
top: 8px;
left: 12px;
font-size: 4rem;
color: #a78bfa;
line-height: 1;
font-family: Georgia, serif;
}
4. Overlay — зурган дээр харанхуй давхарга:
.card {
position: relative;
overflow: hidden;
}
.card::before {
content: "";
position: absolute;
inset: 0; /* top:0; right:0; bottom:0; left:0 */
background: rgba(0, 0, 0, 0);
transition: background 0.3s;
z-index: 1;
}
.card:hover::before {
background: rgba(0, 0, 0, 0.4); /* hover дээр харанхуйлна */
}
::placeholder — input-ийн placeholder текст
.input::placeholder {
color: #475569;
font-style: italic;
font-size: 14px;
}
/* Firefox-д нэмэлт хэрэгтэй байдаг */
.input::-moz-placeholder {
opacity: 1;
}
::selection — сонгосон текст
/* Хэрэглэгч текст сонгоход */
::selection {
background-color: #7c3aed;
color: #ffffff;
}
/* Тодорхой элементэд */
.code-block::selection {
background-color: #1e293b;
color: #a78bfa;
}
::first-line — эхний мөр
/* Нийтлэлийн эхний мөрийг онцлох */
.article-body::first-line {
font-weight: 600;
font-size: 1.1em;
color: #f1f5f9;
}
Бодит жишээ — custom checkbox
/* HTML checkbox-г нуугаад CSS-ээр custom дүрслэл хийх */
.custom-checkbox input[type="checkbox"] {
display: none; /* оригиналыг нуух */
}
.custom-checkbox label {
display: flex;
align-items: center;
gap: 10px;
cursor: pointer;
}
.custom-checkbox label::before {
content: "";
width: 20px;
height: 20px;
border: 2px solid #475569;
border-radius: 4px;
background: transparent;
flex-shrink: 0;
transition: all 0.15s;
}
/* Checked төлөвт */
.custom-checkbox input:checked + label::before {
background: #a78bfa;
border-color: #a78bfa;
}
.custom-checkbox input:checked + label::after {
content: "✓";
position: absolute;
color: white;
font-size: 13px;
font-weight: bold;
}
::before ба ::after-ийн нийтлэг дүрэм
.element::before {
content: ""; /* заавал */
display: block; /* эсвэл inline-block, flex */
/* position, width, height тохируулж болно */
}
Pseudo-element-ийг position: absolute-тай хэрэглэхдээ parent-д position: relative өгнө:
.parent {
position: relative; /* pseudo-element-ийн containing block болно */
}
.parent::after {
content: "";
position: absolute;
/* parent-тай харьцангуй байрлана */
}
Дараагийн хичээлд:
CSS Custom property (variable) — --color-primary зарлаж, var() ашиглан дахин ашиглагдах, засахад хялбар CSS бичих арга. Dark/light theme-г variable-аар хэрхэн удирдах талаар судална.