CSS @scope: নামকরণের একটি বিকল্প এবং ভারী বিমূর্তকরণ – Smashing Magazine

CSS @scope: নামকরণের একটি বিকল্প এবং ভারী বিমূর্তকরণ – Smashing Magazine


মৌলিক CSS নীতিগুলি শেখার সময়, রক্ষণাবেক্ষণযোগ্যতা নিশ্চিত করার জন্য একজনকে মডুলার, পুনরায় ব্যবহারযোগ্য এবং বর্ণনামূলক শৈলী লিখতে শেখানো হয়। কিন্তু যখন বিকাশকারীরা বাস্তব-বিশ্বের অ্যাপ্লিকেশনগুলিতে প্রবেশ করে, তখন প্রায়শই অনিচ্ছাকৃত অঞ্চলে স্টাইল ফাঁস ছাড়া UI বৈশিষ্ট্যগুলি যুক্ত করা অসম্ভব বলে মনে হয়।

এই সমস্যাটি প্রায়ই একটি স্ব-পূরণকারী লুপে পরিণত হয়; যে শৈলীগুলি তাত্ত্বিকভাবে একটি উপাদান বা বিভাগে সীমাবদ্ধ যেখানে তারা অন্তর্ভুক্ত নয় সেখানে উপস্থিত হতে শুরু করে। এটি বিকাশকারীকে ফাঁস হওয়া শৈলীগুলিকে ওভাররাইড করার জন্য আরও নির্দিষ্ট নির্বাচক তৈরি করতে বাধ্য করে, যা দুর্ঘটনাক্রমে বিশ্বব্যাপী শৈলীগুলিকে ওভাররাইড করে এবং আরও অনেক কিছু।

বিইএম-এর মতো কঠোর শ্রেণির নামকরণ প্রথা এই সমস্যার একটি তাত্ত্বিক সমাধান। BEM (ব্লক, এলিমেন্ট, মডিফায়ার) পদ্ধতি CSS হল CSS ফাইলের মধ্যে পুনঃব্যবহারযোগ্যতা এবং গঠন নিশ্চিত করার জন্য ক্লাসের নামকরণের একটি পদ্ধতিগত উপায়। এই ধরনের নামকরণ কনভেনশনগুলি উপাদান এবং তাদের অবস্থা বর্ণনা করার জন্য ডোমেন ভাষা ব্যবহার করে জ্ঞানীয় লোড কমাতে পারে এবং সঠিকভাবে প্রয়োগ করা হলে, বড় অ্যাপ্লিকেশনগুলির জন্য শৈলীগুলি বজায় রাখা সহজ করে তুলতে পারে।

যাইহোক, বাস্তব জগতে, এটি সর্বদা সেভাবে কাজ করে না। অগ্রাধিকার পরিবর্তন হতে পারে এবং বাস্তবায়ন পরিবর্তনের সাথে অসঙ্গতিপূর্ণ হয়ে ওঠে। HTML গঠনে ছোট পরিবর্তনের জন্য একাধিক CSS শ্রেণীর নাম পরিবর্তনের প্রয়োজন হতে পারে। অত্যন্ত ইন্টারেক্টিভ ফ্রন্ট-এন্ড অ্যাপ্লিকেশনগুলির সাথে, BEM প্যাটার্ন অনুসরণ করে ক্লাসের নামগুলি দীর্ঘ এবং কষ্টকর হয়ে উঠতে পারে (উদাহরণস্বরূপ, app-user-overview__status--is-authenticating), এবং নামকরণের নিয়মগুলি সম্পূর্ণরূপে অনুসরণ না করা সিস্টেমের কাঠামোকে ভেঙে দেয়, এর সুবিধাগুলিকে অস্বীকার করে৷

