ওয়েবটি স্থির পৃষ্ঠাগুলির বাইরেও বিবর্তিত হয়েছে৷ ব্যবহারকারীরা এমন ইন্টারফেস আশা করে যা দৃশ্যত অত্যাশ্চর্য, মসৃণ এবং সবার কাছে অ্যাক্সেসযোগ্য। React, আধুনিক CSS কৌশলগুলির সাথে মিলিত, ডেভেলপারদের সেই প্রত্যাশা পূরণ করার জন্য সরঞ্জাম দেয়। এই নির্দেশিকা ফাউন্ডেশনাল লেআউট সিস্টেম থেকে শুরু করে উন্নত অ্যানিমেশন এবং ডিজাইন সিস্টেম আর্কিটেকচার পর্যন্ত সবকিছুই কভার করে।
আধুনিক সিএসএস লেআউট: গ্রিড এবং ফ্লেক্সবক্স
CSS গ্রিড এবং plexillabox দুটি আধুনিক। প্রতিক্রিয়াশীল ইন্টারফেস তৈরির জন্য প্রতিটি কখন ব্যবহার করতে হবে তা বোঝা অপরিহার্য।
দ্বি-মাত্রিক লেআউটের জন্য 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; }ফ্লেক্সবক্স হল এক-মাত্রিক লেআউটের জন্য .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; }
ফ্লেক্সবক্স F9TAG8X-এর জন্য নিম্ন-মাত্রিক লেআউটের জন্য কম্পোনেন্ট-লেভেল লেআউট — নেভিগেশন বার, কার্ড সারি, ফর্ম লেআউট এবং যেকোন বিষয়বস্তু যা একক দিকে প্রবাহিত হয়:.nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem 2rem;
}
.nav-links {
display: flex;
gap: 1.5rem;
list-style: none;
}
কন্টেইনার কোয়েরি
.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; }.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 লাইব্রেরিগুলিকে সরাসরি XPRSX লিখতে এবং আপনার সম্পূর্ণ XPRSS লাইব্রেরিগুলিতে অ্যাক্সেস করার অনুমতি দেয়। রাষ্ট্র শক্তিশালী থাকাকালীন, তারা রানটাইম ওভারহেড যোগ করে এবং সার্ভার-রেন্ডার করা অ্যাপ্লিকেশনগুলির জন্য ক্রমবর্ধমানভাবে সুবিধার বাইরে চলে যাচ্ছে:
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 সুপারিশ করা হয়।
স্টোরিবুক দিয়ে একটি ডিজাইন সিস্টেম তৈরি করা
স্টোরিবুক UI উপাদানগুলির বিকাশ এবং নথিভুক্ত করার জন্য একটি বিচ্ছিন্ন পরিবেশ প্রদান করে৷ এটি একটি ডেভেলপমেন্ট টুল এবং একটি লিভিং স্টাইল নির্দেশিকা উভয়ই কাজ করে:
// 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' },
};স্টোরিবুক ডিজাইনার এবং ডেভেলপারদের বিচ্ছিন্নভাবে উপাদানগুলিতে সহযোগিতা করতে সক্ষম করে, প্রতিটি উপাদানকে অ্যাপ্লিকেশনে একীভূত করার আগে সঠিকভাবে কাজ করে তা নিশ্চিত করে৷
মাইক্রো-ইন্টার্যাকশন এবং অ্যানিমেশন
চিন্তাশীল অ্যানিমেশনগুলি ব্যবহারকারীদের গাইড করে, প্রতিক্রিয়া প্রদান করে এবং পোলিশের অনুভূতি তৈরি করে। ফ্রেমার মোশন হল React-এর জন্য নেতৃস্থানীয় অ্যানিমেশন লাইব্রেরি।
ফ্রেমার মোশন সহ বেসিক অ্যানিমেশনগুলি
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>
);
}কীবোর্ড নেভিগেশন
সমস্ত ইন্টারেক্টিভ উপাদান কীবোর্ড অ্যাক্সেসযোগ্য হতে হবে। ড্রপডাউন মেনু, ট্যাব এবং ক্যারোসেলের মতো কাস্টম উপাদানগুলি কীবোর্ড মিথস্ক্রিয়া জন্য WAI-ARIA ডিজাইন প্যাটার্ন অনুসরণ করা উচিত।
রঙের বৈসাদৃশ্য এবং ভিজ্যুয়াল ডিজাইন
নিশ্চিত করুন যে পাঠ্য WCAG 2.1 কনট্রাস্ট অনুপাত পূরণ করে: সাধারণ পাঠ্যের জন্য 4.5:1, বড় পাঠ্যের জন্য 3:1। তথ্য জানানোর জন্য একা রঙের উপর নির্ভর করবেন না — পরিপূরক সূচক হিসাবে আইকন, টেক্সট লেবেল বা প্যাটার্ন ব্যবহার করুন।
প্রতিক্রিয়াশীল ডিজাইনের কৌশলগুলি
আধুনিক প্রতিক্রিয়াশীল ডিজাইন ব্রেকপয়েন্টের বাইরে যায়৷ একটি তরল নকশা পদ্ধতি ব্যবহার করুন যা সমস্ত পর্দার আকার জুড়ে মসৃণভাবে মানিয়ে নেয়।
ফ্লুইড টাইপোগ্রাফি
টাইপোগ্রাফি তৈরি করতে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>
);
}পারফরম্যান্স অপ্টিমাইজেশান 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 কন্টেনমেন্ট
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>
);
}CSS কন্টেনমেন্ট
containপ্রপার্টি ব্রাউজারকে বলে যে একটি উপাদানের বিষয়বস্তু পৃষ্ঠার বাকি অংশ থেকে স্বাধীন, রেন্ডারিং অপ্টিমাইজেশান সক্ষম করে:
.card {
contain: layout style paint;
}
.sidebar {
contain: layout size style;
}XTAG2626will-changeপ্রপার্টি ব্যবহার করবে XTAG26TAG26X26XXX প্রপার্টি ব্যবহার করবে আসন্ন অ্যানিমেশন সম্পর্কে ব্রাউজারে ইঙ্গিত। অল্প পরিমাণে এটি প্রয়োগ করুন — অতিরিক্ত ব্যবহার মেমরি খরচ বাড়াতে পারে:.animated-element {
will-change: transform, opacity;
}
/* Remove after animation completes */
.animated-element.done {
will-change: auto;
}
সামগ্রীর দৃশ্যমানতা
.animated-element {
will-change: transform, opacity;
}
/* Remove after animation completes */
.animated-element.done {
will-change: auto;
}অনেকগুলি বিভাগ সহ দীর্ঘ পৃষ্ঠাগুলির জন্য,content-visibility: autoব্রাউজারটিকে সম্পূর্ণরূপে অফ-স্ক্রীন সামগ্রী রেন্ডারিং এড়িয়ে যেতে দেয়: XTAG274
অত্যাশ্চর্য ওয়েব ইন্টারফেস তৈরি করা একটি শিল্প যা ভিজ্যুয়াল ডিজাইন, প্রযুক্তিগত দক্ষতা, এবং ব্যবহারকারীদের জন্য সহানুভূতি মিশ্রিত করে। আধুনিক CSS শক্তিশালী লেআউট সিস্টেম, তরল ডিজাইন কৌশল এবং কর্মক্ষমতা অপ্টিমাইজেশন প্রদান করে। React এর উপাদান মডেলটি পুনরায় ব্যবহারযোগ্য বিল্ডিং ব্লকগুলিতে শৈলী, আচরণ এবং অ্যাক্সেসযোগ্যতাকে এনক্যাপসুলেট করা সহজ করে তোলে। চিন্তাশীল অ্যানিমেশন, শক্তিশালী অ্যাক্সেসিবিলিটি অনুশীলন এবং একটি সুগঠিত ডিজাইন সিস্টেমের সাথে এই প্রযুক্তিগুলিকে একত্রিত করে, আপনি এমন ইন্টারফেস তৈরি করতে পারেন যেগুলি শুধুমাত্র সুন্দর নয়, দ্রুত, অ্যাক্সেসযোগ্য এবং রক্ষণাবেক্ষণযোগ্য। ডিজাইন টোকেন এবং লেআউট আদিমগুলির একটি শক্ত ভিত্তি দিয়ে শুরু করুন, ইন্টারঅ্যাকটিভিটি এবং অ্যানিমেশনের স্তর, ডিভাইস এবং সহায়ক প্রযুক্তিগুলি জুড়ে পরীক্ষা করুন এবং প্রকৃত ব্যবহারকারীর প্রতিক্রিয়ার ভিত্তিতে পুনরাবৃত্তি করুন৷