2016-11-04 1 views
0

У меня есть список продуктов, которые имеют следующий HTML структуру:Совместите некоторые HTML-элементы в нижней части своего родителя

<div class="parent"> 
    <img src="myimg.jpg" /> 
    <div class="title">My Title</div> 
    <div class="buttons"></div> 
</div> 

Есть многие из этих родителей рядом друг с другом. Сначала у меня был вопрос, что они часто бывают разной высоты (из-за разницы в длинах названий). Я исправил это с помощью display: flex;, так что теперь они имеют одинаковые высоты. Однако мне нужно, чтобы div buttons придерживался нижней части parent, в то время как заголовок и изображение должны оставаться там, где они есть. Поэтому я предпочел бы иметь пустое пространство между кнопками и предыдущими дочерними элементами parent, а не иметь свободное пространство внизу, под кнопками.

Я пытался найти решение для этого, но все результаты приводят к этому CSS:

.parent { position: relative; } 
.buttons { position: absolute; bottom: 0; } 

Это решение не работает для меня, потому что тогда кнопки может перекрывать название. Так что лучшее решение, которое я мог думать так далеко, чтобы использовать нижние отступы, равные кнопки Высоты:

.parent { display: flex; position: relative; padding-bottom: 100px; } 
.buttons { position: absolute; bottom: 0; height: 100px; } 

Но я не уверен, что это лучшее решение, потому что кнопки высота может изменить или даже быть динамичным. Есть ли лучшее решение?

EDIT:

Вот отрывок, чтобы продемонстрировать эту проблему. Первый родитель имеет 2 кнопки, а второй - только один, это предназначено - некоторые продукты могут иметь разное количество кнопок, что является одной из причин, по которым я не могу использовать решение с padding-bottom.

#wrap { display: flex; } 
 
.parent { display: inline-block; position: relative; padding-bottom: 100px; width: 100px; border: 1px solid black; padding: 10px 20px 20px; margin: 0 5px 10px; } 
 
.buttons { position: absolute; bottom: 0; height: 100px; } 
 
.button-one { background: green; } 
 
.button-two { background: red; } 
 
.button-one, .button-two { margin: 15px 0 0; }
<div id="wrap"> 
 
    <div class="parent"> 
 
    <img src="myimg.jpg" /> 
 
    <div class="title">My Title</div> 
 
    <div class="buttons"> 
 
     <div class="button-one">Button one</div> 
 
     <div class="button-two">Button two</div> 
 
    </div> 
 
    </div> 
 
    <div class="parent"> 
 
    <img src="myimg.jpg" /> 
 
    <div class="title">My TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy TitleMy Title</div> 
 
    <div class="buttons"> 
 
     <div class="button-one">Button one</div> 
 
    </div> 
 
    </div> 
 
</div>

+0

Это farily хорошо решение - это не то, что трудно изменить два значения. Тем не менее, вы не должны использовать 'px' как единицу, почти что угодно на веб-странице. Есть несколько исключений, но кнопки не являются одним из них. Используйте 'em'or'% '. – junkfoodjunkie

+0

Укажите рабочий пример (jsfiddle/codepen/snippet) с тем, что у вас есть – Dekel

+0

вы можете сделать скрипку? –

ответ

1

Самый простой способ сделать это добавить отступ-дно в свой "титул". Или, если вы можете изменить структуру HTML, которая является лучшим вариантом.

Попробуйте этот макет в HTML. enter image description here

+0

Пожалуйста, проверьте фрагмент, который я добавил. Добавление дополнения к заголовку равно добавлению его к '.parent', который я уже упоминал как возможное, но, вероятно, не идеальное решение. Как бы вы предложили изменить HTML? Здесь я вижу только проблему с CSS, но не стесняюсь доказать, что я ошибаюсь. –

+0

Пожалуйста, посмотрите на макет, который я только что добавил. – NPN

+0

Я понял, что вы имеете в виду, но я боюсь, что это может вызвать больше проблем, которые он решит. Кнопки должны находиться в одном и том же родителе, потому что у родителя есть видимая граница, если я разделяю кнопки и остальную часть содержимого на отдельные строки, тогда мне нужно будет выровнять их по горизонтали, и это, вероятно, будет более грязным, чем фиксированное 'набивка-bottom'. Спасибо за идею, хотя! –

0

Попробуйте добавить clear: both; и float: left;, чтобы отправить его в самое нижнее положение его родителя.

Как это:

.buttons { position: absolute; bottom: 0; height: 100px; clear: both; float: left; width: 100px; } 
+0

Но эти элементы не плавают ... На каком элементе я должен применять 'clear: both;'? –

+0

Для чего вы хотите перейти к нижней части родительского элемента. –

+0

Но это не работает, во-первых, потому что 'clear' [работает только с плавающим] (http://www.w3schools.com/csSref/pr_class_clear.asp), во-вторых, даже если я создаю элементы float, я не могу сделать они придерживаются нижней части родителя с 'clear'. Проверьте этот фрагмент, чтобы увидеть проблему. Возможно, я ошибался, если да, пожалуйста, предоставьте фрагмент того, что вы имеете в виду. –

1

Я не уверен, если это проблема, но я думаю, что вам нужно добавить высоту и ширину

+0

Высота динамична и зависит от содержимого, но вы правы относительно ширины. Я попытался упомянуть только о соответствующем коде, но, надеюсь, теперь более ясно, что фрагмент, который я добавил к вопросу. –

 Смежные вопросы

  • Нет связанных вопросов^_^