Испытание: анонс поста (Мастерская: декоративные элементы)

В комментах к заданию выложили код с решением(100%) и там есть этот кусок:

.post-stats {
    position: relative;
    display: inline-block;
    margin-bottom: 20px;
    
    margin-right: 10px;
}
.post div.post-stats:nth-child(5) { 
    margin-left: 75px;
}

объясните пожалуйста момент с nth-child. что он выбирает?
хтмл код:

<body>
        <div class="post">
            <div class="post-title">Интенсив: программа</div>
            <div class="post-date">13.09</div>
            <div class="post-type"></div>
            <div class="post-author">
                Автор: <a href="#">HTML Academy</a>
            </div>
            <div class="post-stats">
                <div class="icon icon-tags"></div>
                <a href="#">интенсив</a>,
                <a href="#">программа</a>
            </div>
            <div class="post-stats">
                <div class="icon icon-comments"></div>
                <a href="#">5</a>
            </div>
            <div class="post-text">Работа над интенсивом идёт полным ходом. Мы нашли крутых людей в команду и решили еще кучу задач. Но сегодня я подробнее расскажу о работе над программой интенсива.</div>
        </div>
    </body>

Выбирает див внутри .post с классом .post-stats, идущий пятым тегом по счёту в .post.

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

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

а почему результат будет один, если там именно 5й див именно с этим классом должен выбираться, оно же так работает? а если прописать вместо nth-child last-child не работает. Подзапутался что-то

А последний div имеет класс post-text - поэтому не работает. Иногда получается, что класс - ненужное дополнение.

добрый день. тема старая, но надеюсь увидеть ответ.
Почему-то набрал только 96%. Второй час ковыряю - и не могу понять что не так…
Прошу помощи профи

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 {
position: relative;
}

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

.post-title {
display: block;
font-size: 20px;
color: #2980b9;
margin-left: 75px;
}

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

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

.post-author {
display: block;
margin-left: 75px;
padding: 5px 0;
}

.post-stats {
display: inline-block;
position: relative;
left: 75px;
margin: -10px 5px 0 20px;

}

.post-stats .icon {
width: 15px;
height: 15px;
background: url("/assets/course14/post-challenge.png") no-repeat;
}

.post-stats .icon-tags {
position: absolute;
background-position: 0 0;
left: -20px;
}

.post-stats .icon-comments {
background-position: -20px 0;
position: absolute;
left: -20px;
}

.post-text {
display: block;
margin-left: 75px;
width: 170px;
background-color: #ffffff;
border-bottom: 5px solid #bdc3c7;
padding: 10px;
}

Вкладка “Различия” очень помогла бы вам. Не забывайте о ней.
Например, там очень хорошо видно, что размер шрифта для .post-date нужно сделать больше, а ширину для .post-text - наоборот меньше, отступ слева у текста должен быть 15px и т. д.
Также помните о том, что div является блочным элементом по умолчанию, а значит не нужно каждый раз дополнительно писать display: block;

спасибо огромное. сейчас исправлю

Код 100%, не претендует на абсолютную истину, но возможно кому-то пригодится )
Прошу заметить что ссылки в классе .post-stats обёрнуты классом ps1 и ps2 следующим образом:

<div class="post-stats">
   <div class="ps1">
      <a href="#">интенсив</a>,
      <a href="#">программа</a>
   </div>
   <div class="ps2">
      <a href="#">5</a>
   </div>
</div>

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-title {
color: #2980b9;
font-size: 20px;
margin-left: 75px;
}

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

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

.post-author {
margin-top: 5px;
margin-left: 75px;
}

.post-author a {
color: #2980b9;
}

.post-stats {
display: inline-block;
margin-top: 5px;
}

.ps1 {
margin-left: 95px;
}

.ps2 {
margin-left: 30px;
}

.post-stats a {
color: #2980b9;
}

