Кубизм 95/100 Где ошибка?

.palette {
display: flex;     

}

.palette div {
min-width: 35px;
min-height: 35px;

}

.palette [class$=fuchsia],
.palette [class$=yellow]{
height: 100px;
}

.palette [class$=olive],
.palette [class$=aqua] {
height: 150px;
width: 50px;
margin-top: auto;
margin-bottom: auto;
}

.palette [class$=yellow] {
margin-top: auto;
margin-bottom: 5px;
margin-left: 10px;
}

.palette [class$=fuchsia] {
margin-bottom: auto;
margin-top: 5px;
margin-right: 10px;
margin-left: auto;
}

.palette [class$=olive] {
margin-left: auto;
}

.palette [class$=aqua] {
margin-right: auto;
}

То, что Вы используете не самые обычные селекторы, это круто. На самом деле. Это хорошо, что Вы их помните и не боитесь применять.

Но в данном конкретном случае Вы немного усложнили себе задачу: селектор .palette [class$=fuchsia] и селектор .palette .color-fuchsia дают один результат, но второй вариант более читабельный, на мой взгляд. Более того - селектор .palette в данном задании вообще можно опустить - просто .color-fuchsia тоже отлично справится.

Но что мне не очень нравится - то, что Вы хотите его минимизировать, выдергивая из CSS-правила по 1-2 свойства и применяя их сразу к нескольким, перечисленным через “,” селекторам. Это хорошо для большого количества схожих объектов, но всего для пары - не очень. В итоге Вы только запутали код и запутались сами. Возьмите один объект и пропишите для него все свойства, затем возьмите следующий и пропишите все его свойства и т.д. Перед Вами будет четкая картина. А теперь смотрите - если одно свойство повторяется в двух CSS-правилах, то, казалось бы - давайте сделаем “как лучше” и вынесем его отдельно с перечислением селекторов. Но получиться “как всегда” - остальные свойства двух элементов так и останутся двумя отдельными правилами + вы создадите еще одно целое правило для всего одного свойства. Это немного не правильно - кода станет больше, а понять где что будет труднее. А также иногда имеет смысл прописывать свойства в сокращенном виде - если они простые (margin, padding) и вы используете несколько их составляющих.

И все же если хотите объединить часть свойств - сначала распишите их для каждого элемента, а затем уже перегруппируйте как Вам удобно. Так меньше вероятность, что Вы запутаетесь.

Вот мой вариант решения на 100% (правда у меня не получились абсолютно все отступы кратны 5):

.palette {
  display: flex;
}

.palette div {
  min-width: 35px;
  min-height: 35px;
}

.color-olive {
  width: 50px;
  height: 150px;
  margin: auto 0 auto auto;
}

.color-yellow {
  width: 35px;
  height: 100px;
  margin: auto 0 5px 10px;
}

.color-fuchsia {
  width: 35px;
  height: 100px;
  margin: 5px 0 auto 32px;
}

.color-aqua {
  width: 50px;
  height: 150px;
  margin: auto auto auto 10px;
}

А теперь попробуем его перегруппировать:

.palette {
  display: flex;
}

.palette div {
  min-width: 35px;
  min-height: 35px;
}

.color-olive,
.color-aqua {
  width: 50px;
  height: 150px;
}

.color-yellow,
.color-fuchsia {
  width: 35px;
  height: 100px;
}

.color-olive {  
  margin: auto 0 auto auto;
}

.color-yellow {
  margin: auto 0 5px 10px;
}

.color-fuchsia {
  margin: 5px 0 auto 32px;
}

.color-aqua {
  margin: auto auto auto 10px;
}

Первый вариант занял 32 строки, а второй - 36, хотя, казалось бы, его мы пытались упростить.

Впрочем не все меряется строчками. Выберите подход, который Вам нравится. Главное - чтобы он помог избежать ошибок и сделал код удобным.

1 лайк

Отступы кратны 5 - обязательный атрибут задания. Дело в том что я уже делал это задание когда то и спустя большое время перерешиваю. Если писать отступы какие хочешь то и проблем никаких нет…

В общем Вы пропустили мимо все, что я написала, и зациклились на одном отступе не кратном 5.
Ок. Изобретайте велосипеды и дальше. У каждого свой метод.

1 лайк

Кстати когда будете проходить интенсив базовый html и css, преподаватель “Александр Першин” скажет… Что он не может запомнить короткие свойства margin и padding, и по этому он всегда пишет явно. margin-left, margin right и так далее, он даже говорит это наоборот повышает читабельность нежели короткие записи.

1 лайк

И правильно делает.

На базовый интенсив приходят разные люди с разным уровнем подготовки. Кто-то из них не прошел даже пары курсов. Чтобы четко запомнить и понять как работает то или иное свойство нужна практика. Таким людям целесообразно прописывать свойства подробно и наглядно - в первую очередь для самих себя.
Более того, даже тем, кто хорошо знаком с сокращенной записью, лучше прописывать конкретные под-свойства вместо сокращенного, если требуется задать одно или два значения. К примеру, margin-bottom: 10px; лучше, чем margin: 0 0 10px 0;.

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

В HTML-шортах про сокращенные свойства Вадим Макеев ссылается на статью Гарри Робертса - вот она. Говоря о проблеме сокращенных свойств, “звезда Front-End-а” тем не менее признает удобство такой записи именно для подобных ситуаций:

Исключения

До сих пор мы рассматривали проблему с непреднамеренным отключением других свойств, но есть сценарий, в котором с сокращенным написанием было бы все в порядке. Возьмем, к примеру:

.box {
  padding: 10px;
}

Здесь мы не случайно используем сокращение, потому что хотим, чтобы все четыре стороны имели отступ 10px. Здесь имеет смысл именно такая запись. Или, к примеру, здесь:

.btn {
  padding: 12px 24px;
}

…а также:

.foo {
  margin: 12px 17px 16px 10px;
}

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

Главное, что нужно помнить, это то, что сокращать плохо, когда это влияет на свойства, которые вам не нужно изменять.

Преподаватели HTMLacademy делают все возможное чтобы ученики совершали поменьше ошибок. Но их слова не истина в последней инстанции - свою голову на плечах никто не отменял. Читайте, слушайте, изучайте - вы узнаете много нового.

1 лайк