ProGraphs
818 subscribers
216 photos
6 videos
11 files
377 links
مجموعه مطالبی از برنامه‌نویسی وب و گرافیک

ProGraphs = Programming + Graphics
Download Telegram
ProGraphs
مفهوم CSS box model و بخش‌های تشکیل دهنده آن را توضیح دهید #interviewquestion #css @ProGraphs
جواب:

در صفحات وب، هر عنصر HTML به صورت یک مستطیل ترسیم می‌شود که از چند لایه تشکیل شده‌ است. این لایه‌ها ابعاد، حاشیه، فاصله و ... هر عنصر را مشخص می‌کنند:

content edge:
ناحیه‌ای که محتوای عنصر مانند متن، عکس و ... را شامل می‌شود و در حالت پیش‌فرض با پراپرتی‌های width و height تعیین می‌شود.

padding edge:
فاصله‌ی داخلی عنصر که از محتوا تا border را شامل می‌شود و با پراپرتی padding تعیین می‌شود.

border edge:
حاشیه‌ی عنصر که با پراپرتی border تعیین می‌شود.

margin edge:
فاصله‌ی خارجی عنصر که فاصله‌ی عنصر با عناصر مجاورش را مشخص می‌کند و با پراپرتی margin تعیین می‌شود.
​​جالب است بدانید که در CSS زمانی که padding یا margin را به صورت درصدی تعیین می‌کنیم، این مقدار در هر دو راستای عمودی و افقی به صورت درصدی از عرض نگهدارنده محاسبه می‌شود!

با استفاده از این ویژگی می‌توانیم عناصری با aspect ratio ثابت بسازیم.

#quicktip #css

@ProGraphs
🔺آیکون‌های SVG برای استفاده در وب👌🏻

https://svgicons.sparkk.fr/

#link #svg #icon

@ProGraphs
با اجرای این کد چه مقادیری در کنسول چاپ می‌شود؟ جوابتان را توضیح دهید

#interviewquestion #js

@ProGraphs
ProGraphs
با اجرای این کد چه مقادیری در کنسول چاپ می‌شود؟ جوابتان را توضیح دهید #interviewquestion #js @ProGraphs
جواب: عدد 6، 6 بار در کنسول چاپ می‌شود!

با دیدن این کد انتظار داریم که اعداد 0 تا 5 پشت سر هم در کنسول چاپ شوند. اما توابعی که داخل حلقه به setTimeout پاس می‌دهیم، همگی بعد از پایان کامل حلقه اجرا می‌شوند. و با توجه به مفهوم closure، به خود متغیر i دسترسی دارند و یک کپی از مقدار i در اختیار توابع نیست.

واضح است که پس از پایان حلقه، مقدار متغیر i عدد 6 خواهد بود. پس همه‌ی این توابع عدد 6 را در کنسول چاپ می‌کنند.

برای حل این مشکل باید کاری کنیم که به‌ازای هر iteration حلقه، یک scope جدید ایجاد شود و مقدار متغیر i در این scopeها ذخیره شود:
for (var i = 0; i < 6; i++) {
(function(x) {
setTimeout(function() {
console.log(x);
}, x * 500 );
})(i);
}
کل setTimeout را داخل یک تابع دیگر قرار دادیم چون هر تابع یک scope جدید ایجاد می‌کند.
به عنوان یک راه حل ساده‌تر می‌توانید متغیر i را به جای var با let تعریف کنیم تا در هر iteration یک scope جدید ایجاد شود.
🔺منابع گرافیکی برای دانلود رایگان

https://pngtree.com/

#link #graphic #resource

@ProGraphs
​​در جاوااسکریپت، پراپرتی آبجکت‌ها فقط یک نام و مقدار نیستند.
هر پراپرتی مجموعه‌ای از attributeها دارد که رفتار آن پراپرتی را تعیین می‌کند. به این مجموعه از ویژگی‌ها property descriptor می‌گوییم.

نحوه‌ی تغییر دادن و خواندن مقدار descriptor را در تصویر می‌بینید. به این ترتیب می‌توانیم رفتار هر پراپرتی یک آبجکت را کنترل کنیم.

(در مطالب بعدی تک تک این ویژگی‌ها را دقیق‌تر بررسی خواهیم کرد)

#quicktip #js

@ProGraphs
🔺لیست اندازه‌ صفحه نمایش و تراکم پیکسل برای Deviceهای محبوب

https://screensiz.es/

#link #viewport #screensize #pixeldensities

@ProGraphs
با اجرای این کد چه مقادیری در کنسول چاپ می‌شود؟

#interviewquestion #js

@ProGraphs
ProGraphs
با اجرای این کد چه مقادیری در کنسول چاپ می‌شود؟ #interviewquestion #js @ProGraphs
جواب:

تنها نکته‌ی مهم این کد این است که متغیر error identifier در بلاک catch، فقط داخل همان بلاک در دسترس است (block scope).

بنابراین زمانی که می‌خواهیم مقدار متغیر x را بیرون بلاک catch در کنسول چاپ کنیم، error دریافت می‌کنیم.

اما متغیر y را با کلمه کلیدی var تعریف کرده‌ایم. بنابراین متغیر y گلوبال خواهد بود و حتی بیرون از بلاک catch هم می‌توانیم مقدار آن را در کنسول چاپ کنیم.

به این ترتیب با اجرای این کد ابتدا مقدار متغیر y که عدد 20 است چاپ می‌شود و سپس error دریافت می‌کنیم.
​​ویژگی download برای تگ a در HTML.

زمانی که روی یک لینک با ویژگی download کلیک می‌کنیم،‌ مرورگر به جای navigate کردن به آدرس موردنظر، آن را دانلود می‌کند!

همچنین با تعیین یک مقدار برای ویژگی download می‌توانیم نام فایل دانلود شده را تغییر دهیم.

#quicktip #html

@ProGraphs