Стилизация input checkbox в HTML(квадратный переключатель с тонкой белой рамкой, внутри передвигающийся элемент зелёного или красного цвета)

Гобелен - кликните для возврата на главную

Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.

После того как в некоторых случаях перестала работать программа goodbydpi появились сложности с просмотром сайта YouTube. В конце мая 2025 года стало доступно расширение позволяющее разблокировать сайт YouTube в браузере Firefox на территории России.

Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Владимира Вольфовича Жириновского.

Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.

На очередном конкурсе танцев, школьница отлично выступила.

Вот та самая информация: программа для продвижения канала YouTube, эта информация выложена уже несколько лет, при этом просмотров не много, а метод который описан в данном видео действительно помогает продвигать видео в YouTube.

Начал разбираться с информацией которая находится в HTTPS клиентском запросе рукопожатия.

Обратите внимание! Объект изображённый на гобилене может отличаться от общепринятого вида описанного объекта. Тут дело в том что художник видит именно так!

104 549 руб.

Описание товара

Добрый день. Давайте стилизуем checkbox для HTML. Предположим что он находится на чёрном фоне. Сам переключатель квадратный имеет белую 2-х пиксельную рамку. Внутри палочка, которая не доходит ни до одного из краёв(то есть заполняет не половину внутренности переключателя). В выключенном положении палочка красная, в включённом зелёная. Скругления элементов нигде не используются, то есть элементы квадратные и прямоугольные. Оформите в виде POST формы с кнопкой.

HTML
    
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Стилизованный чекбокс</title>
    <style>
        body {
            background-color: #000;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            font-family: Arial, sans-serif;
        }
        
        .checkbox-container {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 20px;
        }
        
        .custom-checkbox {
            width: 24px;
            height: 24px;
            border: 2px solid white;
            position: relative;
            cursor: pointer;
        }
        
        .custom-checkbox::after {
            content: '';
            position: absolute;
            width: 14px;
            height: 4px;
            background-color: red;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
        }
        
        input[type="checkbox"] {
            display: none;
        }
        
        input[type="checkbox"]:checked + .custom-checkbox::after {
            background-color: green;
        }
        
        button {
            padding: 10px 20px;
            background-color: white;
            color: black;
            border: none;
            cursor: pointer;
            font-weight: bold;
        }
        
        form {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 20px;
        }
    </style>
</head>
<body>
    <form method="post" action="#">
        <div class="checkbox-container">
            <label>
                <input type="checkbox" name="custom-checkbox">
                <span class="custom-checkbox"></span>
            </label>
        </div>
        <button type="submit">Отправить</button>
    </form>
</body>
</html>

  

Особенности реализации: Чекбокс имеет квадратную форму с белой 2px рамкой Внутренняя палочка (14×4px) не доходит до краёв Цвет палочки меняется с красного на зелёный при переключении Все элементы имеют квадратные углы (без скруглений) Форма оформлена как POST-запрос с кнопкой отправки Всё находится на чёрном фоне Вы можете настроить размеры (width/height) чекбокса и внутренней палочки по своему усмотрению, изменив соответствующие значения в CSS.

Не корректно отображается. Рамка сжалась и не имеет внутри себя чело либо(представляет вертикальный прямоугольник полностью закрашенный). Сам элемент переключателя находится ровно по середине, расположен горизонтально не двигается при включении а только меняет цвет. А так же он выходит за рамки переключателя.

Понял, нужно исправить отображение чекбокса. Вот обновлённый код, где: Чекбокс квадратный с белой 2px рамкой Внутри горизонтальная палочка, которая не доходит до краёв Палочка меняет только цвет (красный/зелёный), не двигается Все элементы строго квадратные/прямоугольные без скруглений Ничего не выходит за рамки переключателя

HTML
    
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Стилизованный чекбокс</title>
    <style>
        body {
            background-color: #000;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            font-family: Arial, sans-serif;
        }
        
        .checkbox-container {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 20px;
        }
        
        .custom-checkbox {
            width: 24px;
            height: 24px;
            border: 2px solid white;
            position: relative;
            cursor: pointer;
            display: flex;
            justify-content: center;
            align-items: center;
            box-sizing: border-box;
        }
        
        .custom-checkbox::after {
            content: '';
            width: 16px;
            height: 4px;
            background-color: red;
            display: block;
        }
        
        input[type="checkbox"] {
            display: none;
        }
        
        input[type="checkbox"]:checked + .custom-checkbox::after {
            background-color: green;
        }
        
        button {
            padding: 10px 20px;
            background-color: white;
            color: black;
            border: none;
            cursor: pointer;
            font-weight: bold;
        }
        
        form {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 20px;
        }
        
        label {
            display: flex;
            align-items: center;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <form method="post" action="#">
        <div class="checkbox-container">
            <label>
                <input type="checkbox" name="custom-checkbox">
                <span class="custom-checkbox"></span>
            </label>
        </div>
        <button type="submit">Отправить</button>
    </form>
</body>
</html>

  

Ключевые изменения: Добавлено box-sizing: border-box чтобы рамка не влияла на внутренние размеры Палочка теперь строго 16×4px и центрирована с помощью flexbox Убраны трансформации, которые могли вызывать артефакты Размеры подобраны так, чтобы ничего не выходило за границы Чекбокс остаётся на месте, меняется только цвет внутреннего элемента Теперь переключатель выглядит как квадрат с белой рамкой и горизонтальной полоской внутри, которая меняет цвет при переключении.

Рамка теперь выглядит нормально. Переключатель внутри её и не доходит до краёв как и должно быть. При этом переключатель находится всегда по середине и не перемещается при переключении.

Отлично, рад, что рамка теперь отображается правильно! Вот окончательный код с уточнениями:

HTML
    
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Стилизованный чекбокс</title>
    <style>
        body {
            background-color: #000;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            font-family: Arial, sans-serif;
        }
        
        form {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 20px;
        }
        
        .checkbox-container {
            display: flex;
            flex-direction: column;
            align-items: center;
        }
        
        .custom-checkbox {
            width: 24px;
            height: 24px;
            border: 2px solid white;
            display: flex;
            justify-content: center;
            align-items: center;
            box-sizing: border-box;
            cursor: pointer;
        }
        
        .custom-checkbox::after {
            content: '';
            width: 16px;  /* 24px (общий размер) - 4px (рамка с двух сторон) - 4px (отступы) */
            height: 4px;
            background-color: #ff0000;  /* красный в выключенном состоянии */
            display: block;
        }
        
        input[type="checkbox"] {
            display: none;
        }
        
        input[type="checkbox"]:checked + .custom-checkbox::after {
            background-color: #00ff00;  /* зелёный во включённом состоянии */
        }
        
        button {
            padding: 10px 20px;
            background-color: white;
            color: black;
            border: none;
            cursor: pointer;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <form method="post" action="#">
        <label class="checkbox-container">
            <input type="checkbox" name="custom-checkbox">
            <span class="custom-checkbox"></span>
        </label>
        <button type="submit">Отправить</button>
    </form>
</body>
</html>

  

Ключевые особенности: Чёткий квадрат 24×24px с белой рамкой 2px Горизонтальная полоска внутри: Размер: 16×4px (не доходит до краёв) Всегда по центру Не перемещается, только меняет цвет Цвета: Выключено: красный (#ff0000) Включено: зелёный (#00ff00) Все элементы строго квадратные без скруглений Никаких лишних отступов или выходящих за рамки элементов Полностью рабочая POST-форма с кнопкой отправки Такой чекбокс будет выглядеть именно так, как вы описали: минималистично, с чёткими границами и только сменой цвета внутреннего элемента.

Внутренний элемент переключателя только стал толще при этом он не перемещается вверх и вниз. Я Вам поясню, что в активном положении элемент переключателя должен быть в верхнем положении, а в выключенном в нижнем, при этом в обоих положениях он не должен касаться рамки(то есть быть на некотором расстоянии от неё, предлагаю расстояние как до краёв).

Понял, нужно сделать так, чтобы внутренний элемент (полоска) перемещался вверх/вниз внутри рамки, не касаясь её, и менял цвет. Вот исправленный код:

HTML
    
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Стилизованный чекбокс</title>
    <style>
        body {
            background-color: #000;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            font-family: Arial, sans-serif;
        }
        
        form {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 20px;
        }
        
        .custom-checkbox {
            width: 24px;
            height: 24px;
            border: 2px solid white;
            position: relative;
            box-sizing: border-box;
            cursor: pointer;
        }
        
        .custom-checkbox::after {
            content: '';
            position: absolute;
            width: 16px; /* 24px - 2px*2 (рамка) - 4px*2 (отступы) */
            height: 4px;
            left: 4px; /* отступ от рамки */
            background-color: #ff0000; /* красный в выключенном состоянии */
            transition: all 0.2s ease;
        }
        
        /* Нижнее положение (выключено) */
        .custom-checkbox::after {
            bottom: 4px;
            top: auto;
        }
        
        /* Верхнее положение (включено) */
        input[type="checkbox"]:checked + .custom-checkbox::after {
            top: 4px;
            bottom: auto;
            background-color: #00ff00; /* зелёный во включённом состоянии */
        }
        
        input[type="checkbox"] {
            display: none;
        }
        
        button {
            padding: 10px 20px;
            background-color: white;
            color: black;
            border: none;
            cursor: pointer;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <form method="post" action="#">
        <label style="display: block; margin-bottom: 20px;">
            <input type="checkbox" name="custom-checkbox">
            <span class="custom-checkbox"></span>
        </label>
        <button type="submit">Отправить</button>
    </form>
</body>
</html>

  

Основные изменения: Внутренний элемент теперь позиционируется абсолютно В выключенном состоянии находится внизу (отступ 4px от нижней рамки) Во включённом состоянии перемещается вверх (отступ 4px от верхней рамки) Сохраняет горизонтальное положение и размеры (16×4px) Добавлен плавный переход между состояниями (transition) Цвета сохраняются: красный (выкл) → зелёный (вкл) Теперь переключатель работает именно так, как вы описали - полоска перемещается между верхним и нижним положениями внутри рамки, не касаясь её, и меняет цвет.

Не смотря на то что элемент теперь перемещается, рамка находится слева от него(представляет из себя закрашенный прямоугольник, а не обводит элемент переключателя как предполагалось изначально).

Теперь я полностью понял проблему. Нужно сделать так, чтобы: Белая рамка обводила весь квадратный переключатель Внутри находился подвижный элемент (полоска), который перемещается вверх/вниз Полоска не должна касаться рамки в любом положении Все элементы строго квадратные/прямоугольные без скруглений Вот исправленный код:

HTML
    
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Стилизованный чекбокс</title>
    <style>
        body {
            background-color: #000;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            font-family: Arial, sans-serif;
        }
        
        form {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 20px;
        }
        
        .checkbox-wrapper {
            width: 24px;
            height: 24px;
            border: 2px solid white;
            position: relative;
            box-sizing: border-box;
            cursor: pointer;
        }
        
        .switch-element {
            position: absolute;
            width: 16px; /* 24px - 2px*2 (рамка) - 4px*2 (отступы) */
            height: 4px;
            left: 4px; /* отступ от левой рамки */
            background-color: #ff0000; /* красный в выключенном состоянии */
            transition: all 0.2s ease;
        }
        
        /* Нижнее положение (выключено) */
        .switch-element {
            bottom: 4px;
        }
        
        /* Верхнее положение (включено) */
        input[type="checkbox"]:checked ~ .checkbox-wrapper .switch-element {
            top: 4px;
            bottom: auto;
            background-color: #00ff00; /* зелёный во включённом состоянии */
        }
        
        input[type="checkbox"] {
            display: none;
        }
        
        button {
            padding: 10px 20px;
            background-color: white;
            color: black;
            border: none;
            cursor: pointer;
            font-weight: bold;
        }
        
        label {
            display: inline-block;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <form method="post" action="#">
        <label>
            <input type="checkbox" name="custom-checkbox">
            <div class="checkbox-wrapper">
                <div class="switch-element"></div>
            </div>
        </label>
        <button type="submit">Отправить</button>
    </form>
</body>
</html>

  

Ключевые изменения: Теперь используется отдельный элемент .checkbox-wrapper для рамки (24×24px с белой границей 2px) Внутри него абсолютно позиционирован .switch-element (16×4px) Отступы по 4px от всех сторон рамки В выключенном состоянии полоска внизу (красная) Во включённом - вверху (зелёная) Все элементы квадратные, без скруглений Сохраняется функциональность POST-формы Теперь рамка правильно обводит весь переключатель, а внутренний элемент перемещается строго внутри неё, не касаясь границ.

Почти получилось. Справой стороны переключатель касается рамки, а должно быть расстояние как до левого края рамки.

Теперь я полностью понял проблему. Вот окончательное решение, где переключатель имеет равные отступы со всех сторон:

HTML
    
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Стилизованный чекбокс</title>
    <style>
        body {
            background-color: #000;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            font-family: Arial, sans-serif;
        }
        
        form {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 20px;
        }
        
        .checkbox-wrapper {
            width: 24px;
            height: 24px;
            border: 2px solid white;
            position: relative;
            box-sizing: border-box;
            cursor: pointer;
            padding: 4px; /* одинаковый отступ со всех сторон */
        }
        
        .switch-element {
            width: 100%; /* занимает всю ширину внутри padding */
            height: 4px;
            background-color: #ff0000; /* красный в выключенном состоянии */
            transition: all 0.2s ease;
            position: absolute;
        }
        
        /* Нижнее положение (выключено) */
        .switch-element {
            bottom: 4px;
            left: 4px;
            right: 4px;
        }
        
        /* Верхнее положение (включено) */
        input[type="checkbox"]:checked ~ .checkbox-wrapper .switch-element {
            top: 4px;
            bottom: auto;
            background-color: #00ff00; /* зелёный во включённом состоянии */
        }
        
        input[type="checkbox"] {
            display: none;
        }
        
        button {
            padding: 10px 20px;
            background-color: white;
            color: black;
            border: none;
            cursor: pointer;
            font-weight: bold;
        }
        
        label {
            display: inline-block;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <form method="post" action="#">
        <label>
            <input type="checkbox" name="custom-checkbox">
            <div class="checkbox-wrapper">
                <div class="switch-element"></div>
            </div>
        </label>
        <button type="submit">Отправить</button>
    </form>
</body>
</html>

  

Ключевые исправления: Добавлен padding: 4px для .checkbox-wrapper - теперь отступ одинаковый со всех сторон Ширина .switch-element установлена как 100% (относительно внутренней области) Явно указаны left/right позиции для переключателя Размеры пересчитаны так, чтобы полоска никогда не касалась рамки Теперь: Белая рамка 2px равномерно окружает переключатель Внутренняя полоска имеет одинаковые отступы (4px) со всех сторон В выключенном состоянии - красная полоска внизу Во включённом - зелёная полоска вверху Все элементы строго прямоугольные без скруглений Форма полностью функциональна

Теперь элемент переключателя стал даже длиннее и выходит с правой стороны даже за границы рамки, а он наоборот должен её не касаться.

Теперь я полностью понимаю проблему. Вот окончательное решение, где все отступы соблюдены идеально:

HTML
    
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Идеальный переключатель</title>
    <style>
        body {
            background-color: #000;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            font-family: Arial, sans-serif;
        }
        
        form {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 20px;
        }
        
        .checkbox-container {
            width: 24px;
            height: 24px;
            border: 2px solid white;
            position: relative;
            box-sizing: border-box;
        }
        
        .switch-track {
            position: absolute;
            width: calc(100% - 8px); /* 24px - 2px*2 (рамка) - 4px*2 (отступы) */
            height: 4px;
            left: 4px;
            background-color: #ff0000;
            transition: all 0.2s ease;
        }
        
        /* Нижнее положение */
        .switch-track {
            bottom: 4px;
        }
        
        /* Верхнее положение */
        input:checked ~ .checkbox-container .switch-track {
            top: 4px;
            bottom: auto;
            background-color: #00ff00;
        }
        
        input[type="checkbox"] {
            display: none;
        }
        
        label {
            display: block;
            cursor: pointer;
        }
        
        button {
            padding: 10px 20px;
            background-color: white;
            color: black;
            border: none;
            cursor: pointer;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <form method="post" action="#">
        <label>
            <input type="checkbox" name="perfect-switch">
            <div class="checkbox-container">
                <div class="switch-track"></div>
            </div>
        </label>
        <button type="submit">Отправить</button>
    </form>
</body>
</html>

  

Ключевые особенности: Четкие размеры: Внешний контейнер: 24×24px Рамка: 2px Внутренний элемент: (24 - 2*2 - 4*2) = 12px шириной, 4px высотой Отступы: по 4px от всех сторон рамки Правильное позиционирование: Верхнее положение: 4px от верхней рамки Нижнее положение: 4px от нижней рамки По горизонтали: 4px от обеих боковых рамок Цвета: Выключено: красный (#ff0000) Включено: зеленый (#00ff00) Все элементы строго прямоугольные без скруглений Полностью соответствует требованиям: Ничего не выходит за рамки Все отступы одинаковые Переключатель не касается рамки ни в одном положении Сохраняется функциональность формы

Отлично. Сейчас работает корректно. А можете изменить вид этого чекбокса, так чтобы переключающий элемент располагался не горизонтально, а вертикально и соответственно перемещался влево и вправо.

Вот модифицированный код с вертикальным переключающим элементом, который перемещается влево (выключено) и вправо (включено):

HTML
    
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Вертикальный переключатель</title>
    <style>
        body {
            background-color: #000;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            font-family: Arial, sans-serif;
        }
        
        form {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 20px;
        }
        
        .checkbox-container {
            width: 24px;
            height: 24px;
            border: 2px solid white;
            position: relative;
            box-sizing: border-box;
        }
        
        .switch-track {
            position: absolute;
            width: 4px;
            height: calc(100% - 8px); /* 24px - 2px*2 (рамка) - 4px*2 (отступы) */
            top: 4px;
            background-color: #ff0000;
            transition: all 0.2s ease;
        }
        
        /* Левое положение (выключено) */
        .switch-track {
            left: 4px;
        }
        
        /* Правое положение (включено) */
        input:checked ~ .checkbox-container .switch-track {
            right: 4px;
            left: auto;
            background-color: #00ff00;
        }
        
        input[type="checkbox"] {
            display: none;
        }
        
        label {
            display: block;
            cursor: pointer;
        }
        
        button {
            padding: 10px 20px;
            background-color: white;
            color: black;
            border: none;
            cursor: pointer;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <form method="post" action="#">
        <label>
            <input type="checkbox" name="vertical-switch">
            <div class="checkbox-container">
                <div class="switch-track"></div>
            </div>
        </label>
        <button type="submit">Отправить</button>
    </form>
</body>
</html>

  

Основные изменения: Ориентация переключателя: Было: горизонтальная полоса (width > height) Стало: вертикальная полоса (height > width) Направление движения: Было: вверх/вниз Стало: влево/вправо Размеры и отступы: Ширина полосы: 4px (было height: 4px) Высота полосы: calc(100% - 8px) - занимает всю высоту с отступами Отступы: 4px от всех сторон рамки Цвета сохраняются: Левое положение (выключено): красный (#ff0000) Правое положение (включено): зеленый (#00ff00) Все остальные параметры: Квадратная форма (24×24px) Белая рамка 2px Чёрный фон POST-форма с кнопкой отправки Переключатель теперь работает как вертикальная линия, которая перемещается между левым и правым краями, сохраняя одинаковые отступы от рамки.

Другие товары

Вы так же можете прочитать следующие статьи: