Flexbox: как центрировать по вертикали

Я использую flexbox, и мне уже удалось сделать его центрированным по горизонтали, как вы можете видеть, запустив приведенный ниже фрагмент кода, но он не центрирован по вертикали, и я не понимаю, почему

Вот JSFiddle, если хотите.

.main {
  display: flex;
  align-items: center;
  justify-content: center;
}


.loader {
  border: 16px solid #f3f3f3;
  border-radius: 50%;
  border-top: 16px solid #3498db;
  width: 120px;
  height: 120px;
  -webkit-animation: spin 2s linear infinite; /* Safari */
  animation: spin 2s linear infinite;

  max-width: 50%;
}

/* Safari */
@-webkit-keyframes spin {
  0% { -webkit-transform: rotate(0deg); }
  100% { -webkit-transform: rotate(360deg); }
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
<div class = "main">
    <div class = "loader"></div>
</div>

Он центрирован по вертикали, но .main div нуждается в высоте, чтобы стать больше, чем его содержимое.

Olafant 04.02.2019 16:24

Пожалуйста, понизить версию немного сложно, он уже помечен как дубликат. Я думаю, этого достаточно, ваша реакция недружелюбна по отношению к другим пользователям.

Ced 04.02.2019 16:28

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

Olafant 04.02.2019 16:37

На самом деле я думаю, что пометка этого вопроса как дубликата неверна. Вторая ссылка даже не решает проблему. Вопрос ОП касается неожиданного результата его правильного использования элементов выравнивания в гибкой компоновке, а не того, как установить высоту div.

Olafant 04.02.2019 16:55

Полностью с вами согласен, спасибо за комментарии.

Ced 04.02.2019 17:17

Пожалуйста, обратитесь к этому сайту the-echoplex.net/flexyboxes, если вы застрянете с flexbox в будущем. Это помогает вам визуализировать вывод и генерирует основной код. Я не буду просто копировать и вставлять вывод, так как он довольно подробный. Но попробуйте, это действительно полезно.

henk.io 04.02.2019 18:48

@Olafant прочитайте ответ ниже и принятые, и вы заметите, что проблема заключается в том, чтобы установить для элемента высоту экрана, таким образом, первый дубликат, который отвечает на это более чем идеально. Второй дубликат касается центрирования, что является целью его кода, и в этом дубликате вы найдете полный способ центрирования, учитывающий проблему высоты. Таким образом, первый дубликат показывает ему отсутствующий CSS для добавления в его код, а второй показывает ему полный и рабочий способ центрирования на всем экране, если, конечно, мы потратим время на их внимательное чтение.

Temani Afif 05.02.2019 00:00

@Olafant в качестве доказательства дубликата, вот из 2-го: stackoverflow.com/a/41164964/8620333 и вот из 1-го: stackoverflow.com/a/16837667/8620333 ... если вы все еще считаете, что он неправильно закрыт, то покажите мне, что нет ответа на его проблему в обоих .

Temani Afif 05.02.2019 00:02

@TemaniAfif спасибо за совет, как доказать мою точку зрения. Пожалуйста, не обижайтесь, если вместо этого я использую аллегорию. Q.A: Как не промокнуть под дождем? А.А.: Используйте зонтик! В.Б.: Почему я промок, несмотря на то, что пользовался зонтиком? А.Б.: Тебе нужно открыть его! Я не считаю Q.B дубликатом Q.A. Во всяком случае: я понимаю вашу точку зрения. Но я думаю, что для SO важно быть очень осторожным, чтобы не препятствовать людям задавать конкретные вопросы, помечая их как дубликаты более широких.

Olafant 05.02.2019 07:52

@Olafant Во-первых, закрытие вопроса как дубликата никогда не бывает плохой мыслью, и на самом деле это лучшая мысль. Сравните принятый ответ ниже с одним из дубликатов и скажите мне, какой из них лучше. Ответ, который говорит вам используйте это, и это сработает, не спрашивайте меня, почему или не нужно знать, почему, сделайте копию, и это сработает Или ответ, который говорит вам и дает объяснение Зачем? Вы хотите, чтобы я научил вас ловить рыбу или давал вам рыбу каждый раз, когда она вам нужна?

Temani Afif 05.02.2019 09:29

@Olafant Во-вторых, что касается вашей аллегории, вы просто подтверждаете дубликат, потому что SO должен создавать высококачественные вопросы и ответы, поэтому QA и QB одинаковы, потому что вам нужно приложить усилия, чтобы внимательно прочитать вопросы и ответы, чтобы понять, что вам также нужно открыть зонт, и открыть зонт недостаточно, нужно еще держать его над ухом. Дублирующий вопрос касается всего аспекта зонтика и не просто говорит вам вам нужно использовать зонт ... приведенный ниже ответ делает это, потому что есть 0 объяснений, но в дубликате вы узнаете, как правильно использовать зонтик.

Temani Afif 05.02.2019 09:34

@TemaniAfif На самом деле принятый ответ точно объясняет, почему подход ОП не удался в первой строке. Как и мой комментарий. Тогда как stackoverflow.com/a/41164964/8620333 дает только рыбу.

Olafant 05.02.2019 10:09

@Olafant, это из второго дубликата, я имел в виду первый из первого дубликата (stackoverflow.com/q/1575141/8620333). как я уже сказал, второй дубликат касается всей проблемы центрирования, тогда как первый касается проблемы высоты, и весь вопрос, включая все ответы / комментарии / ссылки, - это то, что научит вас ловить рыбу, а не только 1 ответ. В обоих дубликатах более 70 ответов. Если вы потратите время, чтобы просмотреть их все, это решит проблему и научит большему, чем вам нужно, но никто этого не делает, мы просто читаем заголовок, а затем жалуемся, что это не дубликат...

Temani Afif 05.02.2019 10:16

@TemaniAfif Как я уже сказал: я понимаю вашу точку зрения. Я попытался объяснить свою точку зрения. Если «... мы просто читаем заголовок, а затем жалуемся, что это не дубликат ...» - это то, что, по вашему мнению, я здесь сделал, вы, похоже, не открыты для рассмотрения других мнений. Я согласен с вами, что пометка дубликатов - это хорошо для качества SO. Просто не забывайте, что нет качества, о котором нужно заботиться, если люди не готовы задавать вопросы или обсуждать, как достичь высокого качества. Никаких острых ощущений!

Olafant 05.02.2019 10:50

Привет! Мне запретили задавать вопросы, я считаю эту санкцию суровой. Мне нужен положительный отзыв, не могли бы вы помочь мне хотя бы получить 0, потому что отрицательный результат заставит меня заблокировать, если я задам еще один вопрос, а с другой стороны, я не могу удалить ни один, потому что я уже принял и проголосовал за хорошие ответы, поэтому я застрял и плохо себя чувствую. спасибо за понимание и желаю вам хорошего дня!

Ced 18.06.2019 23:05
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
15
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно дать height основному классу. Например: height: 100vh; См.:

.main {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
}


.loader {
  border: 16px solid #f3f3f3;
  border-radius: 50%;
  border-top: 16px solid #3498db;
  width: 120px;
  height: 120px;
  -webkit-animation: spin 2s linear infinite; /* Safari */
  animation: spin 2s linear infinite;
  max-width: 50%;
}

/* Safari */
@-webkit-keyframes spin {
  0% { -webkit-transform: rotate(0deg); }
  100% { -webkit-transform: rotate(360deg); }
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
<div class = "main">
    <div class = "loader"></div>
</div>

Элемент .main имеет ту же высоту, что и элемент .loader (т. е. элементы центрированы по вертикали, но места для их просмотра нет). Вам нужно установить высоту .main на высоту, которую вы хотите центрировать.

.main {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
}


.loader {
  border: 16px solid #f3f3f3;
  border-radius: 50%;
  border-top: 16px solid #3498db;
  width: 120px;
  height: 120px;
  -webkit-animation: spin 2s linear infinite; /* Safari */
  animation: spin 2s linear infinite;

  max-width: 50%;
}

/* Safari */
@-webkit-keyframes spin {
  0% { -webkit-transform: rotate(0deg); }
  100% { -webkit-transform: rotate(360deg); }
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
<div class = "main">
    <div class = "loader"></div>
</div>

Большое спасибо за ответ! :) Извините, что спрашиваю, но не могли бы вы проголосовать за мой вопрос? Некоторые люди сочли забавным отрицать это.

Ced 18.06.2019 23:02

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