ÐÑполÑзование пеÑеменнÑÑ Ð² CSS
CSS пеÑеменнÑе (полÑзоваÑелÑÑкие CSS-ÑвойÑÑва) ÑÑо ÑÑÑноÑÑи, опÑеделÑемÑе авÑоÑом CSS, Ñ
ÑанÑÑие конкÑеÑнÑе знаÑениÑ, коÑоÑÑе можно повÑоÑно иÑполÑзоваÑÑ Ð² докÑменÑе. Ðни ÑÑÑанавливаÑÑÑÑ Ñ Ð¸ÑполÑзованием custom property ноÑаÑии (напÑимеÑ. --main-color: black;) и доÑÑÑÐ¿Ð½Ñ ÑеÑез ÑÑнкÑÐ¸Ñ var() (напÑимеÑ. color: var(--main-color);) .
СложнÑе веб-ÑайÑÑ Ð¸Ð¼ÐµÑÑ Ð¾ÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑое колиÑеÑÑво CSS, ÑаÑÑо Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑвом повÑоÑÑÑÑиÑ
ÑÑ Ð·Ð½Ð°Ñений. ÐапÑимеÑ, один и ÑÐ¾Ñ Ð¶Ðµ ÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð² ÑоÑнÑÑ
ÑазнÑÑ
меÑÑ, ÑÑо ÑÑебÑÐµÑ Ð³Ð»Ð¾Ð±Ð°Ð»Ñного поиÑка и заменÑ, еÑли ÑÑÐ¾Ñ ÑÐ²ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимо измениÑÑ. CSS пеÑеменнÑе позволÑÑÑ ÑоÑ
ÑанÑÑÑ Ð·Ð½Ð°Ñение в одном меÑÑе, а заÑем многокÑаÑно иÑполÑзоваÑÑ ÐµÐ³Ð¾ в лÑбом дÑÑгом меÑÑе. ÐополниÑелÑнÑм пÑеимÑÑеÑÑвом ÑвлÑÑÑÑÑ ÑеманÑиÑеÑкие иденÑиÑикаÑоÑÑ. ÐÐ»Ñ Ð¿ÑимеÑа: запиÑÑ --main-text-color более понÑÑна, Ñем #00ff00, оÑобенно еÑли ÑÑÐ¾Ñ Ð¶Ðµ ÑÐ²ÐµÑ Ð¸ÑполÑзÑеÑÑÑ Ð¸ в дÑÑгом конÑекÑÑе.
CSS пеÑеменнÑе подÑинÑÑÑÑÑ ÐºÐ°ÑÐºÐ°Ð´Ñ Ð¸ наÑледÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¾Ñ ÑÐ²Ð¾Ð¸Ñ ÑодиÑелей.
ÐÑновное иÑполÑзование
ÐбÑÑвление пеÑеменной:
element {
--main-bg-color: brown;
}
ÐÑполÑзование пеÑеменной:
element {
background-color: var(--main-bg-color);
}
ÐÑимеÑание:
Рболее Ñанней ÑпеÑиÑикаÑии пÑеÑÐ¸ÐºÑ Ð´Ð»Ñ Ð¿ÐµÑеменнÑÑ
бÑл var- , но позже бÑл изменÑн на --. Firefox 31 и вÑÑе ÑледÑÑÑ Ð½Ð¾Ð²Ð¾Ð¹ ÑпеÑиÑикаÑии.(Firefox bug 985838)
ÐеÑвÑй Ñаг Ñ CSS ÐеÑеменнÑми
ÐаÑнÑм Ñ ÑÑого пÑоÑÑого CSS, коÑоÑÑй окÑаÑÐ¸Ñ ÑлеменÑÑ ÑазнÑÑ ÐºÐ»Ð°ÑÑов одинаковÑм ÑвеÑом:
.one {
color: white;
background-color: brown;
margin: 10px;
width: 50px;
height: 50px;
display: inline-block;
}
.two {
color: white;
background-color: black;
margin: 10px;
width: 150px;
height: 70px;
display: inline-block;
}
.three {
color: white;
background-color: brown;
margin: 10px;
width: 75px;
}
.four {
color: white;
background-color: brown;
margin: 10px;
width: 100px;
}
.five {
background-color: brown;
}
ÐÑ Ð¿Ñименим его к ÑÑÐ¾Ð¼Ñ HTML:
<div>
<div class="one"></div>
<div class="two">Text <span class="five">- more text</span></div>
<input class="three" />
<textarea class="four">Lorem Ipsum</textarea>
</div>
ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ð½Ð°Ñ Ðº ÑÑомÑ:
ÐбÑаÑиÑе внимание на повÑоÑÐµÐ½Ð¸Ñ Ð² CSS. ÐоÑиÑневÑй Ñон ÑÑÑановлен в неÑколÑÐºÐ¸Ñ Ð¼ÐµÑÑÐ°Ñ . ÐÐ»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ CSS обÑÑвлений можно ÑказаÑÑ ÑÑÐ¾Ñ ÑÐ²ÐµÑ Ð²ÑÑе в каÑкаде и наÑледование CSS ÑеÑÐ¸Ñ ÑÑÑ Ð¿ÑоблемÑ. Ðо Ð´Ð»Ñ Ð½ÐµÑÑивиалÑнÑÑ Ð¿ÑоекÑов ÑÑо не вÑегда возможно. ÐбÑÑвив пеÑеменнÑÑ Ð² пÑевдоклаÑÑе :root, авÑÐ¾Ñ CSS Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð½ÐµÐ½ÑжнÑÑ Ð¿Ð¾Ð²ÑоÑений, иÑполÑзÑÑ ÑÑÑ Ð¿ÐµÑеменнÑÑ.
:root {
--main-bg-color: brown;
}
.one {
color: white;
background-color: var(--main-bg-color);
margin: 10px;
width: 50px;
height: 50px;
display: inline-block;
}
.two {
color: white;
background-color: black;
margin: 10px;
width: 150px;
height: 70px;
display: inline-block;
}
.three {
color: white;
background-color: var(--main-bg-color);
margin: 10px;
width: 75px;
}
.four {
color: white;
background-color: var(--main-bg-color);
margin: 10px;
width: 100px;
}
.five {
background-color: var(--main-bg-color);
}
ÐÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑÐ¾Ð¼Ñ Ð¶Ðµ ÑезÑлÑÑаÑÑ, ÑÑо и пÑедÑдÑÑий пÑимеÑ, но позволÑÐµÑ Ð¾Ð±ÑÑвиÑÑ Ð¶ÐµÐ»Ð°ÐµÐ¼Ð¾Ðµ ÑвойÑÑво ÑолÑко один Ñаз.
ÐаÑледование пеÑеменнÑÑ Ð² CSS и возвÑаÑаемÑе знаÑениÑ
ÐолÑзоваÑелÑÑкие ÑвойÑÑва могÑÑ Ð½Ð°ÑледоваÑÑÑÑ. ÐÑо ознаÑаеÑ, ÑÑо еÑли не ÑÑÑановлено никакого знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого ÑвойÑÑва на данном ÑлеменÑе, Ñо иÑполÑзÑеÑÑÑ ÑвойÑÑво его ÑодиÑелÑ:
<div class="one">
<div class="two">
<div class="three"></div>
<div class="four"></div>
</div>
</div>
Ñо ÑледÑÑÑим CSS:
.two {
--test: 10px;
}
.three {
--test: 2em;
}
Ð ÑезÑлÑÑаÑе var(--test) бÑдеÑ:
- Ð´Ð»Ñ ÑлеменÑа Ñ ÐºÐ»Ð°ÑÑом
class="two":10px - Ð´Ð»Ñ ÑлеменÑа Ñ ÐºÐ»Ð°ÑÑом
class="three":2em - Ð´Ð»Ñ ÑлеменÑа Ñ ÐºÐ»Ð°ÑÑом
class="four":10px(ÑнаÑледовано Ð¾Ñ ÑодиÑелÑ) - Ð´Ð»Ñ ÑлеменÑа Ñ ÐºÐ»Ð°ÑÑом
class="one": недопÑÑÑимое знаÑение, ÑÑо ÑвлÑеÑÑÑ Ð·Ð½Ð°Ñением по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð»Ñбого полÑзоваÑелÑÑкого ÑвойÑÑва.
ÐÑполÑзÑÑ var() Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво возвÑаÑаемÑÑ Ð·Ð½Ð°Ñений когда Ð´Ð°Ð½Ð½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ опÑеделена, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ пÑи ÑабоÑе Ñ Custom Elements и Shadow DOM.
ÐеÑвÑй аÑгÑÐ¼ÐµÐ½Ñ ÑÑнкÑии ÑÑо Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого ÑвойÑÑва. ÐÑоÑой аÑгÑÐ¼ÐµÐ½Ñ ÑÑнкÑии, еÑли имееÑÑÑ, ÑÑо возвÑаÑаемое знаÑение, коÑоÑÑй иÑполÑзÑеÑÑÑ Ð² каÑеÑÑве замеÑаÑÑего знаÑениÑ, когда полÑзоваÑелÑÑкое ÑвойÑÑво ÑвлÑеÑÑÑ Ð½Ðµ дейÑÑвиÑелÑнÑм. ÐапÑимеÑ:
.two {
color: var(--my-var, red); /* red еÑли --my-var не опÑеделена */
}
.three {
background-color: var(
--my-var,
var(--my-background, pink)
); /* pink еÑли --my-var и --my-background не опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ */
}
.three {
background-color: var(
--my-var,
--my-background,
pink
); /* "--my-background, pink" бÑÐ´ÐµÑ Ð²Ð¾ÑпÑинÑÑ ÐºÐ°Ðº знаÑение в ÑлÑÑае, еÑли --my-var не опÑеделена */
}
ÐÑимеÑание: РзамеÑаемÑÑ Ð·Ð½Ð°ÑениÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð·Ð°Ð¿ÑÑÑе по аналогии Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкими ÑвойÑÑвами. ÐапÑимеÑ, var(--foo, red, blue) опÑеделиÑÑ red, blue как замеÑаÑÑее знаÑение (Ð¾Ñ Ð¿ÐµÑвой запÑÑой и до конÑа опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑнкÑии)
ÐÑимеÑание: ÐаннÑй меÑод Ñакже вÑзÑÐ²Ð°ÐµÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ Ð¿ÑоизводиÑелÑноÑÑÑÑ. Ðн оÑобÑÐ°Ð¶Ð°ÐµÑ ÑÑÑаниÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½ÐµÐµ Ñем обÑÑно, Ñ.к. ÑÑебÑÐµÑ Ð²ÑÐµÐ¼Ñ Ð½Ð° ÑазбоÑ.
ÐбоÑнованноÑÑÑ Ð¸ полезноÑÑÑ
ÐонÑÑие клаÑÑиÑеÑкой конÑепÑии CSS, ÑвÑзанноÑÑÑ Ñ ÐºÐ°Ð¶Ð´Ñм ÑвойÑÑвом, не оÑÐµÐ½Ñ Ñдобно в плане полÑзоваÑелÑÑÐºÐ¸Ñ ÑвойÑÑв. Ðогда знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑÐºÐ¸Ñ ÑвойÑÑв обÑабаÑÑваÑÑÑÑ, бÑаÑÐ·ÐµÑ Ð½Ðµ Ð·Ð½Ð°ÐµÑ Ð³Ð´Ðµ они бÑдÑÑ Ð¿ÑименÑÑÑÑÑ, поÑÑÐ¾Ð¼Ñ Ð½Ñжно ÑÑиÑÑваÑÑ Ð¿Ð¾ÑÑи вÑе допÑÑÑимÑе знаÑениÑ.
Ð ÑожалениÑ, ÑÑи знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑÑÑ ÑеÑез ÑÑнкÑионалÑнÑÑ Ð·Ð°Ð¿Ð¸ÑÑ var() , в конÑекÑÑе где они, возможно, не имеÑÑ ÑмÑÑла. СвойÑÑва и полÑзоваÑелÑÑкие пеÑеменнÑе могÑÑ Ð¿ÑивеÑÑи к невалиднÑм вÑÑажениÑм CSS, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº новой конÑепÑии валидноÑÑи во вÑÐµÐ¼Ñ Ð¸ÑполнениÑ.