Як змінити колір перемикачів?


104

Я маю на увазі, сама кнопка перемикання складається з круглої форми і крапки в центрі (коли кнопка обрана). Що я хочу змінити - це колір обох. Це можна зробити за допомогою CSS?

Відповіді:


67

Перемикач - це нативний елемент, характерний для кожної ОС / браузера. Там немає ніякого способу , щоб змінити його колір / стиль, якщо ви не хочете , щоб реалізувати власні зображення або використовувати призначену для користувача бібліотеку Javascript , який включає в себе зображення (наприклад , це - кешуються посилання )


Я так думаю. Жоден браузер, який я знаю, не пропонує способу налаштування вигляду радіо кнопок, для цього вам доведеться використовувати бібліотеку JS.
Фред

Або використовуйте css, але вам потрібне зображення, як ви сказали. Це трохи дивно
AturSams

1
Повідомлення 8/1/2014: Цей метод тепер відключить і видалить поле введення з поданих даних форми. Саме у відповідь на зловживання компаніями, які поставили прапорці поза полем зору, заявили, що їхні користувачі погодилися на дозвіл та правила, які відвідувачі не могли оцінити, перш ніж продовжувати. Якщо буквальна кнопка не відображається на екрані, вона вважається "відключеною"
ppostma1

2
Прочитайте мою відповідь нижче щодо сучасного рішення за допомогою CSS.
klewis

"ця" посилання наразі 404'ing. Якщо він коли-небудь повернеться, повідомте нас!
markreyes

103

Швидким виправленням було б накладення стилю введення радіо кнопок :after, однак, мабуть, краща практика створення власного набору інструментів.

    input[type='radio']:after {
        width: 15px;
        height: 15px;
        border-radius: 15px;
        top: -2px;
        left: -1px;
        position: relative;
        background-color: #d1d3d1;
        content: '';
        display: inline-block;
        visibility: visible;
        border: 2px solid white;
    }

    input[type='radio']:checked:after {
        width: 15px;
        height: 15px;
        border-radius: 15px;
        top: -2px;
        left: -1px;
        position: relative;
        background-color: #ffa500;
        content: '';
        display: inline-block;
        visibility: visible;
        border: 2px solid white;
    }
<input type='radio' name="gender"/>
<input type='radio' name="gender"/>


2
Це добре спрацювало для мене. Прекрасне рішення, коли ви не хочете додавати зайвих елементів або використовувати зображення.
Swen

2
Як правило, браузери приймають стилі ": after" лише для елементів контейнерів - як визначено в W3C. Введення не є контейнером, і, як правило, не підтримує після стилізації. w3.org/TR/CSS2/generate.html#before-after-content
Іна

Просто розміщуючи мітку часу для виконання попередніх спостережень - вона все ще працює лише в Chrome (60.0.3112.90). Я спробував це на Microsoft Edge (38.14393.1066.0) та Firefox (54.0.1, 32-розрядний), але без кісток.
markreyes

1
Оновлення від @markreyes: працює в Chrome (64-бітний 73.0.3683.75), працює дещо в Safari (12.0.3) і не працює у Firefox (64-бітний 65.0.1) 15 березня 2019 року
jarhill0

38

Як зауважив Фред, немає ніякого способу ввести в свій стиль радіо кнопки щодо кольору, розміру та ін. Але ви можете використовувати псевдоелементи CSS, щоб встановити самозванець будь-якої заданої радіо-кнопки та надати її стилю. Торкаючись того, що сказав JamieD, про те, як ми можемо використовувати елемент: після псевдоелемента, ви можете використовувати як: до, так і після, щоб досягти бажаного вигляду.

Переваги такого підходу:

  • Складіть свій перемикач, а також додайте мітку для вмісту.
  • Змініть колір зовнішнього обідка та / або контрольне коло на будь-який колір, який вам подобається.
  • Надайте йому прозорий вигляд із змінами властивості кольору тла та / або необов'язкового використання властивості непрозорості.
  • Масштабуйте розмір радіо-кнопки.
  • Додайте різні властивості тіні для падіння, такі як вставка тіні CSS, де потрібно.
  • Змішайте цей простий фокус CSS / HTML у різних системах Grid, таких як Bootstrap 3.3.6, щоб він візуально відповідав решті компонентів Bootstrap.

