এক নজরে
CSS মাস্কিং আপনাকে কাস্টম আকারে কোনও এলিমেন্ট ক্লিপ করার সুবিধা দেয়, যেমন কার্ডে নচ যোগ করা বা আকারযুক্ত বর্ডার তৈরি করা। জটিল লেআউটের জন্য আকার একত্রিত করার সময়, এলিমেন্টে থাকা কন্টেন্টের ধরনের উপর ভিত্তি করে আপনার মাস্কিং স্ট্র্যাটেজি বেছে নিন:
| মাস্কিং স্ট্র্যাটেজি | এগুলির জন্য সেরা | টেক্সট ইমপ্যাক্ট |
|---|---|---|
| সরাসরি এলিমেন্ট SVG মাস্কিং | ছবি, আইকন, সাজানো আকার, জটিল আকার | সাজেস্ট করা হয় না (টেক্সট ক্রপ করতে পারে) |
| সংলগ্ন এলিমেন্ট SVG মাস্কিং | টেক্সট, গুরুত্বপূর্ণ কন্টেন্ট সহ কার্ড | টেক্সট সম্পূর্ণভাবে পড়া যায় |
| Pure CSS Gradients | সাধারণ জ্যামিতিক আকৃতি | সাজেস্ট করা হয় না (টেক্সট ক্রপ করতে পারে) |
প্রয়োগ
শেপ কাট-আউট প্রয়োগ করতে:
SVG মাস্ক ব্যবহার করা
SVG মাস্ক আপনাকে এমন আকার নির্ধারণ করতে দেয় যা সাদা (প্রকাশ করা) এবং কালো (লুকানো) ফিল ব্যবহার করে দৃশ্যমান এলাকা থেকে বিয়োগ বা যোগ করে।
লুমিন্যান্স বনাম আলফা মাস্কিং: SVG মাস্ক ডিফল্ট হিসেবে লুমিন্যান্স (উজ্জ্বলতা) মোডে থাকে, তাই আমরা কোনও অংশ দেখাতে
fill="white"এবং বাদ দিতেfill="black"ব্যবহার করি। আপনি যদি রঙের পরিবর্তে SVG-এর ট্রান্সপারেন্সি (আলফা চ্যানেল) ব্যবহার করতে চান, তাহলে আপনি CSS-এmask-type: alpha;বা SVG<mask>এলিমেন্টেmask-type="alpha"সেট করতে পারেন।
সরাসরি এলিমেন্ট SVG মাস্কিং
এলিমেন্টের মধ্যে কোনও টেক্সট না থাকলে (যেমন প্রোফাইল অবতার, প্রোডাক্টের ছবি বা ইলাস্ট্রেশন), আপনি সরাসরি এলিমেন্টে SVG মাস্ক প্রয়োগ করতে পারবেন।
SVG মাস্কের মধ্যে maskContentUnits="objectBoundingBox" ব্যবহার করলে এটি নিশ্চিত করা যায় যে মাস্কটি যে এলিমেন্টে প্রয়োগ করা হয়েছে তার প্রস্থ এবং উচ্চতা অনুযায়ী অটোমেটিক স্কেল করা হয়।
<!-- 1. Define the mask in SVG (hidden from view) -->
<svg width="0" height="0" style="position: absolute;" aria-hidden="true">
<defs>
<!-- objectBoundingBox makes the mask scale from 0 to 1 along the element's borders -->
<mask id="splat-mask" maskContentUnits="objectBoundingBox">
<!-- Organic Bezier path defining an artistic paint splat shape -->
<path d="M 0.5 0.05 C 0.58 0.05, 0.58 0.21, 0.67 0.18 C 0.76 0.15, 0.79 0.08, 0.85 0.15 C 0.91 0.22, 0.83 0.32, 0.89 0.38 C 0.95 0.44, 1.03 0.45, 0.99 0.55 C 0.95 0.65, 0.82 0.62, 0.8 0.72 C 0.78 0.82, 0.89 0.92, 0.8 0.97 C 0.71 1.02, 0.64 0.88, 0.55 0.93 C 0.46 0.98, 0.44 1.06, 0.35 1.01 C 0.26 0.96, 0.31 0.81, 0.22 0.79 C 0.13 0.77, 0.01 0.88, 0.01 0.77 C 0.01 0.66, 0.16 0.62, 0.14 0.52 C 0.12 0.42, -0.02 0.39, 0.03 0.29 C 0.08 0.19, 0.23 0.27, 0.29 0.19 C 0.35 0.11, 0.3 0.01, 0.4 0.01 C 0.5 0.01, 0.42 0.05, 0.5 0.05 Z" fill="white" />
</mask>
</defs>
</svg>
<!-- 2. Apply the mask to the image element -->
<img src="avatar.jpg" alt="User Profile" class="shaped-avatar">
<style>
.shaped-avatar {
width: 200px;
height: 200px;
object-fit: cover;
/* Apply the SVG mask ID with standard and webkit-prefixed properties */
-webkit-mask-image: url(#splat-mask);
mask-image: url(#splat-mask);
}
</style>
সংলগ্ন এলিমেন্ট SVG মাস্কিং
টেক্সট সহ মূল এলিমেন্টের পরিবর্তে সংলগ্ন এলিমেন্টে মাস্ক প্রয়োগ করুন। এটি নিশ্চিত করে যে টেক্সট ক্লিপ করা হয়নি এবং পড়া যাচ্ছে।
এই সমস্যার সমাধান করতে, আপনার কম্পোনেন্টকে দুটি ভাগে ভাগ করে নিন:
- পড়ার যোগ্য সব কন্টেন্টের জন্য একটি নিরাপদ, আনমাস্ক করা টেক্সট কন্টেনার (
.card-body)। - এর পাশে একটি খালি আলঙ্কারিক
div(.card-accent) রাখা হয়েছে, যা কাস্টম SVG মাস্ক গ্রহণ করে।
দুটি অংশেই একই ব্যাকগ্রাউন্ড রঙ অ্যাসাইন করার মাধ্যমে, সেগুলি দৃশ্যত একটি একক, কাস্টম-আকৃতির কম্পোনেন্টে মার্জ হয়ে যায়।
<!-- 1. Define the SVG mask (hidden from view) -->
<svg width="0" height="0" style="position: absolute;" aria-hidden="true">
<defs>
<!-- Use objectBoundingBox to make the mask scale with the element -->
<mask id="accent-stencil" maskContentUnits="objectBoundingBox">
<!-- Fill the entire area with white (fully visible) -->
<rect width="1" height="1" fill="white" />
<!-- Draw a black shape to cut out a concave curve. Extending the path to x=1.1 guarantees it fully clears the right edge, preventing subpixel lines -->
<path d="M 1.1,0 C 0.4,0.1 0.4,0.9 1.1,1 L 1.1,0 Z" fill="black" />
</mask>
</defs>
</svg>
<!-- 2. Create the unified card layout -->
<div class="unified-card">
<!-- The text-bearing element remains unmasked and perfectly rectangular -->
<div class="card-body">
<h3>Premium Membership</h3>
<p>Get exclusive weekly updates on modern web standards and premium UI designs.</p>
</div>
<!-- The empty accent element next to it is masked to form the custom shape -->
<div class="card-accent"></div>
</div>
<style>
.unified-card {
display: flex;
width: 400px;
}
.card-body {
flex: 1;
background-color: #1e293b; /* Elegant slate color */
color: #f8fafc;
padding: 24px;
border-top-left-radius: 16px;
border-bottom-left-radius: 16px;
}
.card-accent {
width: 60px;
background-color: #1e293b; /* Same background color so they merge visually without seams */
border-top-right-radius: 16px;
border-bottom-right-radius: 16px;
/* Reference the SVG mask */
-webkit-mask-image: url(#card-accent-mask);
mask-image: url(#card-accent-mask);
}
</style>
সহজ কাট-আউটের জন্য একটি সিঙ্গেল CSS গ্রেডিয়েন্ট ব্যবহার করা
আপনার যখন শুধুমাত্র সাধারণ জ্যামিতিক কাটআউট (যেমন অর্ধ-বৃত্তাকার টপ নচ, সাইড ইনডেন্টেশন বা সোজা তির্যক কাট) প্রয়োজন হয়, তখন আপনাকে কোনও এক্সটার্নাল SVG লিখতে বা রেফারেন্স দিতে হবে না। পরিবর্তে, আপনি সরাসরি mask-image প্রপার্টির মধ্যে CSS রেডিয়াল বা লিনিয়ার গ্রেডিয়েন্ট নির্ধারণ করতে পারেন।
<div class="gradient-masked-card">
<h3>Notched Coupon Card</h3>
<p>This card uses a pure CSS radial gradient to cut out a semi-circular notch along its top edge.</p>
</div>
<style>
.gradient-masked-card {
background: linear-gradient(135deg, #3b82f6, #1d4ed8);
color: white;
padding: 40px 24px 24px 24px; /* Extra top padding ensures content clears the notch */
border-radius: 16px;
text-align: center;
/* radial-gradient places a circle at 50% (horizontal center) and 0% (top edge), cutting out a 20px transparent notch */
-webkit-mask-image: radial-gradient(circle at 50% 0%, transparent 20px, black 21px);
mask-image: radial-gradient(circle at 50% 0%, transparent 20px, black 21px);
}
</style>
ফলব্যাক স্ট্র্যাটেজি
কোনও ব্রাউজারে mask-image বা প্রিফিক্সড ভার্সন কাজ না করলে:
- আকৃতি দেওয়া ছবির জন্য: এলিমেন্টটি ধীরে ধীরে ডিগ্রেড করবে এবং ডিফল্ট ফলব্যাক স্টাইল সহ সাধারণ আয়তাকার এলিমেন্ট হিসেবে দেখাবে।
- শেপড কার্ডের জন্য: সংলগ্ন আলঙ্কারিক
.card-accentএলিমেন্টটি একটি সলিড, আনমাস্কড আয়তক্ষেত্র হিসেবে থাকবে। যেহেতু এটি টেক্সট কন্টেনারের মতো একই ব্যাকগ্রাউন্ড রঙ শেয়ার করে, তাই পুরো কার্ডটি একটি স্ট্যান্ডার্ড, পরিষ্কার আয়তক্ষেত্রাকার কন্টেনার হিসাবে রেন্ডার হবে। - প্রোগ্রেসিভ এনহ্যান্সমেন্ট: মাস্কের বাইরে টেক্সট লেয়ার সম্পূর্ণভাবে রাখার মাধ্যমে, আপনার কন্টেন্ট পুরনো ব্রাউজারেও সম্পূর্ণভাবে পাঠযোগ্য, স্ট্রাকচার্ড ও অ্যাক্সেসযোগ্য থাকবে বলে গ্যারেন্টি দেওয়া হয়।