সিএসএস :has() সিলেক্টর সম্পর্কে জানুন, যা প্যারেন্ট সিলেকশনের জন্য একটি গেম-চেঞ্জার। এর ব্যবহারিক প্রয়োগ, ব্রাউজার সামঞ্জস্যতা এবং উন্নত কৌশল শিখে আপনার সিএসএস স্টাইলিংকে নতুন মাত্রা দিন।
সিএসএস :has() সিলেক্টরে দক্ষতা অর্জন: প্যারেন্ট সিলেকশনের শক্তি উন্মোচন
বহু বছর ধরে, সিএসএস ডেভেলপাররা তাদের চাইল্ড এলিমেন্টের উপর ভিত্তি করে প্যারেন্ট এলিমেন্ট সিলেক্ট করার একটি সহজ এবং কার্যকর উপায়ের জন্য অপেক্ষা করছিল। সেই অপেক্ষা শেষ! :has()
সিউডো-ক্লাস অবশেষে এসে গেছে, এবং এটি আমাদের সিএসএস লেখার পদ্ধতিতে বিপ্লব ঘটাচ্ছে। এই শক্তিশালী সিলেক্টরটি আপনাকে একটি প্যারেন্ট এলিমেন্টকে টার্গেট করতে দেয় যদি এটি একটি নির্দিষ্ট চাইল্ড এলিমেন্ট ধারণ করে, যা ডাইনামিক এবং রেসপন্সিভ স্টাইলিংয়ের জন্য সম্ভাবনার এক নতুন জগত খুলে দেয়।
:has() সিলেক্টর কী?
:has()
সিউডো-ক্লাস হলো একটি সিএসএস রিলেশনাল সিউডো-ক্লাস যা আর্গুমেন্ট হিসেবে একটি সিলেক্টর তালিকা গ্রহণ করে। এটি একটি এলিমেন্টকে সিলেক্ট করে যদি সিলেক্টর তালিকার কোনো একটি সিলেক্টর সেই এলিমেন্টের ডিসেন্ড্যান্টদের (descendants) মধ্যে অন্তত একটির সাথে মেলে। সহজ ভাষায়, এটি পরীক্ষা করে দেখে যে একটি প্যারেন্ট এলিমেন্টের has (আছে) একটি নির্দিষ্ট চাইল্ড, এবং যদি থাকে, তাহলে প্যারেন্টটি সিলেক্ট হয়।
এর প্রাথমিক সিনট্যাক্স হলো:
parent:has(child) { /* সিএসএস রুলস */ }
এটি parent
এলিমেন্টকে তখনই সিলেক্ট করবে যদি এর মধ্যে অন্তত একটি child
এলিমেন্ট থাকে।
:has() কেন এত গুরুত্বপূর্ণ?
ঐতিহ্যগতভাবে, চাইল্ড এলিমেন্টের উপর ভিত্তি করে প্যারেন্ট এলিমেন্ট সিলেক্ট করার ক্ষেত্রে সিএসএস-এর সীমাবদ্ধতা ছিল। এই সীমাবদ্ধতার কারণে ডাইনামিক স্টাইলিং অর্জনের জন্য প্রায়শই জটিল জাভাস্ক্রিপ্ট সমাধান বা ওয়ার্কঅ্যারাউন্ডের প্রয়োজন হতো। :has()
সিলেক্টর এই громоздких পদ্ধতিগুলোর প্রয়োজনীয়তা দূর করে, যা আরও পরিষ্কার, রক্ষণাবেক্ষণযোগ্য এবং পারফরম্যান্ট সিএসএস কোড লেখার সুযোগ করে দেয়।
এখানে কয়েকটি কারণ তুলে ধরা হলো কেন :has()
একটি গেম-চেঞ্জার:
- সরলীকৃত স্টাইলিং: জটিল স্টাইলিং নিয়ম যা আগে জাভাস্ক্রিপ্টের প্রয়োজন হতো, তা এখন শুধুমাত্র সিএসএস দিয়েই করা সম্ভব।
- উন্নত রক্ষণাবেক্ষণযোগ্যতা: পরিষ্কার এবং সংক্ষিপ্ত সিএসএস কোড বোঝা, ডিবাগ করা এবং রক্ষণাবেক্ষণ করা সহজ।
- বর্ধিত পারফরম্যান্স: জাভাস্ক্রিপ্ট-ভিত্তিক সমাধানের তুলনায় নেটিভ সিএসএস সিলেক্টর ব্যবহার করলে সাধারণত ভালো পারফরম্যান্স পাওয়া যায়।
- অধিক নমনীয়তা:
:has()
সিলেক্টর ডাইনামিক এবং রেসপন্সিভ ডিজাইন তৈরিতে অধিক নমনীয়তা প্রদান করে।
:has() সিলেক্টরের বেসিক উদাহরণ
আসুন :has()
সিলেক্টরের শক্তি বোঝানোর জন্য কিছু সহজ উদাহরণ দিয়ে শুরু করি।
উদাহরণ ১: একটি ইমেজের উপস্থিতির উপর ভিত্তি করে প্যারেন্ট Div-কে স্টাইল করা
ধরুন আপনি একটি <div>
এলিমেন্টে একটি বর্ডার যুক্ত করতে চান শুধুমাত্র যদি এর মধ্যে একটি <img>
এলিমেন্ট থাকে:
div:has(img) {
border: 2px solid blue;
}
এই সিএসএস রুলটি যেকোনো <div>
-এ একটি নীল বর্ডার প্রয়োগ করবে যার মধ্যে অন্তত একটি <img>
এলিমেন্ট আছে।
উদাহরণ ২: একটি Span-এর উপস্থিতির উপর ভিত্তি করে লিস্ট আইটেমকে স্টাইল করা
ধরা যাক, আপনার কাছে একটি আইটেমের তালিকা আছে, এবং আপনি সেই লিস্ট আইটেমটি হাইলাইট করতে চান যদি এতে একটি নির্দিষ্ট ক্লাসসহ <span>
এলিমেন্ট থাকে:
li:has(span.highlight) {
background-color: yellow;
}
এই সিএসএস রুলটি যেকোনো <li>
-এর ব্যাকগ্রাউন্ড রঙ হলুদ করে দেবে যার মধ্যে "highlight" ক্লাসসহ একটি <span>
আছে।
উদাহরণ ৩: ইনপুট ভ্যালিডিটির উপর ভিত্তি করে ফর্ম লেবেলকে স্টাইল করা
আপনি :has()
ব্যবহার করে একটি ফর্ম লেবেলকে স্টাইল করতে পারেন, যা তার সংশ্লিষ্ট ইনপুট ফিল্ডটি ভ্যালিড নাকি ইনভ্যালিড তার উপর ভিত্তি করে হবে (:invalid
সিউডো-ক্লাসের সাথে মিলিত হয়ে):
label:has(+ input:invalid) {
color: red;
font-weight: bold;
}
এটি লেবেলটিকে লাল এবং বোল্ড করে দেবে যদি তার ঠিক পরের ইনপুট ফিল্ডটি ইনভ্যালিড হয়।
:has() সিলেক্টরের উন্নত ব্যবহার
:has()
সিলেক্টরটি অন্যান্য সিএসএস সিলেক্টর এবং সিউডো-ক্লাসের সাথে মিলিত হলে আরও শক্তিশালী হয়ে ওঠে। এখানে কিছু উন্নত ব্যবহারের উদাহরণ দেওয়া হলো:
উদাহরণ ৪: খালি এলিমেন্ট টার্গেট করা
আপনি :not()
সিউডো-ক্লাসটি :has()
এর সাথে ব্যবহার করে এমন এলিমেন্টকে টার্গেট করতে পারেন যেগুলোতে একটি নির্দিষ্ট চাইল্ড *নেই*। উদাহরণস্বরূপ, যে div-গুলোতে ইমেজ *নেই* সেগুলোকে স্টাইল করতে:
div:not(:has(img)) {
background-color: #f0f0f0;
}
এটি যেকোনো <div>
-এ একটি হালকা ধূসর ব্যাকগ্রাউন্ড প্রয়োগ করবে যেখানে কোনো <img>
এলিমেন্ট নেই।
উদাহরণ ৫: জটিল লেআউট তৈরি করা
:has()
সিলেক্টর একটি কন্টেইনারের বিষয়বস্তুর উপর ভিত্তি করে ডাইনামিক লেআউট তৈরি করতে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, আপনি একটি গ্রিড সেলের মধ্যে একটি নির্দিষ্ট ধরণের এলিমেন্টের উপস্থিতির উপর ভিত্তি করে গ্রিডের লেআউট পরিবর্তন করতে পারেন।
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
.grid-item:has(img) {
grid-column: span 2;
}
এটি একটি গ্রিড আইটেমকে দুটি কলাম জুড়ে বিস্তৃত করবে যদি এতে একটি ইমেজ থাকে।
উদাহরণ ৬: ডাইনামিক ফর্ম স্টাইলিং
আপনি :has()
ব্যবহার করে ফর্ম এলিমেন্টগুলিকে তাদের অবস্থার উপর ভিত্তি করে (যেমন, ফোকাসড, পূরণ করা, বা ভ্যালিড) ডাইনামিকভাবে স্টাইল করতে পারেন।
.form-group:has(input:focus) {
box-shadow: 0 0 5px rgba(0, 0, 255, 0.5);
}
.form-group:has(input:valid) {
border-color: green;
}
.form-group:has(input:invalid) {
border-color: red;
}
ইনপুট ফোকাস করা হলে এটি একটি নীল বক্স শ্যাডো যোগ করবে, ইনপুট ভ্যালিড হলে একটি সবুজ বর্ডার এবং ইনপুট ইনভ্যালিড হলে একটি লাল বর্ডার যোগ করবে।
উদাহরণ ৭: চাইল্ড এলিমেন্টের সংখ্যার উপর ভিত্তি করে স্টাইলিং
যদিও :has()
সরাসরি চাইল্ডের সংখ্যা গণনা করে না, আপনি অন্যান্য সিলেক্টর এবং সিএসএস প্রপার্টির সাথে এটি একত্রিত করে একই রকম প্রভাব অর্জন করতে পারেন। উদাহরণস্বরূপ, আপনি :only-child
ব্যবহার করে একটি প্যারেন্টকে স্টাইল করতে পারেন যদি তার শুধুমাত্র একটি নির্দিষ্ট ধরণের চাইল্ড থাকে।
div:has(> p:only-child) {
background-color: lightgreen;
}
এটি একটি <div>
-কে হালকা সবুজ ব্যাকগ্রাউন্ড দিয়ে স্টাইল করবে শুধুমাত্র যদি এর সরাসরি চাইল্ড হিসেবে একটিমাত্র <p>
এলিমেন্ট থাকে।
ক্রস-ব্রাউজার সামঞ্জস্যতা এবং ফলব্যাক
২০২৩ সালের শেষের দিকে, :has()
সিলেক্টরটি ক্রোম, ফায়ারফক্স, সাফারি এবং এজ সহ আধুনিক ব্রাউজারগুলিতে চমৎকার সমর্থন উপভোগ করছে। তবে, প্রোডাকশনে এটি ব্যবহার করার আগে Can I use-এ সামঞ্জস্যতা পরীক্ষা করা অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যদি আপনাকে পুরোনো ব্রাউজার সমর্থন করতে হয়।
সামঞ্জস্যতার বিবেচনার একটি সংক্ষিপ্ত বিবরণ এখানে দেওয়া হলো:
- আধুনিক ব্রাউজার: ক্রোম, ফায়ারফক্স, সাফারি এবং এজের সর্বশেষ সংস্করণগুলিতে চমৎকার সমর্থন রয়েছে।
- পুরানো ব্রাউজার: পুরানো ব্রাউজারগুলিতে (যেমন, ইন্টারনেট এক্সপ্লোরার) কোনো সমর্থন নেই।
ফলব্যাক প্রদান
যদি আপনাকে পুরোনো ব্রাউজার সমর্থন করতে হয়, তবে আপনাকে ফলব্যাক প্রদান করতে হবে। এখানে কয়েকটি কৌশল রয়েছে:
- জাভাস্ক্রিপ্ট: ব্রাউজারের
:has()
সমর্থনের জন্য জাভাস্ক্রিপ্ট ব্যবহার করে সনাক্ত করুন এবং প্রয়োজনে বিকল্প স্টাইলিং প্রয়োগ করুন। - ফিচার কোয়েরি: ব্রাউজার সমর্থনের উপর ভিত্তি করে বিভিন্ন স্টাইল প্রদান করতে সিএসএস ফিচার কোয়েরি (
@supports
) ব্যবহার করুন। - প্রগ্রেসিভ এনহ্যান্সমেন্ট: একটি বেসিক, কার্যকরী ডিজাইন দিয়ে শুরু করুন যা সমস্ত ব্রাউজারে কাজ করে, এবং তারপর
:has()
সমর্থনকারী ব্রাউজারগুলির জন্য ডিজাইনটি ক্রমান্বয়ে উন্নত করুন।
এখানে একটি ফিচার কোয়েরি ব্যবহারের উদাহরণ দেওয়া হলো:
.parent {
/* সকল ব্রাউজারের জন্য বেসিক স্টাইলিং */
border: 1px solid black;
}
@supports selector(:has(img)) {
.parent:has(img) {
/* :has() সমর্থনকারী ব্রাউজারগুলির জন্য উন্নত স্টাইলিং */
border: 3px solid blue;
}
}
এই কোডটি সমস্ত ব্রাউজারে .parent
এলিমেন্টে একটি কালো বর্ডার প্রয়োগ করবে। যে ব্রাউজারগুলো :has()
সমর্থন করে, সেগুলিতে যদি .parent
এলিমেন্টে একটি ইমেজ থাকে তবে এটি একটি নীল বর্ডার প্রয়োগ করবে।
পারফরম্যান্স বিবেচ্য বিষয়
যদিও :has()
অনেক সুবিধা প্রদান করে, এর সম্ভাব্য পারফরম্যান্স প্রভাব বিবেচনা করা অপরিহার্য, বিশেষ করে যখন এটি ব্যাপকভাবে বা জটিল সিলেক্টরের সাথে ব্যবহৃত হয়। ব্রাউজারগুলিকে পৃষ্ঠার প্রতিটি এলিমেন্টের জন্য সিলেক্টর মূল্যায়ন করতে হয়, যা কম্পিউটেশনালি ব্যয়বহুল হতে পারে।
:has()
-এর পারফরম্যান্স অপটিমাইজ করার জন্য এখানে কিছু টিপস দেওয়া হলো:
- সিলেক্টর সহজ রাখুন:
:has()
সিউডো-ক্লাসের মধ্যে অতিরিক্ত জটিল সিলেক্টর ব্যবহার করা থেকে বিরত থাকুন। - স্কোপ সীমিত করুন: বিশ্বব্যাপী প্রয়োগ না করে নির্দিষ্ট এলিমেন্ট বা কন্টেইনারে
:has()
প্রয়োগ করুন। - পারফরম্যান্স পরীক্ষা করুন: আপনার সিএসএস রুলগুলির পারফরম্যান্স নিরীক্ষণ করতে এবং সম্ভাব্য বাধাগুলি সনাক্ত করতে ব্রাউজার ডেভেলপার টুলস ব্যবহার করুন।
সাধারণ ভুল যা এড়িয়ে চলতে হবে
:has()
সিলেক্টরের সাথে কাজ করার সময়, এমন ভুল করা সহজ যা অপ্রত্যাশিত ফলাফলের কারণ হতে পারে। এখানে কিছু সাধারণ ভুল তুলে ধরা হলো যা এড়িয়ে চলতে হবে:
- স্পেসিফিসিটি সমস্যা: নিশ্চিত করুন যে আপনার
:has()
রুলগুলির অন্যান্য সিএসএস রুলকে ওভাররাইড করার জন্য পর্যাপ্ত স্পেসিফিসিটি আছে। সব সময়ের মতো একই স্পেসিফিসিটি সমস্যা সমাধানের পদক্ষেপ ব্যবহার করুন। - ভুল নেস্টিং: আপনার এলিমেন্টগুলির নেস্টিং দুবার পরীক্ষা করে নিশ্চিত করুন যে
:has()
সিলেক্টর সঠিক প্যারেন্ট এলিমেন্টকে টার্গেট করছে। - অতিরিক্ত জটিল সিলেক্টর:
:has()
সিউডো-ক্লাসের মধ্যে অতিরিক্ত জটিল সিলেক্টর ব্যবহার করা থেকে বিরত থাকুন, কারণ এটি পারফরম্যান্সকে প্রভাবিত করতে পারে। - সরাসরি চাইল্ড ধরে নেওয়া: মনে রাখবেন যে
:has()
যেকোনো ডিসেন্ড্যান্টের জন্য পরীক্ষা করে, শুধু সরাসরি চাইল্ডের জন্য নয়। যদি আপনাকে কেবল সরাসরি চাইল্ড টার্গেট করতে হয় তবে ডিরেক্ট চাইল্ড কম্বিনেটর (>
) ব্যবহার করুন (যেমন,div:has(> img)
)।
:has() ব্যবহারের সেরা অনুশীলন
:has()
সিলেক্টরের সুবিধাগুলো সর্বোচ্চ করতে এবং সম্ভাব্য সমস্যা এড়াতে, এই সেরা অনুশীলনগুলো অনুসরণ করুন:
- বিচক্ষণভাবে ব্যবহার করুন: শুধুমাত্র তখনই
:has()
ব্যবহার করুন যখন এটি অন্যান্য সিএসএস কৌশল বা জাভাস্ক্রিপ্ট সমাধানের চেয়ে সুস্পষ্ট সুবিধা প্রদান করে। - সহজ রাখুন: জটিল, প্যাঁচানো সিলেক্টরের চেয়ে সহজ, পঠনযোগ্য সিলেক্টর পছন্দ করুন।
- পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন: আপনার সিএসএস রুলগুলো বিভিন্ন ব্রাউজার এবং ডিভাইসে পরীক্ষা করে নিশ্চিত করুন যে তারা প্রত্যাশিতভাবে কাজ করছে।
- আপনার কোড ডকুমেন্ট করুন: আপনার
:has()
রুলগুলোর উদ্দেশ্য এবং কার্যকারিতা ব্যাখ্যা করতে আপনার সিএসএস কোডে মন্তব্য যোগ করুন। - অ্যাক্সেসিবিলিটি বিবেচনা করুন: নিশ্চিত করুন যে আপনার
:has()
এর ব্যবহার অ্যাক্সেসিবিলিটিকে নেতিবাচকভাবে প্রভাবিত করছে না। উদাহরণস্বরূপ, গুরুত্বপূর্ণ তথ্য জানাতে শুধুমাত্র:has()
দ্বারা ট্রিগার করা স্টাইলিং পরিবর্তনের উপর নির্ভর করবেন না; প্রতিবন্ধী ব্যবহারকারীদের জন্য ARIA অ্যাট্রিবিউট বা বিকল্প ব্যবস্থা ব্যবহার করুন।
বাস্তব-জগতের উদাহরণ এবং ব্যবহারের ক্ষেত্র
আসুন কিছু বাস্তব-জগতের উদাহরণ অন্বেষণ করি যেখানে :has()
সিলেক্টর সাধারণ ডিজাইনের চ্যালেঞ্জ সমাধান করতে ব্যবহৃত হতে পারে।
উদাহরণ ৮: রেসপন্সিভ নেভিগেশন মেনু তৈরি করা
আপনি :has()
ব্যবহার করে রেসপন্সিভ নেভিগেশন মেনু তৈরি করতে পারেন যা নির্দিষ্ট মেনু আইটেমের উপস্থিতির উপর ভিত্তি করে বিভিন্ন স্ক্রিন আকারের সাথে খাপ খাইয়ে নেয়।
এমন একটি পরিস্থিতি কল্পনা করুন যেখানে আপনি ব্যবহারকারী লগ-ইন আছেন কিনা তার উপর নির্ভর করে একটি ভিন্ন নেভিগেশন মেনু প্রদর্শন করতে চান। যদি তারা লগ-ইন থাকেন তবে আপনি প্রোফাইল এবং লগআউট অ্যাকশন দেখাতে পারেন, যদি না থাকেন তবে আপনি লগইন/রেজিস্টার দেখাতে পারেন।
nav:has(.user-profile) {
/* লগ-ইন করা ব্যবহারকারীদের জন্য স্টাইল */
}
nav:not(:has(.user-profile)) {
/* লগ-আউট করা ব্যবহারকারীদের জন্য স্টাইল */
}
উদাহরণ ৯: কার্ড কম্পোনেন্ট স্টাইল করা
:has()
সিলেক্টর কার্ড কম্পোনেন্টগুলিকে তাদের বিষয়বস্তুর উপর ভিত্তি করে স্টাইল করতে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, আপনি একটি কার্ডে একটি শ্যাডো যোগ করতে পারেন শুধুমাত্র যদি এতে একটি ইমেজ থাকে।
.card:has(img) {
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}
উদাহরণ ১০: ডাইনামিক থিম বাস্তবায়ন করা
আপনি :has()
ব্যবহার করে ব্যবহারকারীর পছন্দ বা সিস্টেম সেটিংসের উপর ভিত্তি করে ডাইনামিক থিম বাস্তবায়ন করতে পারেন। উদাহরণস্বরূপ, ব্যবহারকারী ডার্ক মোড সক্ষম করেছেন কিনা তার উপর ভিত্তি করে আপনি পৃষ্ঠার ব্যাকগ্রাউন্ড রঙ পরিবর্তন করতে পারেন।
body:has(.dark-mode) {
background-color: #333;
color: #fff;
}
এই উদাহরণগুলো :has()
সিলেক্টরের বহুমুখিতা এবং বিস্তৃত পরিসরের ডিজাইন চ্যালেঞ্জ সমাধান করার ক্ষমতাকে চিত্রিত করে।
সিএসএস-এর ভবিষ্যৎ: এরপর কী?
:has()
সিলেক্টরের প্রবর্তন সিএসএস-এর বিবর্তনে একটি গুরুত্বপূর্ণ পদক্ষেপ। এটি ডেভেলপারদের জাভাস্ক্রিপ্টের উপর কম নির্ভর করে আরও ডাইনামিক, রেসপন্সিভ এবং রক্ষণাবেক্ষণযোগ্য স্টাইলশীট তৈরি করতে সক্ষম করে। :has()
-এর জন্য ব্রাউজার সমর্থন বাড়তে থাকায়, আমরা এই শক্তিশালী সিলেক্টরের আরও উদ্ভাবনী এবং সৃজনশীল ব্যবহার দেখতে পাব বলে আশা করতে পারি।
ভবিষ্যতের দিকে তাকালে, সিএসএস ওয়ার্কিং গ্রুপ অন্যান্য উত্তেজনাপূর্ণ বৈশিষ্ট্য এবং উন্নতি অন্বেষণ করছে যা সিএসএস-এর ক্ষমতা আরও প্রসারিত করবে। এর মধ্যে রয়েছে:
- কন্টেইনার কোয়েরি: কম্পোনেন্টগুলিকে ভিউপোর্টের পরিবর্তে তাদের কন্টেইনারের আকারের উপর ভিত্তি করে তাদের স্টাইলিং খাপ খাইয়ে নিতে দেয়।
- ক্যাসকেড লেয়ার: সিএসএস রুলসের ক্যাসকেড এবং স্পেসিফিসিটির উপর আরও নিয়ন্ত্রণ প্রদান করে।
- আরও উন্নত সিলেক্টর: নতুন সিলেক্টর প্রবর্তন করা যা এলিমেন্টগুলিকে তাদের অ্যাট্রিবিউট, বিষয়বস্তু এবং ডকুমেন্ট ট্রি-তে অবস্থানের উপর ভিত্তি করে টার্গেট করতে পারে।
সর্বশেষ সিএসএস ডেভেলপমেন্টের সাথে আপ-টু-ডেট থেকে এবং :has()
এর মতো নতুন বৈশিষ্ট্যগুলিকে আলিঙ্গন করে, ডেভেলপাররা সিএসএস-এর সম্পূর্ণ সম্ভাবনা আনলক করতে পারে এবং সত্যিই ব্যতিক্রমী ওয়েব অভিজ্ঞতা তৈরি করতে পারে।
উপসংহার
:has()
সিলেক্টর সিএসএস টুলবক্সে একটি শক্তিশালী সংযোজন, যা প্যারেন্ট সিলেকশন সক্ষম করে এবং ডাইনামিক ও রেসপন্সিভ স্টাইলিংয়ের জন্য নতুন সম্ভাবনা উন্মুক্ত করে। যদিও ব্রাউজার সামঞ্জস্যতা এবং পারফরম্যান্সের প্রভাব বিবেচনা করা অত্যন্ত গুরুত্বপূর্ণ, তবে পরিষ্কার, আরও রক্ষণাবেক্ষণযোগ্য এবং পারফরম্যান্ট সিএসএস কোডের জন্য :has()
ব্যবহারের সুবিধাগুলো অনস্বীকার্য। এই গেম-চেঞ্জিং সিলেক্টরকে আলিঙ্গন করুন এবং আজই আপনার সিএসএস স্টাইলিংকে বিপ্লব করুন!
অ্যাক্সেসিবিলিটি বিবেচনা করতে এবং পুরোনো ব্রাউজারগুলির জন্য ফলব্যাক ব্যবস্থা প্রদান করতে ভুলবেন না। এই গাইডে বর্ণিত সেরা অনুশীলনগুলি অনুসরণ করে, আপনি :has()
সিলেক্টরের সম্পূর্ণ সম্ভাবনাকে কাজে লাগাতে পারেন এবং বিশ্বজুড়ে ব্যবহারকারীদের জন্য সত্যিই ব্যতিক্রমী ওয়েব অভিজ্ঞতা তৈরি করতে পারেন।