Пояснення короткої демонстрації нижче:

  • Налаштуйте відносний вбудований блок для кожного перемикача
  • Приховати відчуття нативної радіо-кнопки немає способу її безпосередньо стилювати.
  • Стиль та вирівнювання етикетки
  • Перебудова CSS-вмісту на: перед тим, як Псевдо-елемент зробити 2 речі - накресліть зовнішній ободок перемикача та встановіть, що елемент з’явиться першим (зліва від вмісту мітки). Ви можете дізнатися основні кроки щодо псевдоелементів тут - http://www.w3schools.com/css/css_pseudo_elements.asp
  • Якщо перемикач встановлений, запитуйте ярлик для відображення вмісту CSS (стильова крапка в радіо-кнопці) після цього.

HTML

<div class="radio-item">
    <input type="radio" id="ritema" name="ritem" value="ropt1">
    <label for="ritema">Option 1</label>
</div>

<div class="radio-item">
    <input type="radio" id="ritemb" name="ritem" value="ropt2">
    <label for="ritemb">Option 2</label>
</div>

CSS

.radio-item {
  display: inline-block;
  position: relative;
  padding: 0 6px;
  margin: 10px 0 0;
}

.radio-item input[type='radio'] {
  display: none;
}

.radio-item label {
  color: #666;
  font-weight: normal;
}

.radio-item label:before {
  content: " ";
  display: inline-block;
  position: relative;
  top: 5px;
  margin: 0 5px 0 0;
  width: 20px;
  height: 20px;
  border-radius: 11px;
  border: 2px solid #004c97;
  background-color: transparent;
}

.radio-item input[type=radio]:checked + label:after {
  border-radius: 11px;
  width: 12px;
  height: 12px;
  position: absolute;
  top: 9px;
  left: 10px;
  content: " ";
  display: block;
  background: #004c97;
}

Короткий демо , щоб побачити його в дії

На закінчення не потрібно JavaScript, зображення чи батареї. Чистий CSS.


1
Ця методика працювала для мене в Chrome (60.0.3112.90). Я також спробував це на Microsoft Edge (38.14393.1066.0) та Firefox (54.0.1, 32-розрядний).
markreyes

1
Для мене працює в Safari 11.1 (останнє).
staxim

34

Тільки якщо ви орієнтуєтесь на веб-браузери (Chrome і Safari, можливо, ви розробляєте Chrome WebApp, хто знає ...), ви можете використовувати наступне:

input[type='radio'] {
   -webkit-appearance: none;
}

А потім накресліть його так, ніби це простий HTML-елемент, наприклад, застосувавши фонове зображення.

Використовуйте input[type='radio']:activeдля, коли вибрано вхід для надання альтернативної графіки

Оновлення : станом на 2018 рік ви можете додати наступне для підтримки декількох постачальників браузерів:

input[type="radio"] {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}

1
зовнішній вигляд позначений як експериментальна технологія: developer.mozilla.org/en-US/docs/Web/CSS/appearance
HBCondo

1
Працював як шарм!
Переохолодження.

Замість використання :activeвам слід використовувати :checkedдля розмежування стилів між "вибраними" перемикачами.
Даан

16

Ви можете досягти налаштованих радіо кнопок двома чистими CSS способами

  1. За допомогою видалення стандартного вигляду за допомогою CSS appearanceта застосування користувацького вигляду. На жаль, це не працює в IE для Desktop (але працює в IE для Windows Phone). Демонстрація:

    input[type="radio"] {
      /* remove standard background appearance */
      -webkit-appearance: none;
      -moz-appearance: none;
      appearance: none;
      /* create custom radiobutton appearance */
      display: inline-block;
      width: 25px;
      height: 25px;
      padding: 6px;
      /* background-color only for content */
      background-clip: content-box;
      border: 2px solid #bbbbbb;
      background-color: #e7e6e7;
      border-radius: 50%;
    }
    
    /* appearance for checked radiobutton */
    input[type="radio"]:checked {
      background-color: #93e026;
    }
    
    /* optional styles, I'm using this for centering radiobuttons */
    .flex {
      display: flex;
      align-items: center;
    }
    <div class="flex">
      <input type="radio" name="radio" id="radio1" />
      <label for="radio1">RadioButton1</label>
    </div>
    <div class="flex">
      <input type="radio" name="radio" id="radio2" />
      <label for="radio2">RadioButton2</label>
    </div>
    <div class="flex">
      <input type="radio" name="radio" id="radio3" />
      <label for="radio3">RadioButton3</label>
    </div>

  2. Через приховування радіо кнопки та встановлення зовнішнього вигляду labelрадіо кнопки на псевдоселектор. До речі, тут немає необхідності в абсолютному позиціонуванні (я бачу абсолютне позиціонування в більшості демо-версій). Демонстрація:

    *,
    *:before,
    *:after {
      box-sizing: border-box;
    }
    
    input[type="radio"] {
      display: none;
    }
    
    input[type="radio"]+label:before {
      content: "";
      /* create custom radiobutton appearance */
      display: inline-block;
      width: 25px;
      height: 25px;
      padding: 6px;
      margin-right: 3px;
      /* background-color only for content */
      background-clip: content-box;
      border: 2px solid #bbbbbb;
      background-color: #e7e6e7;
      border-radius: 50%;
    }
    
    /* appearance for checked radiobutton */
    input[type="radio"]:checked + label:before {
      background-color: #93e026;
    }
    
    /* optional styles, I'm using this for centering radiobuttons */
    label {
      display: flex;
      align-items: center;
    }
    <input type="radio" name="radio" id="radio1" />
    <label for="radio1">RadioButton1</label>
    <input type="radio" name="radio" id="radio2" />
    <label for="radio2">RadioButton2</label>
    <input type="radio" name="radio" id="radio3" />
    <label for="radio3">RadioButton3</label>



