در حال بارگذاری...

تغییر استایل CSS

روی دیوار کارگاه یک تراشهٔ رنگ چسبیده. عنوانش Oak است و خود نمونه می‌گوید open. در شیوه‌نامه، قانون #swatch رنگ را navy و اندازهٔ قلم را 16px گذاشته. کلاس dusk هنوز روی نمونه نیست. قانون همان کلاس فقط font-style: italic است. اینجا استایل را عوض می‌کنی: یا اعلان داخل خود عنصر را می‌نویسی، یا همان کلاس را اضافه می‌کنی. واژهٔ open سر جایش می‌ماند.
style فقط اعلان درون‌خطی را نشان می‌دهد. برای همین، پیش از هر نوشتن، swatch.style.color و swatch.style.fontSize رشتهٔ خالی‌اند. اندازهٔ واقعی را getComputedStyle(swatch).fontSize می‌گوید و آن 16px است.
با swatch.style.color = "teal" و swatch.style.fontSize = "22px" همان دو مقدار داخل عنصر ذخیره می‌شود. نوشتن style.font-size با نقطه خطای نحو است؛ فایل این کار را نمی‌کند. زمینه را با setProperty("background-color", "wheat") می‌گذاری. بعد از آن هم getPropertyValue("background-color") و هم style.backgroundColor مقدار wheat را برمی‌گردانند.
classList.add("dusk") فقط نشان کلاس را می‌گذارد. style.color همان teal می‌ماند. style.fontStyle خالی می‌ماند. مقدار استفاده‌شدهٔ font-style می‌شود italic.
یک آزمایش جدا هست: cssText = "color: maroon;". این یکی کل اعلان درون‌خطی را عوض می‌کند. اندازه و زمینهٔ درون‌خطی پاک می‌شوند، ولی کلاس dusk می‌ماند. نمایش صفحه این خط را اجرا نمی‌کند. teal را نگه می‌دارد و با removeProperty("color") فقط رنگ درون‌خطی را برمی‌دارد. خط پایین تراشه می‌شود teal / 22px / empty / dusk. متن نمونه هنوز open است.

اعلان استایل، نه یک جملهٔ تازه روی تراشه

صفحهٔ قبل با textContent و innerHTML و insertAdjacentHTML واژه‌های برگهٔ اسکله را عوض کرد. اینجا به متن نمونه textContent نمی‌دهی، برچسب را تجزیه نمی‌کنی، و راه‌های پیدا کردن گره را با هم مقایسه نمی‌کنی. getElementById فقط تراشه را به دستت می‌دهد. درس همین اعلان درون‌خطی است و نشان کلاس.

هر نوشتن چه چیزی روی نمونه می‌گذارد

نمونه با واژهٔ open شروع می‌شود. navy و 16px از شیوه‌نامه‌اند و هنوز استایل درون‌خطی نداریم. ردیف‌ها را به ترتیب بخوان. ردیف cssText آزمایش کناری است. نمایش صفحه روی removeProperty می‌ایستد و آن پاک‌کردن یکجا را اجرا نمی‌کند.

📊 هر نوشتن چه چیزی روی نمونه می‌گذارد

نوشتن رشتهٔ درون‌خطی هنوز از برگه یا از کلاس لغزش رایج
هنوز ننوشته‌ای color و fontSize برابر "" fontSize محاسبه‌شده 16px است؛ رنگ استفاده‌شده navy خواندن navy از style.color
style.color = "teal" و style.fontSize = "22px" teal و 22px زمینه هنوز درون‌خطی نیست style.font-size که تجزیه نمی‌شود
setProperty("background-color", "wheat") backgroundColor برابر wheat رنگ هنوز teal اسم background-color به‌جای نام شتری
classList.add("dusk") fontStyle همان ""؛ رنگ همان teal fontStyle محاسبه‌شده italic انتظار italic داخل style.fontStyle
removeProperty("color") color دوباره "" fontSize همان 22px برگشتن اندازه به 16px
style.cssText = "color: maroon;" رنگ maroon؛ fontSize و زمینه "" کلاس dusk می‌ماند خیال اینکه cssText کلاس را برمی‌دارد

element.style فقط همان اعلان داخل عنصر است. قانون شیوه‌نامه آنجا دیده نمی‌شود، مگر خودت آن را داخل استایل درون‌خطی کپی کنی. getComputedStyle مقدار نهایی را می‌خواند، بعد از جمع شدن برگه و کلاس و استایل درون‌خطی. اگر یک ویژگی را درون‌خطی بنویسی، برای همان ویژگی بر برگه غلبه می‌کند. classList نشان کلاس را عوض می‌کند و به style.color یا style.fontStyle چیزی نمی‌نویسد. cssText کل ویژگی style را با یک رشته عوض می‌کند. removeProperty فقط یک ویژگی درون‌خطی را برمی‌دارد و بقیه می‌مانند.