এই চ্যালেঞ্জগুলির পরিপ্রেক্ষিতে, এতে অবাক হওয়ার কিছু নেই যে ডেভেলপাররা ফ্রেমওয়ার্কের দিকে ঝুঁকছে, টেলউইন্ড হল সবচেয়ে জনপ্রিয় সিএসএস ফ্রেমওয়ার্ক। স্টাইলগুলির মধ্যে একটি অনাকাঙ্ক্ষিত নির্দিষ্টতার যুদ্ধে লড়াই করার চেষ্টা করার পরিবর্তে, CSS ক্যাসকেড এড়িয়ে যাওয়া এবং সম্পূর্ণ বিচ্ছেদের গ্যারান্টি দেয় এমন সরঞ্জামগুলি ব্যবহার করা সহজ।

বিকাশকারীরা ইউটিলিটিগুলির উপর বেশি নির্ভর করে

আমরা কিভাবে জানি যে কিছু বিকাশকারী ক্যাসকেড শৈলী এড়াতে ইচ্ছুক? এটি “আধুনিক” ফ্রন্ট-এন্ড টুলিংয়ের উত্থান – যেমন সিএসএস-ইন-জেএস ফ্রেমওয়ার্ক – বিশেষভাবে সেই উদ্দেশ্যে ডিজাইন করা হয়েছে। নির্দিষ্ট উপাদানের মধ্যে সীমাবদ্ধ বিভিন্ন শৈলীর সাথে কাজ করা তাজা বাতাসের শ্বাসের মতো মনে হতে পারে। এটি জিনিসগুলির নামকরণের প্রয়োজনীয়তাকে সরিয়ে দেয় – এখনও সবচেয়ে ঘৃণ্য এবং সময়সাপেক্ষ ফ্রন্ট-এন্ড কাজগুলির মধ্যে একটি – এবং বিকাশকারীদের সিএসএস উত্তরাধিকারের সুবিধাগুলি সম্পূর্ণরূপে বুঝতে বা সুবিধা গ্রহণ না করেই উত্পাদনশীল হতে দেয়৷

কিন্তু CSS ক্যাসকেড এড়িয়ে যাওয়া তার নিজস্ব সমস্যা নিয়ে আসে। উদাহরণস্বরূপ, জাভাস্ক্রিপ্টে স্টাইল রচনার জন্য ভারী বিল্ড কনফিগারেশনের প্রয়োজন হয় এবং প্রায়শই শৈলীগুলি উপাদান মার্কআপ বা HTML এর সাথে বিশ্রীভাবে মিশ্রিত হয়। নামকরণের নিয়মগুলি সাবধানে বিবেচনা করার পরিবর্তে, আমরা আমাদের জন্য স্বয়ংক্রিয়ভাবে নির্বাচক এবং শনাক্তকারী তৈরি করার জন্য সরঞ্জামগুলিকে অনুমতি দিই (উদাহরণস্বরূপ, .jsx-3130221066), ডেভেলপারদের তাদের নিজস্বভাবে অন্য ছদ্ম-ভাষার সাথে লেগে থাকতে হবে। (যেন আপনার সমস্ত উপাদান বোঝার জ্ঞানীয় বোঝা useEffectএটি করা ইতিমধ্যে যথেষ্ট ছিল না!)

টুলিং-এ ক্লাসের নামকরণের কাজকে আরও বিমূর্ত করার অর্থ হল নেটিভ ডিবাগিং প্রায়শই লাইভ ডিবাগিং সমর্থনকারী নেটিভ ব্রাউজার বৈশিষ্ট্যগুলির মতো বিকাশকারী সরঞ্জামগুলির সুবিধা নেওয়ার পরিবর্তে বিকাশের জন্য সংকলিত নির্দিষ্ট অ্যাপ্লিকেশন সংস্করণগুলিতে সীমাবদ্ধ থাকে।

এটি প্রায় এমনই যে ওয়েব ইতিমধ্যে সরবরাহ করে এমন সরঞ্জামগুলিকে বিমূর্ত করার পরিবর্তে আমরা যে সরঞ্জামগুলি ব্যবহার করছি সেগুলিকে ডিবাগ করার জন্য আমাদের সরঞ্জামগুলি বিকাশ করতে হবে – সমস্তই স্ট্যান্ডার্ড CSS লেখার “বেদনা” থেকে দূরে থাকার জন্য৷

