1. :not() μμ¬ ν΄λμ€ (Negation Pseudo-class)
- :not()μ νΉμ 쑰건μ λ§μ‘±νμ§ μλ μμλ₯Ό μ νν¨.
- κ΄νΈ μμ μ νμλ₯Ό λ£μ΄ ν΄λΉ μ νμμ ν΄λΉνμ§ μλ μμμλ§ μ€νμΌ μ μ©ν¨.
μ νμ:not(μ μΈν _μ νμ) {
/* μ€νμΌ */
}
μ μΈν μ νμμ λ€μ΄κ° μ μλ κ²:
- λ¨μ μ νμ (Simple Selector):
- νμ μ νμ (Type Selector): div, p, span, a λ± HTML νκ·Έ μ΄λ¦
- ν΄λμ€ μ νμ (Class Selector): .my-class
- ID μ νμ (ID Selector): #my-id
- μ 체 μ νμ (Universal Selector): *
- μμ± μ νμ (Attribute Selector): [type="text"], [data-value] λ±
- μΌλΆ μμ¬ ν΄λμ€ (Pseudo-class): :first-child, :last-child, :nth-child(), :checked, :enabled, :disabled λ± (λ¨, :not() μμ μ μ€μ²© λΆκ°)
μ μΈν μ νμμ λ€μ΄κ° μ μλ κ²:
- λ³΅ν© μ νμ (Combinator): > (μμ), + (μΈμ νμ ), ~ (μΌλ° νμ ), 곡백 (νμ)
- μμ¬ μμ (Pseudo-element): ::before, ::after, ::first-line λ±
- :not() μμ : :not(:not(...))κ³Ό κ°μ΄ μ€μ²©ν΄μ μ¬μ©ν μ μμ
- :has(): μ¬μ©ν μ μμ.
/* <p> μμ μ€ classκ° "special"μ΄ *μλ* μμμ μ€νμΌ μ μ© */
p:not(.special) {
color: blue;
}
/* typeμ΄ "submit"μ΄ *μλ* <input> μμμ μ€νμΌ μ μ© */
input:not([type="submit"]) {
border: 1px solid gray;
}
/* 첫 λ²μ§Έ μμ μμκ° *μλ* <li> μμμ μ€νμΌ μ μ© */
li:not(:first-child) {
margin-left: 10px;
}
/* <a> μμ μ€ hover μνκ° *μλ* μμμ μ€νμΌ μ μ©*/
a:not(:hover){
text-decoration: none;
}
2. :has() μμ¬ ν΄λμ€
- :has()λ νΉμ 쑰건μ λ§μ‘±νλ μμλ₯Ό ν¬ν¨νλ λΆλͺ¨ μμλ₯Ό μ νν¨.
- κ΄νΈ μμ μ νμλ₯Ό λ£μ΄, ν΄λΉ μ νμμ ν΄λΉνλ μμ λλ νμ μμλ₯Ό νλ μ΄μ κ°μ§λ λΆλͺ¨ μμμ μ€νμΌμ μ μ©ν¨.
μ νμ:has(ν¬ν¨_μ¬λΆλ₯Ό_κ²μ¬ν _μ νμ) {
/* μ€νμΌ */
}
ν¬ν¨ μ¬λΆλ₯Ό κ²μ¬ν μ νμμ λ€μ΄κ° μ μλ κ²:
- :has() μμλ κ±°μ λͺ¨λ μ’ λ₯μ μ νμλ₯Ό μ¬μ©ν μ μμ.
- λ¨μ μ νμλΏλ§ μλλΌ λ³΅ν© μ νμ, μμ¬ ν΄λμ€, μ¬μ§μ΄ λ€λ₯Έ :has()κΉμ§λ (μ€μ²©ν΄μ) μ¬μ©ν μ μμ.
/* <img> μμλ₯Ό *νλ μ΄μ ν¬ν¨νλ* <figure> μμμ μ€νμΌ μ μ© */
figure:has(img) {
border: 1px solid red;
}
/* classκ° "active"μΈ <li> μμλ₯Ό *νλ μ΄μ ν¬ν¨νλ* <ul> μμμ μ€νμΌ μ μ© */
ul:has(li.active) {
background-color: lightyellow;
}
/* <input type="checkbox"> μμκ° μ²΄ν¬λ(:checked) μνμΈ <label> μμμ μ€νμΌ μ μ©.
(label μμ input μ΄ μλ κ²½μ°) */
label:has(input[type="checkbox"]:checked) {
font-weight: bold;
}
/* <a>μμ λ°λ‘ λ€μ <p>μμκ° μ€λ κ²½μ°, aμ μ€νμΌ μ μ© */
a:has(+ p){
color: red;
}
3. :not()κ³Ό :has() μ‘°ν©
- μ νμ:not(:has(μμμ νμ)): μ νμμ ν΄λΉνλ μμ μ€, μμ μ νμμ ν΄λΉνλ μμ/νμ μμλ₯Ό κ°μ§μ§ μλ μμλ₯Ό μ ν.
- μ νμ:has(:not(μμμ νμ)): μ νμμ ν΄λΉνλ μμ μ€, μμ μ νμμ ν΄λΉνμ§ μλ μμ/νμμμλ₯Ό νλλΌλ κ°μ§λ μμ
.re-container:not(:has(#b1:hover, #b2:hover, #b3:hover)) #c1 {
display: block;
}
- #b1:hover, #b2:hover, #b3:hover: #b1, #b2, #b3 μ€ μ΄λ νλλΌλ hover μνμΈ μμλ₯Ό μ°Ύμ.
- :has(#b1:hover, #b2:hover, #b3:hover): 1λ²μμ μ°Ύμ μμλ₯Ό νλ μ΄μ ν¬ν¨νλ μμλ₯Ό μ°Ύμ. (re-container)
- .re-container:not(...): .re-container μμ μ€, 2λ²μ 쑰건μ ν΄λΉνμ§ μλ μμλ₯Ό μ νν¨.
- #b1, #b2, #b3 μ€ μ΄λ κ²λ hover μνκ° μλ κ²½μ°μ .re-containerλ₯Ό μ ν.
- ... #c1: 3λ²μμ μ νλ .re-containerμ νμ μμ μ€ #c1μ μ νν¨.
- display:block: μ νλ #c1μ 보μ΄κ² ν¨.
μ΄λ€ λ²νΌλ hoverλμ§ μμ μ΄κΈ° μνμμλ§ #c1μ΄ λ³΄μ΄κ² λ¨.
:not()κ³Ό :has()λ₯Ό μ‘°ν©νλ©΄ "Aλ₯Ό ν¬ν¨νμ§ μμΌλ©΄μ Bλ₯Ό ν¬ν¨νλ μμ" μ κ°μ 볡μ‘ν 쑰건μ ννν μ μμ.
'π» FE > π HTML & CSS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
html data-* (0) | 2025.03.26 |
---|---|
HTML νΌ νκ·Έμ λν΄μ μμλμ? μ λ μκΈ΄ μλλ°μ? (not νΌνΌνΈλ¦°) (3) | 2025.03.07 |
HTML μ μμμ± νλ°©νκΈ° π (0) | 2025.03.07 |
μΉ νμ΄μ§ λ©νλ°μ΄ν°μ λνμ¬ μμ보기 π (0) | 2025.03.06 |
01. Markup μΈμ΄μ Markdown μΈμ΄ λΉκ΅ (2) | 2025.03.04 |