Испытание: котогалерея на inline-block [32/32]. Мое решение на 100% и подробная инструкция.

Сейчас я расскажу и покажу как решить эту задачу за 8 шагов. Задание не сложное, я попытался решить его поигравшись марджинами, но потом почти истратив все попытки проверок, я психанул и просто обнулил шрифт :grinning:
Итак начнем.
Шаг 1: поскольку котогалерея нам нужна на inline-block, мы зададим режим отображения элементов галереи.

.gallery .item {
width: 125px;
margin: 0 10px;
margin-bottom: 10px;
display: inline-block; - шаг 1.
font-size: 12px; - шаг 8 (пояснение в конце)

Шаг 2: выровняем все элементы по центру.

.gallery {
padding-top: 10px;
text-align: center; - шаг 2
font-size: 0; - шаг 7 (пояснение в конце)
}

Шаг 3: Выровняем описание элементов по левому краю

.gallery .title {
margin-bottom: 5px;
line-height: 14px;
text-align: left;
}

Шаг 4: Расширим нашу рамку сверху и добавим обводку границ.

.gallery .frame {
background: #ecf0f1;
padding-top: 10px;
border: 1px solid black;
}

Шаг 5: Добавим обводку границ сверху и снизу нашим изображениям внутри рамки.

.gallery .image {
height: 70px;
background-position: 50% 50%;
background-repeat: no-repeat;
border-top: 1px solid black;
border-bottom: 1px solid black;
}

Шаг 6: Добавим внутренние отступы со всех сторон и выравнивание по левому краю для даты.

.gallery .date {
font-style: italic;
font-size: 11px;
color: #666666;
padding: 5px;
text-align: left;
}

Шаг 7 и 8 Теперь чтобы правильно разместить “Кота, который мурлыкал”, что вечно сдвигается не хочет стоять там где ему нужно, мы обнулим шрифт у контейнера с классом gallery, что служит родителем для инлайн-блоков задав ему свойство font-size: 0; а самим инлайн-блокам зададим исходный размер шрифта font-size: 12px; как сказано в уроке 31 курса «Сетки».

:checkered_flag: Готово! Задание выполнено на 100%. Как всегда рад буду услышать различные мнения и способы улучшить, упростить код. Спасибо за внимание.

13 лайков

Не помню, были ли прописаны отступы в коде изначально.

Да, были, только что сбросил код и проверил)

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

Я думаю это с связано с тем, что инлайн-блоки имеют свойства как блочных так и строчных элементов. Задав режим отображения как инлайн-блок, мы тем самым дали возможность инлайн-блокам реагировать на свойства строчных элементов, в нашем случае на text-align. А прописывать свойство родителю нужно, по той же причине, если бы в контейнер div мы поместили несколько абзацев текста, а потом текст выровняли бы по центру с помощью text-align. Плюс ко всему в уроке 28 сказано, что "реагируют на горизонтальное выравнивание, text-align, заданное у родителя. "

1 лайк

А всё-таки, почему родителю прописывается text-align? Например, vertical-align задается самому блочно-строчному элементу.

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

Факт наследования свойства говорит о том, что его можно прописать родительскому элементу, чтобы не копировать для каждого вложенного.
http://cssfollow.ru/inherited-by-default/
А вопрос состоит в том, почему text-align не будет работать, если прописать его непосредственно блочно-строчному элементу, тогда как vertical-align работает.
Подсказка: подумайте, что конкретно выравнивает text-align, а что vertical-align.

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

Ширина здесь ни при чем. Мы с вами рассматриваем только блочно-строчные элементы.
Ответ можно найти в описании свойств. Что конкретно выравнивает text-align по своей сути?

Выравнивает текст.

Перефразирую ваш ответ. Выравнивает “содержимое” (не обязательно текст).

Если это содержимое строчное или блочно-строчное. А как бы вы объяснили такое поведение инлайн-блоков? А то я уже сам запутался)

Я думала, что вы дальше сами дойдете…)
Блочно-строчный элемент выступает в качестве содержимого по отношению к своему родителю. Text-align выравнивает содержимое элемента. Поэтому, чтобы повлиять на положение блочно-строчного, нужно написать text-align его родителю.
Задавая text-align самому блочно-строчному элементу, вы лишь можете рассчитывать на выравнивание его содержимого, того, что находится внутри него.

5 лайков

Спасибо) это похоже на то, когда я пытался объяснить как выровнять текст абзацев помещенных в контейнер. Получается абзацы были бы содержимым контейнера и чтобы выровнять их нужно было бы применить Text-align контейнеру внутри которого они лежат)

2 лайка

обожаю читать ваши решения задач! очень интересно :star_struck:

2 лайка

Спасибо, приятно слышать :slight_smile:

Можно задать text-align: left; только для .gallery .item и тогда не надо будет прописывать его 2 раза.

1 лайк

Спасибо! Одного не понял. Почему текст внутри дива data выравнивается вертикально по середине только внутренними отступами, а свойство vertical-align:middle не срабатывает?