اول تراشه را بخوان

فایل با عنوان Oak، متن open، و همان شیوه‌نامه باز می‌شود. هنوز هیچ مقداری نسبت داده نشده. سه لاگ اول سراغ استایل درون‌خطی می‌روند. لاگ چهارم اندازهٔ استفاده‌شده را می‌پرسد.

خواندن تراشه

javascript
let swatch = document.getElementById("swatch");
console.log(swatch.textContent);
console.log(swatch.style.color);
console.log(swatch.style.fontSize);
console.log(getComputedStyle(swatch).fontSize);

خروجی‌ها این‌هاست: open، رشتهٔ خالی، رشتهٔ خالی، و 16px. رنگ استفاده‌شده navy است و مرورگر آن را به شکل rgb() می‌گوید، نه با خود واژهٔ navy. چون style.color خالی است، آن لاگ navy نیست. عنوان Oak عنصر دیگری است. نوشتن‌های بعدی واژهٔ open را عوض نمی‌کنند.

نام شتری، مقدار درون‌خطی

color و fontSize ویژگی‌های همان اعلان‌اند. در CSS می‌نویسی font-size؛ در JavaScript می‌شود fontSize. شکل style.font-size برای تجزیه‌گر تفریق است، پس این فایل از آن استفاده نمی‌کند.

نام شتری

javascript
let swatch = document.getElementById("swatch");
swatch.style.color = "teal";
swatch.style.fontSize = "22px";
console.log(swatch.style.color);
console.log(swatch.style.fontSize);
console.log(swatch.style.backgroundColor);

سه خروجی: teal، 22px، و رشتهٔ خالی. زمینه هنوز تنظیم نشده. اندازهٔ استفاده‌شده حالا 22px است، چون مقدار درون‌خطی بر 16px برگه غلبه می‌کند. واژهٔ روی نمونه هنوز open است.

نام خط‌دار از setProperty رد می‌شود

setProperty اسم ویژگی را همان‌طور که در CSS هست می‌گیرد، با خط تیره. getPropertyValue همان اسم را می‌خواند. ویژگی backgroundColor هم همان مقداری را برمی‌گرداند که تازه ذخیره کردی.

نام خط‌دار

javascript
let swatch = document.getElementById("swatch");
swatch.style.setProperty("background-color", "wheat");
console.log(swatch.style.getPropertyValue("background-color"));
console.log(swatch.style.backgroundColor);

هر دو لاگ wheat است. color هنوز teal است و fontSize هنوز 22px. این فراخوانی یک ویژگی درون‌خطی اضافه می‌کند و قبلی‌ها را پاک نمی‌کند.

کلاس، style.fontStyle را پر نمی‌کند

قانون .dusk می‌گوید font-style: italic. با اضافه کردن کلاس، نشان dusk روی عنصر می‌نشیند. italic داخل قانون شیوه‌نامه است، پس رشتهٔ درون‌خطی fontStyle خالی می‌ماند. رنگ درون‌خطی هنوز teal است؛ یعنی کلاس جایش را نگرفته.

اضافه کردن کلاس

javascript
let swatch = document.getElementById("swatch");
swatch.classList.add("dusk");
console.log(swatch.classList.contains("dusk"));
console.log(swatch.style.color);
console.log(swatch.style.fontStyle);
console.log(getComputedStyle(swatch).fontStyle);

خروجی‌ها: true، teal، رشتهٔ خالی، و italic. contains نشان کلاس را می‌بیند. style.fontStyle اعلان درون‌خطی را می‌بیند. getComputedStyle مقدار استفاده‌شده را می‌بیند. این سه تا یکی نیستند.

cssText کل استایل درون‌خطی را عوض می‌کند

این بلوک آزمایش کناری است. فقط وقتی اجرا کن که teal و 22px و wheat و dusk از قبل نشسته باشند. دادن مقدار به cssText ویژگی style را از نو می‌نویسد و هر ویژگی درون‌خطی را که داخل آن رشته نیست می‌اندازد. نمایش صفحه، پایین‌تر، این خط را ندارد.

تعویض استایل درون‌خطی

javascript
let swatch = document.getElementById("swatch");
swatch.style.cssText = "color: maroon;";
console.log(swatch.style.color);
console.log(swatch.style.fontSize);
console.log(swatch.style.backgroundColor);
console.log(swatch.classList.contains("dusk"));

خروجی: maroon، رشتهٔ خالی، رشتهٔ خالی، و true. آن 22px درون‌خطی و wheat رفته‌اند. کلاس dusk هست، چون cssText ویژگی style را دست می‌زند نه ویژگی class را. متن نمونه هنوز open است.