5

простий перехресний приклад користувальницького перемикача

.checkbox input{
    display: none;
}
.checkbox input:checked + label{
    color: #16B67F;
}
.checkbox input:checked + label i{
    background-image: url('http://kuzroman.com/images/jswiddler/radio-button.svg');
}
.checkbox label i{
    width: 15px;
    height: 15px;
    display: inline-block;
    background: #fff url('http://kuzroman.com/images/jswiddler/circle.svg') no-repeat 50%;
    background-size: 12px;
    position: relative;
    top: 1px;
    left: -2px;
}
<div class="checkbox">
  <input type="radio" name="sort" value="popularity" id="sort1">
  <label for="sort1">
        <i></i>
        <span>first</span>
    </label>

  <input type="radio" name="sort" value="price" id="sort2">
  <label for="sort2">
        <i></i>
        <span>second</span>
    </label>
</div>

https://jsfiddle.net/kuzroman/ae1b34ay/


Це не працює для завантажувальної програми, чи можете ви оновити програму завантаження
Krishna Jonnalagadda,

4

Добре для створення додаткових елементів, які ми можемо використовувати: after,: before (тому нам не потрібно сильно змінювати HTML). Тоді для радіо кнопок і прапорців ми можемо використовувати: галочку. Є кілька інших псевдоелементів, які ми також можемо використовувати (наприклад: наведення курсора). Використовуючи їх суміш, ми можемо створити декілька цікавих нестандартних форм. Перевір це


2

Спробуйте цей css з переходом:

введіть тут опис зображення

Демо

$DarkBrown: #292321;

$Orange: #CC3300;

div {
  margin:0 0 0.75em 0;
}

input[type="radio"] {
    display:none;
}
input[type="radio"] + label {
    color: $DarkBrown;
    font-family:Arial, sans-serif;
    font-size:14px;
}
input[type="radio"] + label span {
    display:inline-block;
    width:19px;
    height:19px;
    margin:-1px 4px 0 0;
    vertical-align:middle;
    cursor:pointer;
    -moz-border-radius:  50%;
    border-radius:  50%;
}

input[type="radio"] + label span {
     background-color:$DarkBrown;
}

input[type="radio"]:checked + label span{
     background-color:$Orange;
}

input[type="radio"] + label span,
input[type="radio"]:checked + label span {
  -webkit-transition:background-color 0.4s linear;
  -o-transition:background-color 0.4s linear;
  -moz-transition:background-color 0.4s linear;
  transition:background-color 0.4s linear;
}

Html:

<div>
  <input type="radio" id="radio01" name="radio" />
  <label for="radio01"><span></span>Radio Button 1</label>
</div>

<div>
 <input type="radio" id="radio02" name="radio" />
 <label for="radio02"><span></span>Radio Button 2</label>
</div>

2

Я створив ще одну вилку зразка коду @ klewis , щоб продемонструвати деяку гру з чистим css та градієнтами, використовуючи: перед /: після псевдоелементів та приховану кнопку введення радіо.

введіть тут опис зображення

HTML:

sample radio buttons:
<div style="background:lightgrey;">
    <span class="radio-item">
        <input type="radio" id="ritema" name="ritem" class="true" value="ropt1" checked="checked">
        <label for="ritema">True</label>
    </span>

    <span class="radio-item">
        <input type="radio" id="ritemb" name="ritem" class="false" value="ropt2">
        <label for="ritemb">False</label>
    </span>
</div>

:

CSS:

.radio-item input[type='radio'] {
    visibility: hidden;
    width: 20px;
    height: 20px;
    margin: 0 5px 0 5px;
    padding: 0;
}
    .radio-item input[type=radio]:before {
        position: relative;
        margin: 4px -25px -4px 0;
        display: inline-block;
        visibility: visible;
        width: 20px;
        height: 20px;
        border-radius: 10px;
        border: 2px inset rgba(150,150,150,0.75);
        background: radial-gradient(ellipse at top left, rgb(255,255,255) 0%, rgb(250,250,250) 5%, rgb(230,230,230) 95%, rgb(225,225,225) 100%);
        content: "";
    }
        .radio-item input[type=radio]:checked:after {
            position: relative;
            top: 0;
            left: 9px;
            display: inline-block;
            visibility: visible;
            border-radius: 6px;
            width: 12px;
            height: 12px;
            background: radial-gradient(ellipse at top left, rgb(245,255,200) 0%, rgb(225,250,100) 5%, rgb(75,175,0) 95%, rgb(25,100,0) 100%);
            content: "";
        }
            .radio-item input[type=radio].true:checked:after {
                background: radial-gradient(ellipse at top left, rgb(245,255,200) 0%, rgb(225,250,100) 5%, rgb(75,175,0) 95%, rgb(25,100,0) 100%);
            }
            .radio-item input[type=radio].false:checked:after {
                background: radial-gradient(ellipse at top left, rgb(255,225,200) 0%, rgb(250,200,150) 5%, rgb(200,25,0) 95%, rgb(100,25,0) 100%);
            }
.radio-item label {
    display: inline-block;
    height: 25px;
    line-height: 25px;
    margin: 0;
    padding: 0;
}

попередній перегляд: https://www.codeply.com/p/y47T4ylfib


1

Це неможливо за допомогою нативного CSS. Вам доведеться використовувати фонові зображення та деякі хитрощі javascript.


1

Як було сказано іншим, цього немає у всіх браузерах, тому найкращий спосіб зробити це крос-браузером - ненав’язливо використовувати JavaScript. В основному ви повинні перетворити свою радіову кнопку в посилання (повністю настроюється через CSS). кожне клацання посилання буде прив’язане до відповідного радіобоксу, перемикаючи його стан та всі інші.



0

Розумним способом зробити це було б створити окремий роздільник з висотою та шириною-для прикладу - 50 пікс., А потім радіус 50 пікс.


0

Ви можете вбудувати прольотний елемент у радіовхід, а потім вибрати колір, який ви бажаєте відображати, коли перевіряється вхід радіо. Перегляньте наведений нижче приклад із W3schools.

<!DOCTYPE html>
<html>
<style>
/* The container */
.container {
  display: block;
  position: relative;
  padding-left: 35px;
  margin-bottom: 12px;
  cursor: pointer;
  font-size: 22px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

/* Hide the browser's default radio button */
.container input {
  position: absolute;
  opacity: 0;
  cursor: pointer;
}

/* Create a custom radio button */
.checkmark {
  position: absolute;
  top: 0;
  left: 0;
  height: 25px;
  width: 25px;
  background-color: #eee;
  border-radius: 50%;
}

/* On mouse-over, add a grey background color */
.container:hover input ~ .checkmark {
  background-color: #ccc;
}

/* When the radio button is checked, add a blue background */
.container input:checked ~ .checkmark {
  background-color: #00a80e;
}

/* Create the indicator (the dot/circle - hidden when not checked) */
.checkmark:after {
  content: "";
  position: absolute;
  display: none;
}

/* Show the indicator (dot/circle) when checked */
.container input:checked ~ .checkmark:after {
  display: block;
}

/* Style the indicator (dot/circle) */
.container .checkmark:after {
    top: 9px;
    left: 9px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: white;
}
</style>
<body>

<h1>Custom Radio Buttons</h1>
<label class="container">One
  <input type="radio" checked="checked" name="radio">
  <span class="checkmark"></span>
</label>
<label class="container">Two
  <input type="radio" name="radio">
  <span class="checkmark"></span>
</label>
<label class="container">Three
  <input type="radio" name="radio">
  <span class="checkmark"></span>
</label>
<label class="container">Four
  <input type="radio" name="radio">
  <span class="checkmark"></span>
</label>

</body>

Зміна кольору фону в цьому сегменті коду нижче - це хитрість.

/* When the radio button is checked, add a blue background */
.container input:checked ~ .checkmark {
  background-color: #00a80e;
}

Виявлено, як створити власну перемикач


-1

Простим виправленням було б використання наступного властивості CSS.

input[type=radio]:checked{
    background: \*colour*\;
    border-radius: 15px;
    border: 4px solid #dfdfdf;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.