Испытание 18/18 100% Вопрос

Вот сделал на 100%, но ощущение, что это должно быть в коде все намного проще, как можно сократить мой код?



    
        
        Испытание: анонс поста
    
    
        
Интенсив: программа
13.09
Автор: HTML Academy
5
Работа над интенсивом идёт полным ходом. Мы нашли крутых людей в команду и решили еще кучу задач. Но сегодня я подробнее
расскажу о работе над программой интенсива.

CSS

html,
body {
    margin: 0;
    padding: 0;
}

body {
    width: 280px;
    min-height: 250px;
    padding-top: 50px;
    padding-left: 10px;
    padding-right: 10px;
    font-size: 12px;
    font-family: "Arial", sans-serif;
    line-height: 1.2;
    color: #7f8c8d;
    background: #ecf0f1;
}
.post .post-title {
    font-size: 20px;
    color: #2980b9;
    margin-left: 75px;
    white-space: nowrap;
}
.post .post-date {
    display: block;
    position: absolute;
    width: 55px;
    height: 60px;
    background-color: #ffffff;
    border-bottom: 5px solid #bdc3c7;
    font-size: 15px;
    font-weight: bold;
    text-align:center;
    box-sizing: border-box;
    padding-top: 19px;
    margin-top: -24px;
    color: #7f8c8d;
}
.post .post-type {
    display: block;
    position:absolute;
    width: 55px;
    height: 55px;
    background:#7f8c8d url("/assets/course14/quotes.png") no-repeat 50% 50%;
    border-bottom: 5px solid #bdc3c7;
    margin-top: 46px;
}

.post-stats .icon {
    width: 15px;
    height: 15px;
}
.post .post-text {
    position: absolute;
    width: 180px;
    height: 95px;
    background-color: #ffffff;
    margin-left: 75px;
    margin-top: 38px;
    border-bottom: 5px solid #bdc3c7;
    padding-left: 15px;
    padding-top: 10px;
    padding-bottom: 13px;
}
.post .post-autor a,
.post .post-author {
    display: inline-block;
    position: absolute;
    margin-left: 75px;
    margin-top: 5px;
}
.post .post-stats {
    display: inline-block;
    position: absolute;
    margin-left: 95px;
    margin-top: 24px;
}
.post .end {
    display: inline-block;
    position: absolute;
    margin-left: 247px;
}
.post .post-stats .icon-comments {
    display: inline-block;
    position: absolute;
    width: 15px;
    height: 15px;
    background: url("/assets/course14/post-challenge.png") no-repeat 80% 50%;
    margin-top: 1px;
    margin-left: -20px;
}
.post .post-stats .icon-tags {
    display: inline-block;
    position: absolute;
    width: 15px;
    height: 15px;
    background: url("/assets/course14/post-challenge.png") no-repeat 0% 50%;
    margin-top: 1px;
    margin-left: -20px;
}
.post a {
    text-decoration: none;
    color: #2980b9;
}

Много замечаний по вашему коду.
Во-первых, отрицательные отступы. Это плохой прием.
Во-вторых, если вы задаете элементу абсолютное позиционирование, то целесообразнее использовать координаты top, left, чем внешние отступы.
Также обратите внимание, что если у элемента задано абсолютное позиционирование, то он ведет себя как блок, даже если задано другое (инлайн-блок, например).
Это правило здесь лишнее:
.post .end {
display: inline-block;
position: absolute;
margin-left: 247px;
}
Еще будет неплохо, если вы замените много раз повторяющуюся запись margin-left: 75px; на внутренний отступ такой же величины, заданный родителю .post.
Исправленный вариант кода хотелось бы увидеть в этой же теме.

Спасибо, выложу сюда, как переделаю.

1 лайк

Да, и в этом задании, как в прочем и в большинстве, если не во всех, есть подсказка, которую вы напрочь проигнорировали

Все размеры, отступы, координаты, размеры шрифтов (не заданные в body) кратны 5 или 10.

а у вас сплошняком идет 19, 24,46, 13 и т.п.

Игнорирую, потому что очень часто выходит так, что для 100% выполнения задания приходится делать так, если делаю по 5 и 10 то получается 95-98%

значит, допускаете ещё какие-то ошибки - всегда есть оптимальное решение и именно с такими, кратными 5, отступами
возьмите за правило, что если в задании указана кратность размеров, то нужно добиваться 100% результата с соблюдением этого условия

1 лайк

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

  1. Дата не выравнивается без использования другой кратности
  2. ссылки “интенсив,программа” не получается двигать отдельно от иконки. Они получаются на разных уровнях, с “5” и комментами такая же ситуация. Разжуйте, пожалуйста, что я делаю не так.
    html,
    body {
    margin: 0;
    padding: 0;
    }

body {
width: 280px;
min-height: 250px;
padding-top: 50px;
padding-left: 10px;
padding-right: 10px;
font-size: 12px;
font-family: “Arial”, sans-serif;
line-height: 1.2;
color: #7f8c8d;
background: #ecf0f1;
}

.post-stats .icon {
width: 15px;
height: 15px;
}
.post .post-stats {
display:inline-block;
position:absolute;
left: 85px;
top: 70px;
}

.post .post-text {
position: absolute;
width: 180px;
height: 95px;
top: 110px;
left: 85px;
background-color: #ffffff;
border-bottom: 5px solid #bdc3c7;
padding: 10px 0px 15px 15px;
}
.post .post-author {
position: absolute;
left: 85px;
top: 80px;
}
.post a {
text-decoration: none;
color: #2980b9;
}
.post .post-title {
font-size: 20px;
margin-left: 75px;
white-space: nowrap;
color: #2980b9;
}
.post .post-date {
position: absolute;
top: 50px;
width: 55px;
height: 35px;
background: #ffffff;
border-bottom: 5px solid #bdc3c7;
color: #7f8c8d;
font-size: 15px;
font-weight: bold;
text-align: center;
padding-top: 20px;
}
.post .post-type {
position: absolute;
top: 120px;
width: 55px;
height: 55px;
background: url("/assets/course14/quotes.png") no-repeat 50% #7f8c8d;
border-bottom: 5px solid #bdc3c7;
}
.post .post-stats .icon-tags {
display:inline-block;
background: url("/assets/course14/post-challenge.png") no-repeat 0 0;
margin-top: 25px;
}
.post .post-stats .icon-comments {
display: inline-block;
background: url("/assets/course14/post-challenge.png") no-repeat 80% 0;
margin-left: 150px;
margin-top: 25px;
}

У вас блок .post-title - единственный, где не использовано абсолютное позиционирование. Все остальные блоки вырваны из потока. Вчера не обратила внимания на этот факт. Абсолютное позиционирование в этом задании должно быть только для .post-date, .post-type и .icon.
Для выравнивания даты используйте line-height в пикселях.

Не хочу никуда подглядывать к другим, но и голову походу сломаю.
Если убираю абсолютное позиционирование у всего, что вы сказали, то сталкиваюсь с проблемой класса .post-stats
Если делаю ему блок или инлайн блок - то “5” оказывается строкой ниже, чем “интенсив, программа”, если задаю строчный тип, то они выстраиваются в одну строку, но паддинг и маргин влияют и на 1 блок и на 2ой, т.е. “5” постоянно удаляется.
Какую специфичность надо использовать, чтоб победить эту надпись? Они ведь одного класса.

А relative делали .post-stats?

Да, но в случае с относительным, помогут только отрицательные отступы, а по словам Ineska это плохой способ

А Вы задавали изначально .post padding-left? Тогда весь текст сместится влево, освободив место для кавычек и даты, и отрицательные отступы исчезнут.

Эмм, это еще зачем? Тогда смещается все содержимое, и задание не будет выполнено

Да. Оно сместится. Но! Ведь и в задании текст смещён по отношению к левой границе контейнера .post! Я, когда сложно совсем, добавляю (временно, само собой) рамки контейнерам, чтобы понимать, что и как соотносится ). Вы делаете padding-left контейнеру .post. В результате всё, что Вы видите изначально в задании, сместится вправо, а слева у Вас освободится поле. Не забудьте задать также .post position: relative; А далее контейнеру кавычек и дате Вы зададите position: absolute; Ведь абсолютно спозиционированные элементы относятся к БЛИЖАЙШЕМУ родителю с relative, коим в данном случае и будет .post. А далее, сделав, чтобы проявились кавычки и дата, зададите им left: 0;! В результате дата и кавычки не будут иметь НИКАКИХ отрицательных отступов, ведь системой отсчёта для них станет верхний левый угол .post!

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

Вот, посмотрите, как сделал я:
html,
body {
margin: 0;
padding: 0;
}

body {
width: 280px;
min-height: 250px;
padding-top: 50px;
padding-left: 10px;
padding-right: 10px;
font-size: 12px;
font-family: “Arial”, sans-serif;
line-height: 1.2;
color: #7f8c8d;
background: #ecf0f1;
}

.post-stats .icon {
width: 15px;
height: 15px;
}
.post {
position: relative;
padding-left: 75px;
}

.post-date {
position: absolute;
left: 0;
top: 0;
width: 55px;
height: 55px;
color: #7f8c8d;
font-size: 15px;
font-weight: bold;
text-align: center;
line-height: 55px;
vertical-align: middle;
background: #ffffff;
border-bottom: 5px solid #bdc3c7;
}

.post-type {
position: absolute;
left: 0;
top: 70px;
width: 55px;
height: 55px;
background: #7f8c8d url("/assets/course14/quotes.png") no-repeat 50% 50%;
border-bottom: 5px solid #bdc3c7;
}

.post-title {
font-size: 20px;
color: #2980b9;
margin-bottom: 5px;
}

a {
text-decoration: none;
color: #2980b9;
}

.post-stats {
position: relative;
display: inline-block;
padding-left: 20px;
margin-right: 10px;
}

.post-author {
margin-bottom: 5px;
}

.icon {
position: absolute;
left: 0;
}

.icon-tags {
background: url("/assets/course14/post-challenge.png") no-repeat;
}

.icon-comments {
background: url("/assets/course14/post-challenge.png") no-repeat -20px 0;
}

.post-text {
width: 165px;
background: #ffffff;
border-bottom: 5px solid #bdc3c7;
padding: 10px 15px;
}

Не стал смотреть весь ваш код дальше, когда меня осенило, увидев кое что)) Это свойство right! теперь вроде все получается)) Спасибо)

Я же говорю, если что-то стопорится, добавьте блокам border, чтобы Вы чётко увидели их границы, что как расположено друг относительно друга!! Вы же всегда можете их убрать!! Зато Вы увидите, как они взаимодействуют и придумаете, как их растолкать!! А код - он не прилизанный, жаль, что, когда я сделал его в прошлый раз, он не сохранился при повторном запуске задания (( Поэтому делал прямо сейчас, как только прочитал Ваш вопрос. Можно было бы кое-что сгруппировать, но главную свою задачу он выполнил - Вы поняли, где проблема. Поэтому и я говорил, что нужно задать relative post-stats - ведь это тот контейнер, который содержит и текст, и иконки. Точнее, этих контейнеров 2. А иконкам зададите absolute. В итоге текст Вы сместите padding-left, а в самом начале контейнера, задав иконкам absolute, Вы сможете двигать их отдельно от текста (и они привяжутся именно к post-stats, как ближайшему родителю с relative. У меня, кстати, долго был тот же вопрос, как двигать отдельно иконки и текст. А ещё совет: утро вечера мудреннее. Все мои трудности легче решались утром. )

1 лайк

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

))) Понимаю. Напишите, как закончите. )