.post-stats .icon-tags {
position: absolute;
top: 48px;
left: 75px;
width: 15px;
height: 15px;
background-image: url(/assets/course14/post-challenge.png);
background-repeat: no-repeat;
}

.post-stats .icon-comments {
position: absolute;
top: 48px;
right: 38px;
width: 15px;
height: 15px;
background-image: url(/assets/course14/post-challenge.png);
background-repeat: no-repeat;
background-position: -20px 0px;
}

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

a {
text-decoration: none;
}

.post {
position: relative;
}

Код на 100%

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 {
    min-height: 240px;
    margin: 0;
    padding: 0;
    position: relative;
    top: 0;
    left: 0;
}

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

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

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

.post .post-author {
    margin: 5px;
    margin-left: 75px;
}

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

.post .post-stats {
    display: inline-block;
    margin: 0;
    margin-left: 95px;
    margin-right: -65px;
    position: relative;
    top: 0;
    left: 0;
}

.post-stats .icon {
    width: 15px;
    height: 15px;
    background-image: url("/assets/course14/post-challenge.png");
    position: absolute;
    top: 0;
    left: -20px;
}

.post-stats .icon-tags {
    background-position: 0 0;
}

.post-stats .icon-comments {
    background-position: 20px 0;
}

.post .post-text {
    display: inline-block;
    width: 165px;
    min-height: 90px;
    background-color: #ffffff;
    border-bottom: 5px solid #bdc3c7;
    margin-left: 75px;
    padding: 10px 15px;
}

Объясните почему 99%, где ошибка?

html
<!DOCTYPE html>
<html lang="ru">
  <head>
    <meta charset="utf-8">
    <title>Испытание: анонс поста</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <div class="post">
      <div class="post-title">Интенсив: программа</div>
      <div class="post-date">13.09</div>
      <div class="post-type"></div>
      <div class="post-author">
        Автор: <a href="#">HTML Academy</a>
      </div>
      <div class="post-stats">
        <div class="icon icon-tags"></div>
        <a href="#">интенсив</a>,
        <a href="#">программа</a>
      </div>
      <div class="post-stats">
        <div class="icon icon-comments"></div>
        <a href="#">5</a>
      </div>
      <div class="post-text">Работа над интенсивом идёт полным ходом. Мы нашли крутых людей в команду и решили ещё кучу задач. Но сегодня я подробнее расскажу о работе над программой интенсива.</div>
    </div>
  </body>
</html>
css
html,
body {
  margin: 0;
  padding: 0;
}

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

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

.post {
 padding-left: 75px;
 position: relative;
}

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

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

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

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

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

.post .post-stats .icon {
  width: 15px;
  height: 15px;
  background-image: url("post-challenge.png");
}

.post .post-stats .icon-tags {
 position: absolute;
 left: 5px; 
 background-position: 0 0;
}

.post .post-stats .icon-comments {
 position: absolute;
 left: 5px; 
 background-position: 20px 0px;
}

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

/*
Все размеры, отступы, координаты, размеры шрифтов (не заданные в body) кратны 5 или 10.
Адреса картинок:
quotes.png
post-challenge.png
Картинка «кавычки» выровнена по центру
*/

Я понимаю, но где ошибка?

Ошибки как таковой нет, смещение меньше 1px. Скорее всего оно появилось из-за padding-left в 75px у .post. Попробуйте убрать и переопределить все отступы в соответствии с этим. Можно ориентироваться на код выше, он верный.

Не связано, но обратила внимание, что вы свойства у .icon-comments и .icon-tags прописываете дважды:
position: absolute;
left: 5px;
Их можно задать один раз для общего класса .icon.

Тоже хочу поделиться своим вариантом решения.

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

body {
width: 280px;
min-height: 250px;
padding-top: 50px;
padding-right: 10px;
padding-left: 10px;

font-size: 12px;
line-height: 1.2;
font-family: “Arial”, sans-serif;
color: #7f8c8d;

background-color: #ecf0f1;
}

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

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

