#css #less
#css #Меньше
Вопрос:
У меня есть два раздела, которые расположены рядом, и мне нужно выровнять кнопки внизу по верхнему краю
<div class="outer">
<div class="container">
<div><span>Heading</span></div>
<div><button>Input</button><button>Input</button></div>
</div>
<div class="container">
<div><span>Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2</span></div>
<div><button>Input 2</button><button>Input 2</button><button>Input 2</button><button>Input 2</button><button>Input 2</button></div>
</div>
</div>
.outer {
display: flex;
}
.container {
width: 200px;
border: 1px solid red;
padding: 5px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.container div {
border: 1px solid;
}
button {
width: 80px;
}
Это структура html https://codepen.io/anon/pen/vPmeKd
Это выравнивание, которого я хочу достичь https://codepen.io/anon/pen/pYWKRZ
Я использовал заполнение снизу во втором code pen, но это нежизнеспособное решение, потому что количество строк для заголовка и кнопок может варьироваться, и мне пришлось бы использовать jquery.
Вопрос в том, могу ли я достичь этого только с помощью CSS. Изменение структуры HTML или использование jquery в данный момент было бы кошмаром, я хочу убедиться, что на данном этапе я не смогу достичь этого с помощью одного CSS.
Комментарии:
1.получить высоту другого раздела и установить ее как
var height = document.getElementById('seconddiv').clientHeight;
document.getElementById('firstdiv').setAttribute("style",height);
2. @Liviu Boboia на данный момент ваша стратегия верстки основана на flexbox. По сути, у вас есть два столбца (по одному для каждого div.контейнера), но проблема, которую вы хотите решить, подразумевает выравнивание элементов, которые находятся в разных столбцах. Вероятно, лучшим инструментом для достижения этой цели является использование макета сетки .
3. @Liviu Boboia flexblx лучше всего подходит для одномерных задач (таких как выравнивание и размещение элементов внутри одной строки или одного столбца). Если у вас возникла двумерная проблема (вы хотите выровнять элементы в разных столбцах или строках), то можно использовать макет сетки
Ответ №1:
Это возможное решение с использованием сетки:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Sample grid layout</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<div class="container">
<div><span>Heading</span></div>
<div><span>Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2</span></div>
<div><button>Input</button><button>Input</button></div>
<div><button>Input 2</button><button>Input 2</button><button>Input 2</button><button>Input 2</button><button>Input 2</button></div></div>
</div>
</body>
</html>
вот CSS:
.container {
display: grid;
grid-template-columns: repeat(2, minmax(200px, 200px));
grid-template-rows: repeat(2, auto);
grid-gap: 0.5em;
}
Обратите внимание, что здесь структура HTML была сглажена: вам просто нужен внешний контейнер grid, а затем вы помещаете в него элементы flatten grid
Ответ №2:
Я совершенно не уверен в том, о чем вы на самом деле просите, но, исходя из моей интерпретации приведенного выше вопроса, я думаю, что было бы безопасно добавить min-height
в ваш div вместо padding-bottom
. Таким образом, вы можете продолжать добавлять кнопки в div.
Хотя для достижения адаптивной структуры я бы посоветовал вам прочитать о сеточной системе CSS. Больше можно найти здесь.
Комментарии:
1. Я не могу использовать min-height, потому что высота контейнера кнопок будет больше, чем необходимо, если в обоих контейнерах будет только один ряд кнопок
Ответ №3:
<div class="outer">
<div class="container">
<div><span>Heading</span></div>
<div><button>Input</button><button>Input</button></div>
</div>
<div class="container">
<div><span>Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2 ff s sfsd fsd</span></div>
<div><button>Input 2</button><button>Input 2</button><button>Input 2</button><button>Input 2</button><button>Input 2</button></div>
</div>
</div>
Возможно, это могло бы помочь вам:
.outer {
display: flex;
max-width: 400px;
}
.container {
flex: 1;
display: flex;
flex-direction: column;
border: 1px solid red;
}
.container > div:nth-of-type(1) {
margin-bottom: auto;
}
.container > div:nth-of-type(2) {
border: 1px solid green;
min-height: 100px;
}
ссылка на codepen.
Ответ №4:
используйте этот скрипт
<div class="outer">
<div class="container">
<div><span>Heading</span></div>
// add id leftside
<div id="leftside"><button>Input</button><button>Input</button></div>
</div>
<div class="container">
<div><span>Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2Heading 2</span></div>
// add id rightside
<div id="rightside"><button>Input 2</button><button>Input 2</button><button>Input 2</button><button>Input 2</button><button>Input 2</button></div>
</div>
</div>
.outer {
display: flex;
}
.container {
width: 200px;
border: 1px solid red;
padding: 5px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.container div {
border: 1px solid;
}
button {
width: 80px;
}
var height = document.getElementById('rightside').clientHeight;
document.getElementById('leftside').setAttribute("style","height:" height "px");
это только для того сценария, который вы публикуете в code pen