یک خط زیر تراشه

اسکریپت ته body است، بعد از تراشه و شیوه‌نامه. teal و 22px و wheat را می‌گذارد، dusk را اضافه می‌کند، واژهٔ teal را نگه می‌دارد، و بعد فقط رنگ درون‌خطی را برمی‌دارد. به cssText مقدار نمی‌دهد. رنگ درون‌خطی خالی را با واژهٔ empty می‌نویسد تا خط خوانا بماند.

نمایش صفحه — تراشهٔ رنگ

html
<!DOCTYPE html>
<html>
<head>
<title>css style — page</title>
<style>
#swatch { color: navy; font-size: 16px; }
.dusk { font-style: italic; }
</style>
</head>
<body>
<article id="wall">
<h2 id="chip">Oak</h2>
<p id="swatch">open</p>
<p id="line">…</p>
</article>
<script>
let swatch = document.getElementById("swatch");
swatch.style.color = "teal";
swatch.style.fontSize = "22px";
swatch.style.setProperty("background-color", "wheat");
swatch.classList.add("dusk");
let saved = swatch.style.color;
swatch.style.removeProperty("color");
let inlineNow = swatch.style.color === "" ? "empty" : swatch.style.color;
let mark = swatch.classList.contains("dusk") ? "dusk" : "no";
document.getElementById("line").textContent = saved + " / " + swatch.style.fontSize + " / " + inlineNow + " / " + mark;
</script>
</body>
</html>

خط می‌شود teal / 22px / empty / dusk. متغیر saved همان teal را از قبلِ removeProperty نگه داشته. بعد از این فراخوانی style.color خالی است و style.fontSize هنوز 22px است. زمینه هنوز wheat است. نشان کلاس هنوز dusk است، پس font-style استفاده‌شده italic است. رنگ استفاده‌شده برمی‌گردد به برگه، یعنی navy، چون رنگ درون‌خطی رفته. متن نمونه هنوز open است. صفحهٔ بعد عنصر تازه می‌سازد و راه تازه‌ای برای نوشتن همین ویژگی‌های استایل نمی‌آورد.

تراشه را چک کن

  1. متن، دو رشتهٔ درون‌خطی، و اندازهٔ محاسبه‌شده را لاگ کن؛ انتظار open، دو رشتهٔ خالی، و 16px
  2. رنگ را teal و fontSize را 22px بگذار؛ انتظار teal و 22px و backgroundColor خالی
  3. زمینه را با setProperty بگذار و از هر دو خواندن wheat را بخواه؛ بعد dusk را اضافه کن و انتظار true، teal، fontStyle خالی، و italic محاسبه‌شده
  4. در آزمایش کناری cssText را برابر رنگ maroon بگذار؛ انتظار maroon، fontSize خالی، زمینهٔ خالی، و ماندن dusk
  5. خط صفحه را بخوان و انتظار teal / 22px / empty / dusk؛ متن نمونه را بخوان و انتظار open

لغزش‌های همین تراشه

صفحه باز می‌شود. مقدار از جنس اشتباه نوشته شده.

  • خواندن style.color در شروع و انتظار navy
  • نوشتن swatch.style.font-size که تجزیه‌گر رد می‌کند
  • انتظار اینکه classList.add("dusk") واژهٔ italic را داخل style.fontStyle بگذارد
  • انتظار اینکه همان اضافه کردن کلاس، style.color را از teal عوض کند
  • دادن cssText و انتظار ماندن اندازهٔ درون‌خطی 22px
  • دادن cssText و انتظار حذف کلاس dusk
  • فراخوانی removeProperty("color") و انتظار برگشتن fontSize به 16px
  • گذاشتن textContent روی نمونه در این صفحه؛ صفحهٔ قبل واژه‌ها را عوض می‌کرد
  • فراخوانی createElement اینجا؛ صفحهٔ بعد گرهٔ تازه می‌سازد

این‌ها را با خودت ببر

  • element.style اعلان درون‌خطی را می‌خواند؛ style.color اول خالی است و اندازهٔ استفاده‌شده 16px است
  • style.color و style.fontSize مقدارهای teal و 22px را نگه می‌دارند
  • setProperty("background-color", "wheat") با style.backgroundColor یکی است
  • classList.add("dusk") مقدار style.fontStyle را خالی می‌گذارد و استایل استفاده‌شده italic می‌شود
  • cssText = "color: maroon;" بقیهٔ مقدارهای درون‌خطی را پاک می‌کند و کلاس می‌ماند
  • removeProperty("color") فقط رنگ را برمی‌دارد، برای همین خط صفحه هنوز 22px را نشان می‌دهد
  • خط می‌شود teal / 22px / empty / dusk و متن نمونه open می‌ماند

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
8
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود