Задание №18 "UI-кит для формы"

Здравствуйте. Помогите с выполнением задания. Ни как не могу понять как изменить внешний вид радиобаттонов и чекбоксов. С текстом более-менее понятно, а с этими не могу справиться. Ума не приложу.

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

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

body {
    width: 550px;
}
form {
    margin: 0 auto;
    padding: 20px;
    width: 400px; 
    border-radius: 10px;
    background-color: #fff;
    box-shadow: 0 0 10px #ccc;
}
fieldset {
    padding: 10px;
    border: 1px solid #34495e;
    border-radius: 5px;
}
fieldset legend{
    color: #34495e;
}
.half-width {
    width: 50%;
    display: inline-block;
    margin-right: -4px;
}
label {
    display: block;
    margin-bottom: 5px;
    margin-top: 10px;
}
input[type="radio"], input[type="checkbox"] {
    display: none;
}
label[for$="-2"] {
    color: #7f8c8d;
    vertical-align: middle;
}
input:not([type="text"]) {
    content: "";
    display: inline-block;
    width: 7px;
    height: 7px;
    margin-right: 8px;
    vertical-align: middle;
    border: 3px solid #fff;
    box-shadow: 0 0 0 3px #bdc3c7;
}
selector {
    border-radius: 50%;
}
#radio-1 {
    background: #1abc9c;
    box-shadow: 0 0 0 3px #1abc9c;
}
label[for$="-1"] {
    color: #1abc9c;
}
input[id$="-3"] {
    box-shadow: 0 0 0 3px #ecf0f1;
}
label[for$="-3"] {
    color: #ecf0f1;
}
input[type="text"] {
    margin-bottom: 10px;
    padding: 2px 5px;
    width: 95%;
    height: 24px;
    color: #000;
    border: 2px solid #bdc3c7;
    border-radius: 5px;
    vertical-align: middle;
    font-family: "Roboto";
}
input:required {
    border-color: #e74c3c;
}
input:disabled {
    border-color: #ecf0f1;
    color: #bdc3c7;
    background: #f5f5f5;
}
input[pattern] {
    border-color: #e74c3c;
    color: #c0392b;
    background: #F2A097;
}

Вот в этом фрагменте:
input:not([type=“text”]) {
content: “”;
display: inline-block;
width: 7px;
height: 7px;
margin-right: 8px;
vertical-align: middle;
border: 3px solid #fff;
box-shadow: 0 0 0 3px #bdc3c7;
}
свойство content вам подсказывает, что это должен быть псевдоэлемент. Само поле чекбокса у вас скрыто (display: none;), а псевдоэлемент добавляется к label.
Селектор будет такой: input[type=“checkbox”] + label:before. По такому же принципу напишите селектор для радиобаттона.

2 лайка

Спасибо за помощь, все сделал на 100%.

:blush: :+1:

Здравствуйте. А можно прокомментировать мой код? мне кажется у меня как-то много всего вышло…

body {
width: 550px;
}

form {
width: 400px;
margin: 0 auto;
padding: 20px;
border-radius: 10px;
background-color: #ffffff;
box-shadow: 0 0 10px #cccccc;
}

fieldset {
padding: 10px;
border: 1px solid #34495e;
border-radius: 5px;
}

fieldset legend {
color: #34495e;
}

.half-width {
display: inline-block;
width: 50%;
margin-right: -4px;
}

label {
display: block;
margin-bottom: 5px;
margin-top: 10px;
}

input:not([type=“text”]) {
display: none;
}

input[type=“radio”] + label,
input[type=“checkbox”] + label{
vertical-align: middle;
color: #7f8c8d;
}

label[for*=“radio”]::before,
label[for*=“checkbox”]::before {
content: “”;
display: inline-block;
width: 7px;
height: 7px;
margin-right: 8px;
vertical-align: middle;
border: 3px solid #ffffff;
box-shadow: 0 0 0 3px #bdc3c7;
}

label[for*=“radio”]::before {
border-radius: 50%;
}

input:checked + label[for*=“radio”]::before,
input:checked + label[for*=“checkbox”]::before {
background: #1abc9c;
box-shadow: 0 0 0 3px #1abc9c;
}

input:checked + label {
color: #1abc9c;
}

input:disabled + label[for*=“radio”]::before,
input:disabled + label[for*=“checkbox”]::before {
box-shadow: 0 0 0 3px #ecf0f1;
}

input:disabled + label {
color: #ecf0f1;
}

input[type=“text”] {
width: 95%;
height: 24px;
margin-bottom: 10px;
padding: 2px 5px;
color: #000;
border: 2px solid #bdc3c7;
border-radius: 5px;
vertical-align: middle;
}

input:required {
border-color: #e74c3c;
}

input[type=“text”]:disabled {
color: #bdc3c7;
background: #f5f5f5;
border-color: #ecf0f1;
}

input:invalid {
color: #c0392b;
background: #f2a097;
border-color: #e74c3c;
}

Вместо этого можно просто input:checked+label:before. Для disabled так же.

Проверьте, пожалуйста, мой код. Требуется критика. И есть вопрос: мы указываем рамки для текстовых полей, но при попытке редактировать содержимое поля подсвечивается дополнительная рамка синего цвета. Ее можно убрать?
body {
width: 550px;
}

form {
width: 400px;
margin: 0 auto;
padding: 20px;
border-radius: 10px;
background-color: #ffffff;
box-shadow: 0 0 10px #cccccc;
}

fieldset {
padding: 10px;
border: 1px solid #34495e;
border-radius: 5px;
}

fieldset legend {
color: #34495e;
}

.half-width {
display: inline-block;
width: 50%;
margin-right: -4px;
}

label {
display: block;
margin-bottom: 5px;
margin-top: 10px;
}


[type="radio"],
[type="checkbox"] {
display: none;
}

label[for] {
vertical-align: middle;
color: #7f8c8d;
}

label[for^="radio"]::before,
label[for^="check"]::before {
content: "";
display: inline-block;
width: 7px;
height: 7px;
margin-right: 8px;
vertical-align: middle;
border: 3px solid #ffffff;
box-shadow: 0 0 0 3px #bdc3c7;
}

label[for^="radio"]::before {
border-radius: 50%;
}
:checked  + label::before{
background: #1abc9c;
box-shadow: 0 0 0 3px #1abc9c;
}

:checked + label {
color: #1abc9c;
}

:disabled + label::before{
box-shadow: 0 0 0 3px #ecf0f1;
}

:disabled + label {
color: #ecf0f1;
}

[type="text"] {
width: 95%;
height: 24px;
margin-bottom: 10px;
padding: 2px 5px;
color: #000;
border: 2px solid #bdc3c7;
border-radius: 5px;
vertical-align: middle;
}

[type="text"]:required {
border-color: #e74c3c;
}

[type="text"]:disabled {
color: #bdc3c7;
background: #f5f5f5;
border-color: #ecf0f1;
}

[type="text"]:invalid {
color: #c0392b;
background: #f2a097;
border-color: #e74c3c;
}

Возможно, вы имеете в виду стилизацию полей при фокусировке.
Тогда примерно так:

input[type="text"]:focus {
    border: none;
}

К коду испытания вопросов нет.

Да,уже заглянула в последующие курсы и обнаружила. Спасибо!
На счет кода: label[for] с ним тоже все нормально, можно так писать?

А, вы об этом… Теоретически, да, можно. Но всё же лучше дописать и значение атрибута.