آموزش ساخت دکمه رادیویی سفارشی
آموزشبا سلام خدمت شما کاربران گرامی . امروز آموزش ساخت دکمه رادیویی سفارشی را برای شما عزیزان آماده کرده ایم که میتوانید با ساخت آن در وب سایت خود این مورد را استفاده کنید . این دکمه رادیویی به دلیل ظاهر زیبای خود میتواند بر جذابیت فرم ها و عملکرد سایت شما بیافزاید . پیشنهاد میکنیم تا پایان با ما همراه باشید .
آموزش ساخت دکمه رادیویی سفارشی

در ابتدای کار ، دکمه رادیویی ما دارای دو گزینه میباشد . این دو گزینه را میخواهیم به شکل زیباتری به کاربران نمایش دهیم . خب حالا میخواهیم سراغ کد اچ تی ام ال خود برویم . بعنوان مثال آرشیوی در اختیار کاربر قرار میدهیم که امکان تنظیم به صورت ماهانه و یا سالانه دارد و دارای دو گزینه به نام Monthly و Yearly میباشد . کد اچ تی ام ال ما مشابه کد زیر میباشد :
<ul class="radio-switch"> <li class="radio-switch__item"> <input type="radio" class="radio-switch__input sr-only" id="radio1" name="radioSwitch" checked> <label for="radio1" class="radio-switch__label">Monthly</label> </li> <li class="radio-switch__item"> <input type="radio" class="radio-switch__input sr-only" id="radio2" name="radioSwitch"> <label for="radio2" class="radio-switch__label">Yearly</label> </li> </ul>
ما در کد بالای کلاسی به نام sr-only را داریم که برای مخفی کردن عناصر ظاهری در زمانی که قابل دسترس هستند میباشد . خب حالا زمان استایل دهی به عناطر ما با کد های سی اس اس میباشد .
:root { // style --radio-switch-width: 186px; --radio-switch-height: 46px; --radio-switch-padding: 3px; --radio-switch-radius: 50em; // animation --radio-switch-animation-duration: 0.3s; } .radio-switch { display: inline-flex; padding: var(--radio-switch-padding); border-radius: var(--radio-switch-radius); border: 1px solid var(--color-contrast-low); } .radio-switch__item { height: calc(var(--radio-switch-height) - 2*var(--radio-switch-padding)); width: calc(var(--radio-switch-width)*0.5 - var(--radio-switch-padding)); } .radio-switch__label { display: block; line-height: calc(var(--radio-switch-height) - 2*var(--radio-switch-padding)); text-align: center; border-radius: var(--radio-switch-radius); }
حالا باید عنصری اضافه کنیم که به عنوان پس زمینه گزینه انتخاب شده باشد . کد اچ تی ام ال آن بخش چیزی مشابه کد زیر خواهد بود :
<ul class="radio-switch"> <li class="radio-switch__item"> <!-- input + label --> </li> <li class="radio-switch__item"> <!-- input + label --> <div class="radio-switch__marker" aria-hidden="true"></div> </li> </ul>
ما در کد بالا یک کلاس aria-hidden استفاده کردیم که مربوط به مخفی کردن عنصر میباشد . حالا باید استایل مربوط به این عنصر را اضافه کنیم :
.radio-switch__item { position: relative; } .radio-switch__marker { position: absolute; top: 0; left: -100%; height: 100%; width: 100%; background-color: var(--color-primary); border-radius: var(--radio-switch-radius); transition: transform var(--radio-switch-animation-duration); .radio-switch__input:checked ~ & { // translate the marker from one side to the other transform: translateX(100%); } }
تکه کد دیگری که در این میان نباید فراموش شود ، استایل در حالت فوکوس کردن میباشد .
.radio-switch { // ... &:focus-within { box-shadow: 0 0 0 3px var(--color-contrast-lower); } }
زمانی که یک گزینه انتخاب میشود (منظور یکی از عناصر دکمه رادیویی میباشد ) ، یک استایل box-shadow به عنصر فوکوس شده بر روی آن فعال میشود . البته توجه کنید که کلاس :focus-within ممکن است بر روی تمامی مرورگرهای جدید جواب ندهد . برای حل این مشکل ما از ترفندهای css استفاده میکنیم :
.radio-switch { // ... &:focus-within { box-shadow: 0 0 0 3px var(--color-contrast-lower); } } .radio-switch__label { //.. .radio-switch__input:focus ~ & { // focus effect in browsers not supporting :focus-within background-color: lightness(var(--color-primary), 0.6); } :not(*):focus-within, // trick to detect :focus-within support -> https://css-tricks.com/using-feature-detection-conditionals-and-groups-with-selectors/ .radio-switch__input:focus ~ & { // reset focus style for browsers supporting :focus-within background-color: transparent; } }
کار تمام است و اکنون میتوانیم از دکمه رادیویی خود استفاده کنیم 🙂 . خروجی چیزی مشابه تصویر زیر خواهد شد .

امیدواریم که از این آموزش استفاده کافی برده باشید . خوشحال میشویم نظرات خود را با ما در میان بگذارید .