সৌভাগ্যবশত, আধুনিক CSS বৈশিষ্ট্যগুলি শুধুমাত্র স্ট্যান্ডার্ড CSS লেখাকে আরও নমনীয় করে তোলে না, বরং আমাদের মতো ডেভেলপারদের ক্যাসকেড পরিচালনা করতে এবং এটিকে আমাদের জন্য কার্যকর করার জন্য অনেক বেশি শক্তি দেয়। CSS ক্যাসকেড স্তরগুলি একটি দুর্দান্ত উদাহরণ, তবে আরও একটি বৈশিষ্ট্য রয়েছে যা আশ্চর্যজনকভাবে খুব বেশি মনোযোগ দেয় না – যদিও এটি সম্প্রতি পরিণত হয়েছে বলে এটি পরিবর্তিত হচ্ছে বেসলাইন সামঞ্জস্যপূর্ণ.

css @scope নিয়মের উপর

আমি বিবেচনা css @scope নিয়মের উপর আমরা যে ধরনের স্টাইল-লিক-জনিত উদ্বেগ কভার করেছি তার সম্ভাব্য প্রতিকার হতে, এটি বিমূর্ততা এবং অতিরিক্ত বিল্ড টুলিংয়ের জন্য মূল ওয়েব সুবিধাগুলির সাথে আপস করতে বাধ্য করে না।

“দি @scope নিয়ম অনুসারে সিএসএস আপনাকে নির্দিষ্ট DOM সাবট্রিতে উপাদান নির্বাচন করতে সক্ষম করে, হাইপার-নির্দিষ্ট নির্বাচকগুলিকে ওভাররাইড করা কঠিন না লিখে এবং আপনার নির্বাচকদের DOM কাঠামোর সাথে খুব শক্তভাবে বেঁধে না রেখে সঠিকভাবে লক্ষ্যবস্তুগুলিকে লক্ষ্য করে।

– MDN

অন্য কথায়, আমরা নির্দিষ্ট ক্ষেত্রে বিচ্ছিন্ন শৈলী নিয়ে কাজ করতে পারি। উত্তরাধিকার, ক্যাসকেডিং বা উদ্বেগের মৌলিক বিচ্ছেদ ছাড়াই এটি ফ্রন্ট-এন্ড উন্নয়নের একটি দীর্ঘস্থায়ী নির্দেশিকা নীতি।

এছাড়াও, এটিতে দুর্দান্ত ব্রাউজার কভারেজ রয়েছে। আসলে, Firefox 146 এর জন্য সমর্থন যোগ করেছে @scope ডিসেম্বরে, এটি প্রথমবারের জন্য বেসলাইন সামঞ্জস্যপূর্ণ করা হয়েছিল। এখানে BEM প্যাটার্ন বনাম বোতামগুলির মধ্যে একটি সহজ তুলনা @scope নিয়ম:

 



 



@scope নিয়ম এটির অনুমতি দেয় কম জটিলতার সাথে নির্ভুলতা. ডেভেলপারদের আর ক্লাসের নাম ব্যবহার করে সীমানা তৈরি করতে হবে না, যা তাদের নেটিভ এইচটিএমএল উপাদানের উপর ভিত্তি করে নির্বাচকদের লেখার অনুমতি দেয়, প্রেসক্রিপটিভ CSS ক্লাস নামের প্যাটার্নের প্রয়োজনীয়তা দূর করে। ক্লাস নাম ব্যবস্থাপনার প্রয়োজনীয়তা দূর করে, @scope বড় প্রকল্পে CSS এর সাথে যুক্ত ভয় কমাতে পারে।

মৌলিক ফাংশন

শুরু করতে, যোগ করুন @scope আপনার CSS-এ একটি নিয়ম তৈরি করুন এবং একটি রুট নির্বাচক রাখুন যাতে শৈলীগুলির সুযোগ থাকবে:

@scope () {
  /* Styles scoped to the  */
}

সুতরাং, উদাহরণস্বরূপ, যদি আমরা শৈলীর পরিধি প্রসারিত করতে চাই



Leave a Reply

Your email address will not be published. Required fields are marked *