Селекторы, часть 3 / Испытание: UI-кит для формы [18/18]

По коду все правильно сделал?

    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[type="radio"],
input[type="checkbox"]{
    display: none;
}

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

input[type="checkbox"] + label:before,
input[type="radio"] + label: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;
}

input[type="radio"] + label:before {
    border-radius: 50%;
}

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

input[type="radio"]:checked + label,
input[type="checkbox"]:checked + label{
    color: #1abc9c;
}

input[type="radio"]:disabled + label:before,
input[type="checkbox"]:disabled + label:before{
    box-shadow: 0 0 0 3px #ecf0f1;
}

input[type="radio"]:disabled + label,
input[type="checkbox"]: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[type="text"]:required {
    border-color: #e74c3c;
}

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

input[type="text"]:invalid {
    color: #c0392b;
    background: #f2a097;
    border-color: #e74c3c;
}
1 лайк
смешно конечно, но я пошел проще ,совсем забыв о required,disabled ,invalid  =)


  input[value="Обязательное"] {
    border-color: #e74c3c;
}

input[value="Заблокированное"] {
    color: #bdc3c7;
    background: #f5f5f5;
    border-color: #ecf0f1;
}

input[value="Неверные данные"] {
    color: #c0392b;
    background: #f2a097;
    border-color: #e74c3c;
}

даже нет, даже совсем по другому сделал,результат 100%

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[id*="radio"],[id*="checkbox"]{
    display: none;
}

label[for="radio-2"],[for="checkbox-2"] /*тест*/{
    vertical-align: middle;
    color: #7f8c8d;
}

label[for*="checkbox"]:before,[for*="radio"]: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%;
}

label[for="checkbox-1"]:before,[for="radio-1"]:before {
    background: #1abc9c;
    box-shadow: 0 0 0 3px #1abc9c;
}

label[for="radio-1"],[for="checkbox-1"]  {
    color: #1abc9c;
}

label[for="checkbox-3"]:before,[for="radio-3"]:before{
    box-shadow: 0 0 0 3px #ecf0f1;
}

label[for="checkbox-3"],[for="radio-3"] {
    color: #ecf0f1;
}

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

input[value="Обязательное"] {
    border-color: #e74c3c;
}

input[value="Заблокированное"] {
    color: #bdc3c7;
    background: #f5f5f5;
    border-color: #ecf0f1;
}

input[value="Неверные данные"] {
    color: #c0392b;
    background: #f2a097;
    border-color: #e74c3c;
}

А почему before и after с одним двоеточием проходит?

это вроде как кавычки “” или ‘’ =)

где кавычки?

я аналогию привел =)

аа )) так оно может быть и с одинарным и с двойным? я думала - это важно

Одно двоеточие — это старый синтасис, два двоеточия — новый. С двумя двоеточиями пишутся псевдоэлементы, а с одним — псевдоклассы.

2 лайка

добавлю,это для визуального отличия, на результате никак не скажется

смешно конечно, но я пошел проще ,совсем забыв о required,disabled ,invalid =)

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

А почему все через label делается? В реальности, как лучше задавать стили для форм в верстке при реальной работе над настоящим сайтом?

Мурыжился целый день!! Оказалось что ::BEFORE нужно было вставлять в LABEL а не INPUT!!! НУ ВОТ КАК ТАК МОЖНО ДЕБИЛЬНО!!!

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;
}

/прячем “заводске” радио и чекбоксы, чтобы уменьшить ширину у div и потому что они нам не нужны, мы будем рисовать свои кружочки. При нажатии на лейбл будет выделятся, ибо они по ID связаны/
input[type=“radio”],
input[type=“checkbox”]
{
display: none;
}

input:not(:checked)+label {
vertical-align: middle;
color: #7f8c8d;
}

/тут мы добавляем элемент бифор в тег LABEL (А НЕ В ТЕГ INPUT, как я ДЕБИЛЬНО делал на протяжении всего дня!!!), который выглядят так как нам надо(кружочек с точкой внутри)/
input[type=radio]+label::before,
input[type=checkbox]+label::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;
}

/скругляем наш элемент бифор внутри лейбла/
input[type=radio]+label::before
{
border-radius: 50%;
}

/окрашиваем точку внутри(фон зажатый белой границей) в бирюзу и тень(бокс-шадоу) в такой же цвет/
input[type=radio]:checked+label::before,
input[type=checkbox]:checked+label::before {
background: #1abc9c;
box-shadow: 0 0 0 3px #1abc9c;
}
/сам лейбл окрашиваем в цвет активности/
input[type=radio]:checked+label,
input[type=checkbox]:checked+label {
color: #1abc9c;
}

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

