Финальное испытание [18\18] Хочется критики в плане улучшения кода

Всем привет. Я пролистал немного эту ветку форума и решил, что можно поделится и своим решение данной задачи. Очень хотелось бы услышать мнение знатоков и моем решении, так как не ясно какой из способов решения является более здравым (критерий количества строк)

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;
background: red;
}
.post {
position: relative;
padding: 0;
margin: 0;
}
.post .post-title {
float: right;
padding: 0 4px 10px 20px;
font-size: 20px;
color: #2980b9;
}
.post .post-date {
width: 45px;
padding: 0 5px;
margin: 0;
line-height: 55px;
text-align: center;
font-size: 15px;
font-weight: bold;
border-bottom: 5px solid #bdc3c7;
background-color: #ffffff;
}
.post .post-type {
width: 55px;
height: 55px;
margin-top: 10px;
border-bottom: 5px solid #bdc3c7;
background:url(/assets/course14/quotes.png) #7f8c8d no-repeat 50% 50%;
}
.post .post-author {
position: absolute;
top: 29px;
left: 75px;
}
.post .post-author a,
.post .post-stats a{
text-decoration: none;
color: #2980b9;
}
.post .post-stats {
left: 95px;
top: -82px;
display: inline-block;
position: relative;
margin-right: 30px;
}

.post .post-stats .icon-tags {
position: absolute;
top: 0px;
left: -20px;
background: url(/assets/course14/post-challenge.png) no-repeat 0 0;
}

.post .post-stats .icon-comments {
position: absolute;
top: 0px;
left: -20px;
background: url(/assets/course14/post-challenge.png) no-repeat -20px 0;
}
.post .post-text {
position: absolute;
top: 62px;
left: 75px;
width: 165px;
padding: 10px 15px 10px 15px;
font-size: 12px;
border-bottom: 5px solid #bdc3c7;
background-color: #ffffff;
}

вы не соблюли кратность 5

Я не смог найти откуда 2px вниз и один влево разбежка ползет.

из вашего хитровывернутого решения она ползет ))
смотрите, здесь все задние делается по тому же принципу, как строился раздел контакты в 10-12 уроках.
Т.е. есть блок-обертка с relative и с широким внутренним отступом, _который создает пустое поле и отодвигает содержимое._Есть иконка, которая с помощью position:absolute на этом самом пустом поле располагается. И есть содержимое со всякой информацией.
Давайте смотреть, что у вас: есть блок-обертка .post-stats с relative (правда с внешним отступом, ну да ладно), есть иконки, сдвинутые с помощью absolute и есть основное содержимое(ссылки). В общем, будем считать, что нормально.

Смотрим дальше. Есть блок-обертка .post с relative… а дальше: есть картинки-иконки .post-date и .post-type, но без позиционирования, и есть основное содержимое (весь остальной текст) - кто-то с позиционированием, кто-то вообще с флоатом…
Думаю, понятно, в каком направлении править?

1 лайк

Да, спасибо за пинок в правильную сторону.
В целом подобного рода информации часто не хватает в курсах - нас учат держать мастерок и кирпич, но не говорят как правильно сложить стену)

Да не за что :slight_smile:
только откройте тогда ещё тайну, зачем вам здесь красный цвет:

2 лайка

Хех)
Когда блоки позиционировал красил их что бы лучше видно было) Забыл убрать.

Переделал код, теперь все с позиционированием, но тем не менее разбежка в пару пикселей осталась.

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 {
position: absolute;
width: 15px;
height: 15px;
}

.post {
padding: 0;
margin: 0;
position: relative;
}

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

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

.post .post-type {
height: 55px;
top: 70px;
background: url(/assets/course14/quotes.png) #7f8c8d no-repeat 50% 50%;
}

.post .post-author {
position: absolute;
top: 30px;
left: 75px;
}

.post .post-author a,
.post .post-stats a {
text-decoration: none;
color: #2980b9;
}

.post .post-stats {
display: inline-block;
position: relative;
padding-left: 30px;
top: 50px;
left: 65px;
}

.post .post-stats .icon-tags {
left: 10px;
background: url(/assets/course14/post-challenge.png) no-repeat 0 0;
}

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

.post .post-text {
padding: 10px 15px 10px 15px;
margin-right: 10px;
position: absolute;
top: 65px;
left: 75px;
border-bottom: 5px solid #bdc3c7;
background: #ffffff;
}

Не в сторону вы пошли…
Абсолютное позиционирование в этом задании только у .post-date, .post-type и .icon.

переделал вот так. Все стало кратным, но я что-то совсем запутался с этим позиционированием…

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 {
position: absolute;
left:0;
width: 15px;
height: 15px;
}

.post {
position: relative;
}

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

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

.post .post-type {
height: 55px;
top: 70px;
background: url(/assets/course14/quotes.png) #7f8c8d no-repeat 50% 50%;
}

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

.post .post-author a,
.post .post-stats a {
text-decoration: none;
color: #2980b9;
}

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

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

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

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

Дважды абсолютное позиционирование пишете для большей убедительности?)
Теперь гораздо лучше. Есть конечно недочёт виде повторяющегося отступа 75px, но в общем и целом всё правильно.
Почитайте темы по этому заданию, есть замечательное объяснение по поводу позиционирования от пользователя @Tala.

1 лайк

Спасибо за помощь. Почитаю обязательно.

Подскажите пожалуйста зачем здесь относительное позиционирование?
.post {
position: relative;
padding: 0;
margin: 0;
}

Чтобы блоки .post-date и .post-type были привязаны непосредственно к родителю .post.

Тоесть у post-date и post-type абсолютное позиционирование и они будут выпадать из потока если не привязать их к родителю post таким образом. Я правильно понял?

Не совсем. Точкой отсчета координат будет уже не body, а .post.

Большое Вам спасибо.