У меня есть 3 гибких элемента (каждый элемент представляет собой div). Каждый гибкий элемент содержит изображение, 2 тега абзаца и div (для кнопки). Я пытаюсь горизонтально центрировать каждую кнопку в каждом гибком элементе.
Я попытался установить justify-content:center; во флекс-контейнере, но это не сработало. (Я не думаю, что это то, что я хочу в любом случае, потому что я хочу, чтобы div располагался только по центру по горизонтали) Я также попытался установить margin: 0 auto; на кнопку. Ни один из них, похоже, не работает. В настоящее время каждый гибкий элемент имеет ширину 33%, поэтому я установил внутренний div, чтобы он имел position: absolute; и left: 16.5%; (половина ширины контейнеров). Но это не выглядит правильно. Это самое близкое, что у меня есть. Любые идеи о том, как сделать это лучше?
HTML:
<section class = "overview-section">
<h2>Overview</h2>
<div class = "row">
<div class = "box">
<img src = "https://images.unsplash.com/photo-1550129460-d47c2040f9df?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=282&q=80">
<p class = "under-text">TITLE GOES HERE</p>
<p class = "txt">adsf adsf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf </p>
<div class = "btn">Learn more</div>
</div>
<div class = "box">
<img src = "https://images.unsplash.com/photo-1550129460-d47c2040f9df?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=282&q=80">
<p class = "under-text">TITLE GOES HERE</p>
<p class = "txt">adsf adsf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf
</p>
<div class = "btn">Learn More</div>
</div>
<div class = "box">
<img src = "https://images.unsplash.com/photo-1550129460-d47c2040f9df?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=282&q=80">
<p class = "under-text">TITLE GOES HERE</p>
<p class = "txt">adsf adsf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf
</p>
<div class = "btn">Learn more</div>
</div>
</div>
</section>
CSS:
@import url("https://fonts.googleapis.com/css?family=Oswald:300,400,500");
@import url("https://fonts.googleapis.com/css?family=Lato:400,700");
@import url("https://fonts.googleapis.com/css?family=Staatliches");
.row {
display: flex;
margin: 0 -50px;
}
.box {
position: relative; /* button will be positioned relative to this container */
border: 2px solid blue;
width: 33%;
height: 450px;
margin: 0 50px;
}
.box img {
width: 100%;
height: 250px;
}
.under-text {
font-family: "Staatliches", cursive;
color: red;
text-align: center;
}
.txt {
padding-left: 20px;
}
.btn {
position: absolute;
left: 16.5%;
bottom: 0;
background-color: #4caf50;
border: none;
color: black;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
background-color: white;
color: black;
border: 2px solid #4caf50;
}
Кодовое слово: https://codepen.io/anon/pen/rPqgVm
Ожидаемый результат: каждый элемент div во гибких элементах должен располагаться по центру по горизонтали.






Я полагаю, вы говорите о .btn правильно? Если это так, у вас есть два варианта.
Удалите абсолютную позицию и дайте ей автоматические поля. («авто» означает столько, сколько вы можете получить одинаково)
.btn {
// margin top & bottom - margin left& right
margin: 10px auto;
}
Или, если вы сохраняете абсолютную позицию, вам нужно установить левый угол на 50%, а затем потянуть левый угол div НАЗАД на 50% его ширины.
.btn {
position: absolute;
left: 50%;
transform: translatex(-50%);
}
Вы также можете обернуть btn div в другой div и добавить
display: flex;
justify-content: center;
и удалите абсолютный и левый из существующего блока btn.
модифицированный codePen: https://codepen.io/anon/pen/ErOYPw
Спасибо. Я сохранил position: absolute, чтобы можно было установить bottom: 0 и поместить кнопку на нижний край контейнера.
Я использую Grid, но, возможно, это предложение поможет. Поместите кнопку в собственный контейнер, а затем отцентрируйте ее в этом контейнере.
<div class = 'btncontainer'>
<div class = "btn">Learn more</div>
</div>
Удалить из
.btn {
position: absolute;
left: 16.5%;
bottom: 0;
}
И добавить в
.box {
display: flex;
flex-direction: column;
align-items: center;
}
Ваш
btnне является гибким элементом (гибким дочерним элементом), вашboxявляется таковым, поэтому, если вы сделаетеboxдисплей гибким, с колонкой направления гибкости, а затем установитеalign-items: center, они будут. И удалите абсолютную позицию наbtn. Обновленный код: codepen.io/anon/pen/QYJLKy?editors=1100