input[type=radio]:disabled+label,
input[type=checkbox]: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[type=text]:required,
input[value*=“евер”]
{
border-color: #e74c3c;
}

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

input[value*=“евер”] {
color: #c0392b;
background: #f2a097;
border-color: #e74c3c;
}

1 лайк

:grin:

Возможно Вы уже догадались, но before и after в принципе можно применять только к тегам, у которых есть содержание, к парным тегам, так как они добавляются до и после содержимого соответственно. Если обратитесь к тегу с псевдо-элементами в отладчике браузера, то увидите:

<div>
::before
<img alt="Какая-то картинка">
::after
</div>

Т.е. к самому тегу img, например, их не добавить.

Не согласен с Вашим мнением о том что их

Цитата before и after в принципе можно применять только к тегам, у которых есть содержание, к парным тегам, так как они добавляются до и после содержимого соответственно

Если вы их попробуете вставить в INPUT, то в принципе, как раз таки, эти теги и вставятся. И даже браузер будет отображать содержимое content=“A” (например A). Как раз таки принципиально это возможно сделать. Но это не нужно делать конкретно в этом задании, ибо оно заточено под вставку в LABEL.

А мне кажется, это не нужно делать не только в этом задании, но и вообще. Ну попробовать их задать Вы конечно можете, но это выстрел себе в ногу - справочник Can I use, например, говорит нам что Firefox и Edge вообще не поддерживают псевдо-элементы для полей ввода (вкладка Known issues). Огрести проблемы сразу с двумя современными браузерами - зачем?

Мой вариант

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[type=“radio”],
input[type=“checkbox”]{
display: none;
}

input:not(:checked)+label {
vertical-align: middle;
color: #7f8c8d;
}

input[type=“checkbox”] + label::before,
input[type=“radio”] + label::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;
}

input[type=“radio”]+label::before {
border-radius: 50%;
}

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

input[type=“radio”]:checked+label,
input[type=“checkbox”]:checked+label {
color: #1abc9c;
}

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

input[type=“radio”]:disabled+label,
input[type=“checkbox”]: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[type=“text”]:required,
input[type=“text”]:invalid{
border-color: #e74c3c;
}

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

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

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[type=“radio”],
input[type=“checkbox”] {
display: none;
}

#radio-2 + label,
#checkbox-2 + label {
vertical-align: middle;
color: #7f8c8d;
}

input[type=“radio”] + label::before ,
input[type=“checkbox”] + label::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;
}

input[type=“radio”] + label::before {
border-radius: 50%;
}

input:checked + label::before {
background: #1abc9c;
box-shadow: 0 0 0 3px #1abc9c;
}

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

input:disabled + label::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:disabled {
color: #bdc3c7;
background: #f5f5f5;
border-color: #ecf0f1;
}

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

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;
}

.half-width input{
display: none;
}

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

.half-width label[for]::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;
}

.half-width label[for^=“rad”]::before{
border-radius: 50%;
}

.half-width input:checked+label::before{
background: #1abc9c;
box-shadow: 0 0 0 3px #1abc9c;
}

.half-width input:checked+label{
color: #1abc9c;
}

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

.half-width input:disabled+label{
color: #ecf0f1;
}

label~input {
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:disabled {
color: #bdc3c7;
background: #f5f5f5;
border-color: #ecf0f1;
}

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

Прошу оценить решение. Спасибо.

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;
}

.half-width input {
display: none;
}

.half-width input+label {
vertical-align: middle;
color: #7f8c8d;/серый++/
}

.half-width input+label::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;
}

.half-width input[type=“radio”]+label::before {
border-radius: 50%;
}

.half-width input:checked+label::before {
background: #1abc9c;/бирюзовый/
box-shadow: 0 0 0 3px #1abc9c;/бирюзовый/
}

.half-width input:checked+label {
color: #1abc9c;/бирюзовый/
}

.half-width input:disabled+label::before {
box-shadow: 0 0 0 3px #ecf0f1;/серый/
}

.half-width 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;
}

label~input[required] {
border-color: #e74c3c;/Розовый/
}

label~input[disabled] {
color: #bdc3c7;/серый+/
background: #f5f5f5;/белый/
border-color: #ecf0f1;/серый/
}

input[value^=“Неверные”] {
color: #c0392b; /красно-розовый/
background: #f2a097; /светло-розовый/
border-color: #e74c3c;/светло-красный/
}