.post-type {
position: absolute;
background: #7f8c8d url(“quotes.png”) center no-repeat;
top: 120px;
border-bottom: 5px solid #bdc3c7;
width: 55px;
height: 55px;
}

.post-author {
margin-left: 75px;
margin-top: 5px;
}

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

.post-stats {
display: inline-block;
margin-top: 5px;
margin-left: 75px;
margin-right: -65px;
}

.post-stats .icon {
width: 15px;
height: 15px;
position: absolute;
}

.post-stats a:first-of-type {
margin-left: 20px;
}

.icon {
display: inline-block;
position: absolute;
background: url(“post-challenge.png”) no-repeat;
}

.icon-tags {
background-position: 0 0;
display: inline-block;
}

.icon-comments {
background-position: -20px 0;
display: inline-block;
}

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

Я для упрощения запихнул все дивы в таблицу, а в некоторых ячейках по мере надобности подключил флексы. Остальное подгонял вручную. С точки зрения элегантности - далеко от совершенства, зато 100% рабочий код:

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

body {
width: 280px;
min-height: 250px;
padding-top: 50px;
padding-right: 10px;
padding-left: 10px;

font-size: 12px;
line-height: 1.2;
font-family: “Arial”, sans-serif;
color: #7f8c8d;

background-color: #ecf0f1;
}
table{
width:100%;
border-collapse:collapse
}
td{

}
.icon {
width: 15px;
height: 15px;
}
.icon-tags{
background: url(‘post-challenge.png’) no-repeat 0 0;
margin-right:5px
}
.icon-comments{
background: url(‘post-challenge.png’) no-repeat -20px 0;
margin-right:5px
}
.post-stats{
display:flex;
flex-direction:row;
margin-bottom:-20px;
margin-left:2px;

}
.post-date{
display: flex;
margin-top:-1px;
margin-left:-1px;
width:55px;
height:55px;
font-size:15px;
font-weight:bold;
align-items: center;
justify-content: center;
background-color: white;
border-bottom: 5px solid #bdc3c7;
color: #7f8c8d
}
.post-quotes{
display: flex;
margin-top:-1px;
margin-left:-1px;
width:55px;
height:55px;
font-size:15px;
font-weight:bold;
align-items: center;
justify-content: center;
background: #7f8c8d url(‘quotes.png’) no-repeat 50% 50%;
border-bottom: 5px solid #bdc3c7;
color: #bdc3c7
}
.post-title{
margin-top:-18px;
margin-left:-1.3px;
font-size: 20px;
color: #2980b9;
text-align:center;
}
a{
text-decoration:none;
color:#2980b9;
cursor:default;
}
.post-text{

width:82.5%;
margin-left:2px;
padding:10px 10px 10px 15px;
align-items: center;
justify-content: center;
background-color: white;
border-bottom: 5px solid #bdc3c7;
color: #7f8c8d
}
.post-author{
margin-top:5px;
margin-bottom:5px;
margin-left:2px;

}

Сделал код на 100%. Но, я уверен что можно было бы сделать проще, но как получилось. За критику и правки от профессионалов буду благодарен. В HTML коде я трогал только дату, а именно обернул ее в тег p. Вот код css:

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

body {
width: 280px;
min-height: 250px;
padding-top: 50px;
padding-right: 10px;
padding-left: 10px;

font-size: 12px;
line-height: 1.2;
font-family: “Arial”, sans-serif;
color: #7f8c8d;

background-color: #ecf0f1;
}

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

}

.font-color {
color:#2980b9;
}

.post-stats .icon {
width: 15px;
height: 15px;
}

.post {
width:290px;
margin-left:75px;

}

.post-title {
font-size:20px;

}

.post-date{
position:absolute;
left:10px;
top:50px;
width:55px;
height:55px;
font-size:15px;
font-weight:700;
color:#7f8c8d;
background-color:white;
box-shadow:0 5px 0 0 #bdc3c7;
box-sizing: border-box;
}

.post-date p {
margin-top:19px;
text-align:center;

}

.post-type{
position:absolute;
left:10px;
top:120px;
width:55px;
height:55px;
font-size:15px;
font-weight:700;
padding:19px 0 0 9px;
color:#7f8c8d;
background: url(“quotes.png”) 50% 50% no-repeat;
background-color:#7f8c8d;
box-shadow:0 5px 0 0 #bdc3c7;
box-sizing: border-box;

}

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

.post-text {
width:195px;
height: 118px;
padding: 10px 0 0 15px;
background-color:#ffffff;
box-sizing: border-box;
box-shadow:0 5px 0 0 #bdc3c7;
}

.post-stats {
display:inline-block;
}

.post-stats a:not(:last-child) {
margin-left:20px;
}

.icon-comments+a{
margin-left:30px;
}

.icon {
background:url(“post-challenge.png”);

}
.icon-tags {
position:absolute;

}
.icon-comments {
position:absolute;
background-position: 20px 0;
margin-left:10px;

}

Сначала добавлял внешние отступы слева каждому div-у, но когда дошел до
“интенсив, программа 5”, то никак не мог справиться с лишним переносом цифры 5 на следующую строку, из-за того, что к 5-ке тоже добавляется огромный отступ. Думал уже использовать псевдоклассы, но это выглядело слишком колхозно. После небольшого перерыва осознал, что ведь можно просто диву с классом post задать внутренний левый отступ :sweat_smile:

По итогу, вот мой 100% код, html-код не менял:

html,
body {
  margin: 0;
  padding: 0;
}
body {
  width: 280px;
  min-height: 250px;
  padding-top: 50px;
  padding-right: 10px;
  padding-left: 10px;
  font-size: 12px;
  line-height: 1.2;
  font-family: "Arial", sans-serif;
  color: #7f8c8d;
  background-color: #ecf0f1;
}
.post-stats .icon {
  width: 15px;
  height: 15px;
}
.post-title {
  font-size: 20px;
  color: #2980b9;
}
.post {
  position: relative;
  padding-left: 75px;
}
.post-date {
  display: inline-block;
  position: absolute;
  background-color: #ffffff;
  width: 55px;
  height: 55px;
  font-weight: bold;
  font-size: 15px;
  text-align: center;
  line-height: 55px;
  vertical-align: middle;
  top: 0;
  left: 0;
  border-bottom: 5px solid #bdc3c7;
}
.post-author {
  margin-top: 5px;
}
a {
  text-decoration: none;
  color: #2980b9;
}
.post-type {
  position: absolute;
  width: 55px;
  height: 55px;
  background: #7f8c8d url("quotes.png") no-repeat 50% 50%;
  top: 70px;
  left: 0;
  border-bottom: 5px solid #bdc3c7;
}
.post-stats {
  display: inline-block;
  position: relative;
  margin-top: 5px;
  margin-left: 20px;
  margin-right: 10px;
}
.icon {
  position: absolute;
  background: url("post-challenge.png") no-repeat;
  height: 10px;
  width: 10px;
  top: 0;
  left: -20px;
}
.icon-tags {
  background-position: 0 0;
}
.icon-comments {
  background-position: -20px 0;
}
.post-text {
  background-color: #ffffff;
  padding: 10px 10px 10px 15px;
  width: 170px;
  border-bottom: 5px solid #bdc3c7;
}

P.S. В тренажере, чтобы выровнять текст по центру, мы использовали line-height + vertical-align, но я заметил, что используя только line-height и так все замечательно выравнивается. Для чего указывать vertical-align? Как я понимаю, vertical-align: middle - это значение по умолчанию, а мы просто указываем явно, чтобы все точно работало как надо?

1 лайк