### بهبود عملکرد رویدادهای پیمایش (Scroll) 👨🏫
بهتازگی با این هشدار مواجه شدم:
> "\[Violation] Added non-passive event listener to a scroll-blocking 'wheel' event. Consider marking event handler as 'passive' to make the page more responsive."
این پیام باعث شد رویکردم به مدیریت رویدادهای پیمایش را بازبینی کنم.
زمانی که با رویدادهایی مانند پیمایش با ماوس (
بهطور پیشفرض، مرورگرها میتوانند رفتار استاندارد (مانند پیمایش) را مسدود کنند، بهویژه اگر در تابع پردازشگر از
این مسأله ممکن است باعث تأخیر در واکنش رابط کاربری**، خصوصاً در دستگاههای همراه شود. 😔
---
### راهحل: استفاده از گزینهی `{ passive: true }` 🤨
با افزودن گزینهی `{ passive: true }` هنگام افزودن شنوندهی رویداد (Event Listener)، به مرورگر اطلاع میدهیم که قرار نیست رفتار پیشفرض را لغو کنیم.
در نتیجه، مرورگر میتواند بلافاصله اقدام به انجام رفتار استاندارد (مثل پیمایش) کند و منتظر اجرای کامل کد شما نماند.
```javascript
element.addEventListener('wheel', (event) => {
// کد مربوطه
}, { passive: true });
```
---
### چرا این موضوع اهمیت دارد؟
✔️ **افزایش سرعت واکنش رویدادها
مرورگر بلافاصله پیمایش را آغاز میکند و این باعث بهبود پاسخگویی رابط کاربری میشود — خصوصاً در تلفنهای هوشمند و تبلتها.
✔️ عدم انسداد رندر شدن صفحه
با استفاده از
---
### چند نکتهی مهم:
۱️⃣ مقدار پیشفرض `passive` برابر با false است
یعنی در حالت عادی میتوان از
اما مرورگرها در مورد برخی رویدادها مانند
۲️⃣ اگر شما `passive: true` را صراحتاً تعیین کنید و در تابع مربوطه از
---
### جمعبندی:
استفاده از گزینهی
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
بهتازگی با این هشدار مواجه شدم:
> "\[Violation] Added non-passive event listener to a scroll-blocking 'wheel' event. Consider marking event handler as 'passive' to make the page more responsive."
این پیام باعث شد رویکردم به مدیریت رویدادهای پیمایش را بازبینی کنم.
زمانی که با رویدادهایی مانند پیمایش با ماوس (
wheel) یا حرکت لمسی (touchmove) سروکار داریم، معمولاً چالشهایی در زمینهی عملکرد (Performance) به وجود میآید.بهطور پیشفرض، مرورگرها میتوانند رفتار استاندارد (مانند پیمایش) را مسدود کنند، بهویژه اگر در تابع پردازشگر از
event.preventDefault() استفاده شود.این مسأله ممکن است باعث تأخیر در واکنش رابط کاربری**، خصوصاً در دستگاههای همراه شود. 😔
---
### راهحل: استفاده از گزینهی `{ passive: true }` 🤨
با افزودن گزینهی `{ passive: true }` هنگام افزودن شنوندهی رویداد (Event Listener)، به مرورگر اطلاع میدهیم که قرار نیست رفتار پیشفرض را لغو کنیم.
در نتیجه، مرورگر میتواند بلافاصله اقدام به انجام رفتار استاندارد (مثل پیمایش) کند و منتظر اجرای کامل کد شما نماند.
```javascript
element.addEventListener('wheel', (event) => {
// کد مربوطه
}, { passive: true });
```
---
### چرا این موضوع اهمیت دارد؟
✔️ **افزایش سرعت واکنش رویدادها
مرورگر بلافاصله پیمایش را آغاز میکند و این باعث بهبود پاسخگویی رابط کاربری میشود — خصوصاً در تلفنهای هوشمند و تبلتها.
✔️ عدم انسداد رندر شدن صفحه
با استفاده از
{ passive: true } مرورگر دیگر منتظر اجرای کامل تابع پردازشگر نمیماند، که این موضوع باعث کاهش تأخیر و افزایش روانی حرکت صفحه میشود.---
### چند نکتهی مهم:
۱️⃣ مقدار پیشفرض `passive` برابر با false است
یعنی در حالت عادی میتوان از
event.preventDefault() برای لغو رفتار پیشفرض استفاده کرد.اما مرورگرها در مورد برخی رویدادها مانند
wheel`، `touchmove و touchstart در سطوحی مثل window`، `document و `document.body`، بهصورت خودکار passive را برابر با true قرار میدهند تا از ایجاد تاخیر جلوگیری شود.۲️⃣ اگر شما `passive: true` را صراحتاً تعیین کنید و در تابع مربوطه از
event.preventDefault() استفاده نمایید، مرورگر این دستور را نادیده خواهد گرفت.---
### جمعبندی:
استفاده از گزینهی
{ passive: true } یک تغییر ساده اما مؤثر برای بهبود روانی و واکنشپذیری اپلیکیشن است — بهویژه در سناریوهایی که با پیمایش و تعامل لمسی سروکار داریم. ✅#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
🔥1
شکستن کلمات همراه با خط تیره 😉
موضوع ساده به نظر میرسد — وقتی یک کلمه طولانی در یک خط جا نمیشود، باید آن را با خط تیره به خط بعد منتقل کرد. اما چطور این کار را بهدرستی انجام دهیم تا هم ظاهر متن زیبا باشد و هم ساختار آن بههم نریزد؟
بیایید بررسی کنیم برای این کار در CSS چه نیاز داریم. ☺️
برای شکستن صحیح کلمات همراه با خط تیره، سه ویژگی اصلی مورد نیاز است:
✔️ overflow-wrap: break-word; — این ویژگی باعث میشود کلمات طولانی (مثل نشانیهای اینترنتی یا اصطلاحات پیچیده) در صورت کمبود فضا به خط بعد منتقل شوند.
✔️ word-break: break-word; — این ویژگی اجازه میدهد کلمات در نقاط مناسب نیز شکسته شوند، اگر در یک خط جا نشوند.
✔️ hyphens: auto; — مسئول اضافه کردن خودکار خط تیره هنگام شکستن کلمات است، بر اساس قواعد زبان مورد استفاده.
نمونه کد:
حالا همهچیز طبق قواعد زبان کار خواهد کرد: کلمات همراه با خط تیره شکسته میشوند و در عین حال متن، منظم و زیبا باقی میماند. 👍
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
موضوع ساده به نظر میرسد — وقتی یک کلمه طولانی در یک خط جا نمیشود، باید آن را با خط تیره به خط بعد منتقل کرد. اما چطور این کار را بهدرستی انجام دهیم تا هم ظاهر متن زیبا باشد و هم ساختار آن بههم نریزد؟
بیایید بررسی کنیم برای این کار در CSS چه نیاز داریم. ☺️
برای شکستن صحیح کلمات همراه با خط تیره، سه ویژگی اصلی مورد نیاز است:
✔️ overflow-wrap: break-word; — این ویژگی باعث میشود کلمات طولانی (مثل نشانیهای اینترنتی یا اصطلاحات پیچیده) در صورت کمبود فضا به خط بعد منتقل شوند.
✔️ word-break: break-word; — این ویژگی اجازه میدهد کلمات در نقاط مناسب نیز شکسته شوند، اگر در یک خط جا نشوند.
✔️ hyphens: auto; — مسئول اضافه کردن خودکار خط تیره هنگام شکستن کلمات است، بر اساس قواعد زبان مورد استفاده.
نمونه کد:
.text {
overflow-wrap: break-word; /* اجازه شکستن کلمات طولانی */
word-break: break-word; /* شکستن کلمات در نقاط مناسب */
hyphens: auto; /* افزودن خودکار خط تیره هنگام شکستن */
}حالا همهچیز طبق قواعد زبان کار خواهد کرد: کلمات همراه با خط تیره شکسته میشوند و در عین حال متن، منظم و زیبا باقی میماند. 👍
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
یادآوری دربارهی `.setProperty()` و متغیرهای CSS 😉
همهی ما متد `.setProperty()` میشناسیم و معمولاً زمانی به یادش میافتیم که لازم باشد یک ویژگی CSS را مستقیماً از طریق JavaScript تغییر دهیم.
اما بهراحتی میتوان فراموش کرد که با همین متد میتوان متغیرهای CSS را نیز تغییر داد — و این در بسیاری موارد بسیار کارآمدتر است.
برای نمونه، یک متغیر سراسری در `:root`:
و در JavaScript:
اکنون تمام عناصری که مقدار
کجا استفاده از متغیرها از طریق `.setProperty()` بیشتر به چشم میآید؟
✔️ انیمیشنها — تنها با تغییر یک متغیر، تمام استایلهای مرتبط بهصورت روان و از طریق CSS transition بهروز میشوند.
✔️ استفاده در content — میتوان متن یا نمادی را در یک متغیر ذخیره کرد و آن را بهصورت پویا تغییر داد.
در نتیجه، `.setProperty()` تنها برای تغییر ویژگیها نیست، بلکه ابزاری قدرتمند برای مدیریت متغیرهای CSS نیز بهشمار میرود ⚡️
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
همهی ما متد `.setProperty()` میشناسیم و معمولاً زمانی به یادش میافتیم که لازم باشد یک ویژگی CSS را مستقیماً از طریق JavaScript تغییر دهیم.
اما بهراحتی میتوان فراموش کرد که با همین متد میتوان متغیرهای CSS را نیز تغییر داد — و این در بسیاری موارد بسیار کارآمدتر است.
برای نمونه، یک متغیر سراسری در `:root`:
:root {
--main-color: #333;
}و در JavaScript:
// تغییر خود متغیر، نه ویژگی مستقیم
document.documentElement.style.setProperty('--main-color', '#ff6600');
اکنون تمام عناصری که مقدار
color: var(--main-color) دارند، بهطور خودکار مقدار جدید را دریافت میکنند. 👍کجا استفاده از متغیرها از طریق `.setProperty()` بیشتر به چشم میآید؟
✔️ انیمیشنها — تنها با تغییر یک متغیر، تمام استایلهای مرتبط بهصورت روان و از طریق CSS transition بهروز میشوند.
✔️ استفاده در content — میتوان متن یا نمادی را در یک متغیر ذخیره کرد و آن را بهصورت پویا تغییر داد.
.btn::after {
content: var(--btn-label);
}btn.style.setProperty('--btn-label', '"✓"');در نتیجه، `.setProperty()` تنها برای تغییر ویژگیها نیست، بلکه ابزاری قدرتمند برای مدیریت متغیرهای CSS نیز بهشمار میرود ⚡️
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
👍1
Screencast of the different caret-shape possible values.webm
960.6 KB
نحو تعریف ویژگی caret-shape بسیار ساده است:
caret-shape: auto | bar | block | underscore;
مقدار اولیه auto است، که به مرورگر اجازه میدهد شکل نشانگر را بر اساس استانداردهای پلتفرم در موقعیتهای مختلف تعیین کند. اما تا کنون همیشه از نشانگر خط عمودی (|) استفاده شده است.
شما میتوانید نشانگر بلوک (█) یا زیرخط (_) را انتخاب کنید، که برای برخی اپلیکیشنها مانند ویرایشگر کد کاربردی و جلوهای جذاب دارد.
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
caret-shape: auto | bar | block | underscore;
مقدار اولیه auto است، که به مرورگر اجازه میدهد شکل نشانگر را بر اساس استانداردهای پلتفرم در موقعیتهای مختلف تعیین کند. اما تا کنون همیشه از نشانگر خط عمودی (|) استفاده شده است.
شما میتوانید نشانگر بلوک (█) یا زیرخط (_) را انتخاب کنید، که برای برخی اپلیکیشنها مانند ویرایشگر کد کاربردی و جلوهای جذاب دارد.
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
میدانستید که nth-child در CSS از چند سال پیش به صورت استاندارد قابل استفاده شده است؟
منظورم این است: قبلاً انتخاب شما محدود بود؛ میتوانستی از nth-child برای شمارهگذاری گرهها (تگها) بهطور عمومی استفاده کنی یا nth-of-type برای شمارهگذاری نوع خاصی از گرهها (div، p، section).
چطور میتوانستم دومین عنصر با کلاس .star را انتخاب کنم؟
و چیزی که من نمیدانستم این است که nth-child اکنون میتواند یک سلکتور به شکل آرگومان of بگیرد!
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
منظورم این است: قبلاً انتخاب شما محدود بود؛ میتوانستی از nth-child برای شمارهگذاری گرهها (تگها) بهطور عمومی استفاده کنی یا nth-of-type برای شمارهگذاری نوع خاصی از گرهها (div، p، section).
چطور میتوانستم دومین عنصر با کلاس .star را انتخاب کنم؟
و چیزی که من نمیدانستم این است که nth-child اکنون میتواند یک سلکتور به شکل آرگومان of بگیرد!
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
فرض کنید یک گالری عکس یا یک لیست آیتم دارید و وقتی اسکرول میکنید، هر تصویر یا آیتم بهصورت دقیق و منظم جلوی چشم شما قرار میگیرد، نه اینکه نیمهای از آن نمایش داده شود.
Scroll Snap دقیقاً همین کار را انجام میدهد: وقتی کاربر اسکرول میکند، مرورگر بهصورت خودکار موقعیت صفحه را روی نقاط مشخص (Snap Points) قفل میکند. مثل اینکه یک مغناطیس نامرئی روی هر آیتم گذاشتهایم که وقتی نزدیک میشود، صفحه آن را درست در وسط یا بالای دید شما قرار میدهد.
ویژگی scroll-snap-type یک خصوصیت الزامی برای هر کانتینر قابل اسکرول است که میخواهید روی آن scroll snapping فعال شود. این ویژگی به سه سؤال برای کانتینر پاسخ میدهد:
1-آیا این کانتینر از scroll snapping استفاده میکند؟
2-روی کدام محور — افقی (x)، عمودی (y)، بلوک (block) یا خطی (inline) — scroll snapping اعمال شود؟
3-رفتار scroll snapping چگونه باشد؟ آیا همیشه اجباری (mandatory) است، یا فقط زمانی که کاربر به موقعیت اسنپ نزدیک شود فعال میشود؟
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
Scroll Snap دقیقاً همین کار را انجام میدهد: وقتی کاربر اسکرول میکند، مرورگر بهصورت خودکار موقعیت صفحه را روی نقاط مشخص (Snap Points) قفل میکند. مثل اینکه یک مغناطیس نامرئی روی هر آیتم گذاشتهایم که وقتی نزدیک میشود، صفحه آن را درست در وسط یا بالای دید شما قرار میدهد.
ویژگی scroll-snap-type یک خصوصیت الزامی برای هر کانتینر قابل اسکرول است که میخواهید روی آن scroll snapping فعال شود. این ویژگی به سه سؤال برای کانتینر پاسخ میدهد:
1-آیا این کانتینر از scroll snapping استفاده میکند؟
2-روی کدام محور — افقی (x)، عمودی (y)، بلوک (block) یا خطی (inline) — scroll snapping اعمال شود؟
3-رفتار scroll snapping چگونه باشد؟ آیا همیشه اجباری (mandatory) است، یا فقط زمانی که کاربر به موقعیت اسنپ نزدیک شود فعال میشود؟
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
👍3🔥1
دربارهٔ مشکل مرکزچینی عمودی محتوا در CSS میتوان افسانهها نوشت
خیلی هم غمانگیز است که این داستانها کمکم به پایان میرسند، زیرا حالا ما نه تنها Flex و Grid را داریم، بلکه یک ویژگی ساده و قابلفهم به نام align-content هم در دسترس است
بله، این ویژگی از دیرباز پایهای برای مدلهای Flex و Grid بوده است، اما از نسخههای جدید مرورگرها — Chrome 123**، **Firefox 125 و Safari 17.4 — پشتیبانی میشود و اکنون در مدل بلوکی (Block Layout) هم قابل استفاده است! 🎉
مثال ساده:
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
خیلی هم غمانگیز است که این داستانها کمکم به پایان میرسند، زیرا حالا ما نه تنها Flex و Grid را داریم، بلکه یک ویژگی ساده و قابلفهم به نام align-content هم در دسترس است
بله، این ویژگی از دیرباز پایهای برای مدلهای Flex و Grid بوده است، اما از نسخههای جدید مرورگرها — Chrome 123**، **Firefox 125 و Safari 17.4 — پشتیبانی میشود و اکنون در مدل بلوکی (Block Layout) هم قابل استفاده است! 🎉
مثال ساده:
.container {
align-content: center;
}#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
👍4
در مرورگر سافاری روی سیستمعامل آیاواس یک قابلیت جالب وجود دارد: وقتی انگشتتان را روی یک عنصر، مثلاً یک پیوند، نگه دارید، پنجرهای شناور باز میشود که پیشنمایش آن را نمایش میدهد. اما گاهی این ویژگی اصلاً کاربردی نیست و لازم است راهی برای غیرفعال کردن آن پیدا شود.
طبق معمول، این روش چندان هم استاندارد نیست
سپاس از اپل، همیشه همینطور خاص!
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
طبق معمول، این روش چندان هم استاندارد نیست
سپاس از اپل، همیشه همینطور خاص!
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
👍2
بررسی آزاردهندهترین عنصر در میان تمام ویجتهای استاندارد HTML
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
👍3
### مقادیر دوگانه در ویژگی display در CSS 🤔
ویژگی display در CSS تعیین میکند که عناصر چگونه در صفحه نمایش داده شوند. هنگامی که از مقادیر دوگانه استفاده میکنیم، میتوانیم دو نوع رفتار نمایش را برای یک عنصر ترکیب کنیم و در نتیجه انعطافپذیری بیشتری به دست آوریم.
#### مقادیر دوگانه چیست؟
🧩 مقدار نخست، رفتار اصلی عنصر را مشخص میکند (مانند *block*، *inline* یا *flex*).
🧩 مقدار دوم، این رفتار را تکمیل و اصلاح میکند.
بهعنوان نمونه، در حالت inline-block**، عنصر مانند یک عنصر درونخطی رفتار میکند، اما در عین حال میتوان برای آن ابعاد مشخص کرد، درست مانند یک عنصر بلوکی. 👍
```html
<div style="display: inline-block; width: 100px; height: 50px; background-color: lightblue;">بلوک</div>
```
#### نمونههای دیگر:
✔️ **inline-block:
⏺️ *inline* — عنصر در همان خط باقی میماند.
⏺️ *block* — امکان تعریف اندازهها فراهم است.
✔️ inline-flex:
⏺️ *inline* — ظرف (container) موجب شکستن خط نمیشود.
⏺️ *flex* — عناصر درون ظرف بر اساس قوانین فِلِکسباکس چیده میشوند.
---
### نتیجهگیری
مقادیر دوگانه در CSS باعث سادهتر شدن ساختار صفحه میشوند و امکان طراحی صفحات منعطفتر و واکنشگرا را با حداقل میزان کدنویسی فراهم میآورند. 💗
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
ویژگی display در CSS تعیین میکند که عناصر چگونه در صفحه نمایش داده شوند. هنگامی که از مقادیر دوگانه استفاده میکنیم، میتوانیم دو نوع رفتار نمایش را برای یک عنصر ترکیب کنیم و در نتیجه انعطافپذیری بیشتری به دست آوریم.
#### مقادیر دوگانه چیست؟
🧩 مقدار نخست، رفتار اصلی عنصر را مشخص میکند (مانند *block*، *inline* یا *flex*).
🧩 مقدار دوم، این رفتار را تکمیل و اصلاح میکند.
بهعنوان نمونه، در حالت inline-block**، عنصر مانند یک عنصر درونخطی رفتار میکند، اما در عین حال میتوان برای آن ابعاد مشخص کرد، درست مانند یک عنصر بلوکی. 👍
```html
<div style="display: inline-block; width: 100px; height: 50px; background-color: lightblue;">بلوک</div>
```
#### نمونههای دیگر:
✔️ **inline-block:
⏺️ *inline* — عنصر در همان خط باقی میماند.
⏺️ *block* — امکان تعریف اندازهها فراهم است.
✔️ inline-flex:
⏺️ *inline* — ظرف (container) موجب شکستن خط نمیشود.
⏺️ *flex* — عناصر درون ظرف بر اساس قوانین فِلِکسباکس چیده میشوند.
---
### نتیجهگیری
مقادیر دوگانه در CSS باعث سادهتر شدن ساختار صفحه میشوند و امکان طراحی صفحات منعطفتر و واکنشگرا را با حداقل میزان کدنویسی فراهم میآورند. 💗
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
👍1