Горизонтальное центрирование div в гибком элементе

У меня есть 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 не является гибким элементом (гибким дочерним элементом), ваш box является таковым, поэтому, если вы сделаете box дисплей гибким, с колонкой направления гибкости, а затем установите align-items: center, они будут. И удалите абсолютную позицию на btn. Обновленный код: codepen.io/anon/pen/QYJLKy?editors=1100

Asons 15.02.2019 19:08
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
1
358
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я полагаю, вы говорите о .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 и поместить кнопку на нижний край контейнера.

Logan Phillips 15.02.2019 19:20

Я использую 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;
}

Другие вопросы по теме