ویب جامد صفحات سے بہت آگے نکل گیا ہے۔ صارفین ایسے انٹرفیس کی توقع کرتے ہیں جو بصری طور پر شاندار، ہموار اور ہر کسی کے لیے قابل رسائی ہوں۔ React، جدید CSS تکنیکوں کے ساتھ مل کر، ڈویلپرز کو ان توقعات پر پورا اترنے کے لیے ٹولز فراہم کرتا ہے۔ یہ گائیڈ فاؤنڈیشنل لے آؤٹ سسٹمز سے لے کر جدید اینیمیشنز اور ڈیزائن سسٹم آرکیٹیکچر تک ہر چیز کا احاطہ کرتا ہے۔
جدید سی ایس ایس لے آؤٹ: گرڈ اور فلیکس باکس
CSS گرڈ اور پلے آؤٹ جدید کے دو فلیکس آؤٹ ہیں۔ یہ سمجھنا کہ ہر ایک کو کب استعمال کرنا ہے جوابی انٹرفیس بنانے کے لیے ضروری ہے۔
CSS گرڈ دو جہتی لے آؤٹس کے لیے
گرڈ صفحہ کی سطح کے لے آؤٹس اور کسی بھی ایسے ڈیزائن پر بہتر ہے جس کے لیے ایک ساتھ قطاروں اور کالموں پر کنٹرول کی ضرورت ہوتی ہے:
.dashboard {
display: grid;
grid-template-columns: 250px 1fr 300px;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"sidebar header aside"
"sidebar main aside"
"sidebar footer aside";
gap: 1rem;
min-height: 100vh;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.aside { grid-area: aside; }
.footer { grid-area: footer; }Flexbox X9TAG9X کے لیے Flexbox X9TAGLX کے لیے Flexbox کم ہے اجزاء کی سطح کے لے آؤٹ — نیویگیشن بارز، کارڈ کی قطاریں، فارم لے آؤٹ، اور کوئی بھی مواد جو ایک سمت میں بہتا ہے:.nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem 2rem;
}
.nav-links {
display: flex;
gap: 1.5rem;
list-style: none;
}
کنٹینر کے سوالات
.nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem 2rem;
}
.nav-links {
display: flex;
gap: 1.5rem;
list-style: none;
}کنٹینر کے سوالات اجزاء پر مبنی ڈیزائن کے لیے گیم چینجر ہیں۔ میڈیا کے سوالات کے برعکس جو ویو پورٹ کی چوڑائی کا جواب دیتے ہیں، کنٹینر کے سوالات اجزاء کے کنٹینر کے سائز کا جواب دیتے ہیں۔ اس کا مطلب ہے کہ کارڈ کا جزو اپنے لے آؤٹ کو ڈھال سکتا ہے چاہے وہ تنگ سائڈبار میں ظاہر ہو یا ایک وسیع مرکزی مواد کے علاقے میں:
.card-container {
container-type: inline-size;
container-name: card;
}
@container card (min-width: 400px) {
.card {
display: grid;
grid-template-columns: 200px 1fr;
gap: 1rem;
}
}
@container card (max-width: 399px) {
.card {
display: flex;
flex-direction: column;
}
}CSS کسٹم پراپرٹیز اور ڈیزائن ٹوکنز
CSS کسٹم پراپرٹیز (متغیرات) ایک قابل انتظام ڈیزائن سسٹم کی بنیاد ہیں۔ اپنے ڈیزائن ٹوکنز کو:rootعنصر پر حسب ضرورت خصوصیات کے طور پر متعین کریں اور اپنے تمام طرزوں پر ان کا حوالہ دیں:
:root {
/* Colors */
--color-primary: #3b82f6;
--color-primary-dark: #1d4ed8;
--color-surface: #ffffff;
--color-surface-elevated: #f8fafc;
--color-text: #0f172a;
--color-text-muted: #64748b;
/* Spacing */
--space-xs: 0.25rem;
--space-sm: 0.5rem;
--space-md: 1rem;
--space-lg: 1.5rem;
--space-xl: 2rem;
/* Typography */
--font-sans: 'Inter', system-ui, sans-serif;
--font-mono: 'JetBrains Mono', monospace;
--text-sm: 0.875rem;
--text-base: 1rem;
--text-lg: 1.125rem;
--text-xl: 1.25rem;
/* Shadows */
--shadow-sm: 0 1px 2px rgb(0 0 0 / 0.05);
--shadow-md: 0 4px 6px rgb(0 0 0 / 0.07);
--shadow-lg: 0 10px 15px rgb(0 0 0 / 0.1);
/* Borders */
--radius-sm: 0.375rem;
--radius-md: 0.5rem;
--radius-lg: 0.75rem;
--radius-full: 9999px;
}ڈیزائن ٹوکنز آپ کی پوری ایپلیکیشن میں مستقل مزاجی کو یقینی بناتے ہیں اور عالمی طرز کی تبدیلیوں کو معمولی بناتے ہیں — ایک متغیر کو اپ ڈیٹ کرتے ہیں اور اس کا استعمال کرنے والا ہر جزو خود بخود اپ ڈیٹ ہوجاتا ہے۔
React
React میں اسٹائلنگ اپروچز اسٹائلنگ کے لیے کئی طریقے پیش کرتا ہے۔ ہر ایک میں ڈویلپر کے تجربے، کارکردگی، اور برقرار رکھنے کی صلاحیت میں تجارت ہوتی ہے۔
CSS ماڈیولز
CSS ماڈیولز اسکوپ سٹائلز کو انفرادی اجزاء کے لیے مخصوص کلاس کے ناموں کی تعمیر کے وقت تیار کر کے۔ وہ سادگی اور حفاظت کا بہترین توازن پیش کرتے ہیں:
/* Button.module.css */
.button {
padding: var(--space-sm) var(--space-md);
border-radius: var(--radius-md);
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
}
.primary {
background: var(--color-primary);
color: white;
}
.primary:hover {
background: var(--color-primary-dark);
box-shadow: var(--shadow-md);
}import styles from './Button.module.css';
function Button({ variant = 'primary', children, ...props }) {
return (
<button
className={`${styles.button} ${styles[variant]}`}
{...props}
>
{children}
</button>
);
}Tailwind CSS
Tailwind CSS یوٹیلیٹی کلاسز فراہم کرتا ہے جو آپ کو براہ راست JSX میں اجزاء کو اسٹائل کرنے دیتا ہے۔ یہ CSS اور JavaScript فائلوں کے درمیان سیاق و سباق کی تبدیلی کو ختم کرتا ہے اور اس کی ترتیب کے ذریعے ایک مستقل ڈیزائن کے نظام کو نافذ کرتا ہے:
function Card({ title, description, image }) {
return (
<div className="rounded-lg shadow-md overflow-hidden
bg-white hover:shadow-lg transition-shadow">
<img src={image} alt={title}
className="w-full h-48 object-cover" />
<div className="p-4">
<h3 className="text-lg font-semibold text-gray-900">
{title}
</h3>
<p className="mt-2 text-gray-600 text-sm">
{description}
</p>
</div>
</div>
);
}CSS-in-JS (اسٹائل والے اجزاء، جذبات)
CSS-in-JS لائبریریوں کو براہ راست XPRSSX کے ساتھ آپ کو مکمل رسائی حاصل کرنے کی اجازت دیتا ہے ریاست طاقتور ہونے کے باوجود، وہ رن ٹائم اوور ہیڈ کا اضافہ کرتے ہیں اور سرور کی طرف سے فراہم کردہ ایپلیکیشنز کے لیے تیزی سے پسندیدگی سے باہر ہو رہے ہیں:
import styled from 'styled-components';
const Badge = styled.span`
display: inline-flex;
align-items: center;
padding: 0.25rem 0.75rem;
border-radius: 9999px;
font-size: 0.75rem;
font-weight: 600;
background: ${props => props.variant === 'success'
? '#dcfce7' : '#dbeafe'};
color: ${props => props.variant === 'success'
? '#166534' : '#1e40af'};
`;نئے پروجیکٹس کے لیے، بہتر کارکردگی اور سرور رینڈرنگ کی مطابقت کی وجہ سے CSS-in-JS پر CSS ماڈیولز یا Tailwind CSS کی سفارش کی جاتی ہے۔
اسٹوری بک کے ساتھ ایک ڈیزائن سسٹم بنانا
// Button.stories.jsx
import { Button } from './Button';
export default {
title: 'Components/Button',
component: Button,
argTypes: {
variant: {
options: ['primary', 'secondary', 'ghost'],
control: { type: 'select' },
},
size: {
options: ['sm', 'md', 'lg'],
control: { type: 'select' },
},
},
};
export const Primary = {
args: { variant: 'primary', children: 'Click me' },
};
export const Secondary = {
args: { variant: 'secondary', children: 'Click me' },
};اسٹوری بک ڈیزائنرز اور ڈویلپرز کو اجزاء پر الگ تھلگ تعاون کرنے کے قابل بناتی ہے، اس بات کو یقینی بناتی ہے کہ ہر جزو کو ایپلی کیشن میں ضم کرنے سے پہلے صحیح طریقے سے کام کرے۔
مائیکرو انٹرایکشنز اور اینیمیشنز
سوچی سمجھی اینیمیشنز صارفین کی رہنمائی کرتی ہیں، فیڈ بیک فراہم کرتی ہیں، اور پولش کا احساس پیدا کرتی ہیں۔ Framer Motion React کے لیے معروف اینیمیشن لائبریری ہے۔ Framer Motion کے ساتھ
بنیادی اینیمیشنز
import { motion } from 'framer-motion';
function FadeInCard({ children }) {
return (
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.4, ease: 'easeOut' }}
>
{children}
</motion.div>
);
}سٹیگرڈ لسٹ اینیمیشنز
import { motion } from 'framer-motion';
const container = {
hidden: { opacity: 0 },
show: {
opacity: 1,
transition: { staggerChildren: 0.1 },
},
};
const item = {
hidden: { opacity: 0, x: -20 },
show: { opacity: 1, x: 0 },
};
function AnimatedList({ items }) {
return (
<motion.ul variants={container}
initial="hidden" animate="show">
{items.map(i => (
<motion.li key={i.id} variants={item}>
{i.label}
</motion.li>
))}
</motion.ul>
);
}CSS-صرف مائیکرو انٹرایکشنز
ہر ایک اینیمیشن کی ضرورت نہیں ہے۔ CSS ٹرانزیشنز اور ٹرانسفارمز بہت سے عام تعاملات کو مؤثر طریقے سے ہینڈل کرتے ہیں:
.interactive-card {
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.interactive-card:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-lg);
}
.button-press:active {
transform: scale(0.97);
}قابل رسائی اجزاء پیٹرنز
رسائی اختیاری نہیں ہے - یہ پیشہ ور ویب انٹرفیس کے لیے ایک ضرورت ہے۔ ان نمونوں پر عمل کریں تاکہ یہ یقینی بنایا جا سکے کہ آپ کے اجزاء سب کے لیے کام کرتے ہیں۔
فوکس مینجمنٹ
جب موڈل کھلتے ہیں، تو فوکس موڈل پر منتقل کریں۔ جب وہ بند ہو جائیں، تو محرک عنصر پر توجہ مرکوز کریں۔ پس منظر کے مواد کے ساتھ تعامل کو روکنے کے لیےinertانتساب کا استعمال کریں:
function Modal({ isOpen, onClose, children }) {
const closeRef = useRef();
const previousFocus = useRef();
useEffect(() => {
if (isOpen) {
previousFocus.current = document.activeElement;
closeRef.current?.focus();
} else {
previousFocus.current?.focus();
}
}, [isOpen]);
if (!isOpen) return null;
return (
<div role="dialog" aria-modal="true">
<button ref={closeRef} onClick={onClose}
aria-label="Close dialog">X</button>
{children}
</div>
);
}کی بورڈ نیویگیشن
تمام متعامل عناصر کی بورڈ قابل رسائی ہونا چاہیے۔ اپنی مرضی کے اجزاء جیسے ڈراپ ڈاؤن مینو، ٹیبز، اور carousels کو کی بورڈ کے تعامل کے لیے WAI-ARIA ڈیزائن پیٹرن کی پیروی کرنی چاہیے۔
رنگین کنٹراسٹ اور بصری ڈیزائن
یقینی بنائیں کہ متن WCAG 2.1 کنٹراسٹ تناسب پر پورا اترتا ہے: عام متن کے لیے 4.5:1، بڑے متن کے لیے 3:1۔ معلومات پہنچانے کے لیے اکیلے رنگ پر انحصار نہ کریں — اضافی اشارے کے طور پر شبیہیں، ٹیکسٹ لیبلز، یا پیٹرن استعمال کریں۔
ریسپانسیو ڈیزائن کی حکمت عملی
جدید ریسپانسیو ڈیزائن بریک پوائنٹس سے آگے ہے۔ فلوئڈ ڈیزائن اپروچ استعمال کریں جو تمام سکرین کے سائز میں آسانی سے ڈھل جائے۔
Fluid Typography
ٹائپوگرافی بنانے کے لیےclamp()کا استعمال کریں جو کم سے کم اور زیادہ سے زیادہ سائز کے درمیان آسانی سے پیمانہ ہو:
h1 {
font-size: clamp(1.75rem, 4vw, 3rem);
line-height: 1.2;
}
p {
font-size: clamp(0.9rem, 1.5vw, 1.125rem);
line-height: 1.6;
}ریسپانسیو سپیسنگ
کے اصول کے مطابق:.section {
padding: clamp(2rem, 5vw, 4rem) clamp(1rem, 3vw, 2rem);
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: clamp(1rem, 2vw, 2rem);
}ڈارک موڈ کا نفاذ
ڈارک موڈ کو الٹنے والے رنگوں سے زیادہ کی ضرورت ہوتی ہے۔ ایک الگ رنگ پیلیٹ ڈیزائن کریں جو مناسب کنٹراسٹ اور بصری درجہ بندی کو برقرار رکھے:
:root {
--bg-primary: #ffffff;
--bg-secondary: #f1f5f9;
--text-primary: #0f172a;
--text-secondary: #475569;
--border-color: #e2e8f0;
}
[data-theme='dark'] {
--bg-primary: #0f172a;
--bg-secondary: #1e293b;
--text-primary: #f1f5f9;
--text-secondary: #94a3b8;
--border-color: #334155;
}React میں، ایک سیاق و سباق فراہم کرنے والے کے ساتھ تھیم کا نظم کریں اور لوکل سٹوریج پر صارف کی ترجیح کو برقرار رکھیں:
function ThemeProvider({ children }) {
const [theme, setTheme] = useState(() => {
if (typeof window === 'undefined') return 'light';
return localStorage.getItem('theme') ||
(window.matchMedia('(prefers-color-scheme: dark)').matches
? 'dark' : 'light');
});
useEffect(() => {
document.documentElement.setAttribute('data-theme', theme);
localStorage.setItem('theme', theme);
}, [theme]);
return (
<ThemeContext.Provider value={{ theme, setTheme }}>
{children}
</ThemeContext.Provider>
);
}پرفارمنس ایکس ٹیگ ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس ایکس میں یہ بھی تیز ہونا چاہئے. اپنے UI کو جوابدہ رکھنے کے لیے ان CSS کارکردگی کی تکنیکوں کو لاگو کریں۔CSS کنٹینمنٹ
containپراپرٹی براؤزر کو بتاتی ہے کہ کسی عنصر کا مواد باقی صفحہ سے آزاد ہے، رینڈرنگ آپٹیمائزیشن کو فعال کرتا ہے:
.card {
contain: layout style paint;
}
.sidebar {
contain: layout size style;
}XTAG2626X
will-changeXX کو استعمال کرنے کے لیے مرضی کو تبدیل کرے گا۔ آنے والی متحرک تصاویر کے بارے میں براؤزر کو اشارہ کریں۔ اسے تھوڑا سا لگائیں — زیادہ استعمال میموری کی کھپت کو بڑھا سکتا ہے:.animated-element {
will-change: transform, opacity;
}
/* Remove after animation completes */
.animated-element.done {
will-change: auto;
}مواد کی مرئیت
بہت سے حصوں والے لمبے صفحات کے لیے،content-visibility: autoبراؤزر کو آف اسکرین مواد کو مکمل طور پر پیش کرنے کو چھوڑنے کی اجازت دیتا ہے: XTAG274
شاندار ویب انٹرفیس بنانا ایک ایسا فن ہے جو بصری ڈیزائن، تکنیکی مہارت اور صارفین کے لیے ہمدردی کو ملا دیتا ہے۔ جدید سی ایس ایس طاقتور لے آؤٹ سسٹمز، فلوڈ ڈیزائن کی تکنیک اور کارکردگی کی اصلاح فراہم کرتا ہے۔ React کا جزو ماڈل اسٹائل، رویے، اور قابل رسائی عمارت کے بلاکس کو دوبارہ استعمال کرنے میں آسانی پیدا کرتا ہے۔ ان ٹیکنالوجیز کو سوچ سمجھ کر حرکت پذیری، قابل رسائی طریقہ کار، اور ایک اچھی طرح سے ساختہ ڈیزائن سسٹم کے ساتھ ملا کر، آپ ایسے انٹرفیس بنا سکتے ہیں جو نہ صرف خوبصورت ہوں بلکہ تیز، قابل رسائی اور برقرار رکھنے کے قابل بھی ہوں۔ ڈیزائن ٹوکنز اور لے آؤٹ پرائمیٹوز کی ایک ٹھوس بنیاد کے ساتھ شروع کریں، انٹرایکٹیویٹی اور اینیمیشن میں پرت، آلات اور معاون ٹیکنالوجیز پر ٹیسٹ کریں، اور حقیقی صارف کے تاثرات کی بنیاد پر اعادہ کریں۔