Skip to content
GitHub

Specificity & The Cascade (ဘယ် Rule က အနိုင်ရမလဲ)

CSS ဆိုတဲ့ နာမည်မှာပါတဲ့ C ဟာ Cascading — “အဆင့်ဆင့် စီးဆင်းခြင်း” လို့ အဓိပ္ပာယ်ရပါတယ်။ Element တစ်ခုတည်းအတွက် Style Rule တွေ အများကြီး ထပ်ပြီးရေးမိတဲ့အခါ၊ Browser အနေနဲ့ ဘယ် Rule ကို အတည်ယူရမလဲ ဆိုတာ ဆုံးဖြတ်ဖို့ အောက်ပါ စည်းမျဉ်း (၃) ဆင့်ကို အသုံးပြုပါတယ်။

  1. Importance: ရေးထားတဲ့ Rule မှာ !important ပါသလား။
  2. Specificity: အသုံးပြုထားတဲ့ Selector ရဲ့ အလေးချိန် (တိကျမှု) က ဘယ်လောက်ရှိလဲ။
  3. Source Order: အပေါ်က အချက်နှစ်ခုလုံး တူညီနေမယ်ဆိုရင်တော့၊ နောက်ဆုံးမှ ရေးထားတဲ့ Rule က အနိုင်ရမှာ ဖြစ်ပါတယ်။

Specificity ကို တွက်ချက်ခြင်း

Section titled “Specificity ကို တွက်ချက်ခြင်း”

Selector တစ်ခုစီတိုင်းမှာ သူတို့နဲ့ သက်ဆိုင်တဲ့ အလေးချိန် အသီးသီး ရှိကြပါတယ်။ အလေးချိန် ပိုများတဲ့ Selector က အနိုင်ရမှာပါ။

Selector အမျိုးအစားဥပမာအလေးချိန်
Inline stylestyle="..."1000
ID#header100
Class / Attribute / Pseudo-class.btn [type] :hover10
Element / Pseudo-elementdiv p ::before1
CSS Specificity — selector အမျိုးအစားအလိုက် အလေးချိန်နှင့် တွက်ချက်ပုံ

အောက်မှာ ပေးထားတဲ့ HTML Code လေးမှာ စာသားက ဘယ်အရောင် ဖြစ်သွားမလဲဆိုတာ လက်တွေ့ ကြည့်ကြရအောင်ပါ။

<p id="intro" class="lead">မင်္ဂလာပါ</p>
p { color: black; } /* အလေးချိန် = 1 */
.lead { color: green; } /* အလေးချိန် = 10 */
#intro { color: blue; } /* အလေးချိန် = 100 */
ရလဒ်: စာသားက အပြာရောင် (blue) ဖြစ်မယ်
→ #intro (100) က အားအကြီးဆုံးမို့ အနိုင်ရတယ်

Source Order (နောက်ဆုံး ရေးတာ အနိုင်ရခြင်း)

Section titled “Source Order (နောက်ဆုံး ရေးတာ အနိုင်ရခြင်း)”

တကယ်လို့ Specificity တွေ တူညီ နေခဲ့ရင်တော့၊ ခင်ဗျားရဲ့ CSS ဖိုင်ထဲမှာ နောက်ဆုံး ရေးခဲ့တဲ့ Rule က အနိုင်ရသွားမှာ ဖြစ်ပါတယ်။

.btn { background: blue; }
.btn { background: red; } /* ← ဒါ အနိုင်ရမယ် (နောက်မှ ရေးထားလို့) */
ရလဒ်: button က အနီရောင် (red) ဖြစ်မယ်

!important — အားလုံးကို ကျော်ဖြတ်သူ

Section titled “!important — အားလုံးကို ကျော်ဖြတ်သူ”

Style တစ်ခုမှာ !important ကို ထည့်ရေးလိုက်ရင် Specificity အလေးချိန် ဘယ်လောက်ပဲ များနေပါစေ သူ့ကို ကျော်ဖြတ်ပြီး အနိုင်ရသွားမှာပါ။ ဒါပေမဲ့ ဒါကို အလွန်အကျွံ မသုံးဖို့တော့ အကြံပေးချင်ပါတယ် — ဘာလို့လဲဆိုတော့ နောက်ပိုင်း Code တွေ ပြန်ပြင်တဲ့အခါ Style တွေ Override လုပ်ရတာ အရမ်းကို ခက်ခဲသွားစေလို့ပါ။

p { color: blue !important; } /* ဘယ် rule မှ ကျော်လို့ မရတော့ဘူး */

Inheritance (အမွေဆက်ခံခြင်း)

Section titled “Inheritance (အမွေဆက်ခံခြင်း)”

Property တချို့ (ဥပမာ — color, font-family, font-size စတာတွေ) ကို Parent Element မှာ သတ်မှတ်ပေးလိုက်ရင်၊ သူ့အထဲမှာရှိတဲ့ Child Element တွေကလည်း အဲဒီ Style တွေကို အလိုအလျောက် အမွေဆက်ခံ (Inherit) ရရှိသွားမှာ ဖြစ်ပါတယ်။

body {
font-family: "Padauk", sans-serif;
color: #333;
}
/* body အထဲက စာသား အားလုံး ဒီ font နဲ့ အရောင်ကို အလိုလို ရသွားမယ် */