Центрирование всего основного элемента

Я поместил некоторый контент и форму в элемент main. Вот HTML:

<main>
  <h1>My main content</h1>
  <form action = "/action_page.php" id = "form">
    <input type = "email" id = "email" name = "email" placeholder = "Enter your email address"><br><br>
    <input type = "submit" value = "Submit">
  </form> 
</main>

со следующим CSS:

main {
    width: 800px;
    margin: 0 auto;
}
<main>
    <h1>My main content</h1>
    <form action = "/action_page.php" id = "form">
      <input type = "email" id = "email" name = "email" placeholder = "Enter your email address"><br><br>
      <input type = "submit" value = "Submit">
    </form>
</main>

Однако элемент main не центрирован точно. Что может быть причиной?

Он отлично центрируется во фрагменте (нажмите «Вся страница» и просмотрите его в окне шириной более 800 пикселей.) Что вы подразумеваете под «не точно центрировать»? Чего вы ожидали?

Guy Incognito 20.07.2024 12:39

@Guy, когда я проверяю элемент, я все равно вижу контент чуть левее. мне сделать width: 100vw; ?

user9026 20.07.2024 12:43

Да, потому что вы центрировали контейнер, а не содержимое. Если вы сделаете его шире, контент сдвинется еще левее. Либо а) сделайте контейнер меньше, чтобы содержимое помещалось более плотно, либо б) вместо этого отцентрируйте содержимое с помощью text-align: center, flexbox или чего-то подобного.

Guy Incognito 20.07.2024 12:46

text-align: center тоже выравнивает формы? Также использование width: 100vw; вводит горизонтальную полосу прокрутки. Почему это так, ведь 100vw означает 100% ширины области просмотра?

user9026 20.07.2024 12:53

Формы не имеют визуального представления, поэтому этот вопрос не имеет смысла. Вы получаете полосы прокрутки, потому что тело страницы имеет поля.

Guy Incognito 20.07.2024 12:56

Лучше не использовать 100vw, за исключением особых случаев, поскольку это означает, что область просмотра исключает пространство для полос прокрутки. Вместо этого используйте 100%.

Paulie_D 20.07.2024 12:59
Улучшение производительности загрузки с помощью 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
6
58
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Поскольку весь контент занимает 100% ширины main, центрирование объектов будет выглядеть точно так же, как и нецентрирование. Таким образом, вы можете достичь своей цели, указав ширину содержимого вашего main в процентах (я использовал 50%), а затем указав margin-left для main, который будет составлять половину ширины неиспользуемой недвижимости. (Итак, если вы выбрали размер контента в 50 %, то это будет левое поле (100–50) / 2 % = 25 %). Если вместо этого вы выбрали ширину 80 %, то это будет левая граница (100 – 80) / 2 % = 10 %.

main {
    width: 800px;
    margin-left: 25%;
}

main > * {
    width: 50%;
}
<main>
    <h1>My main content</h1>
    <form action = "/action_page.php" id = "form">
      <input type = "email" id = "email" name = "email" placeholder = "Enter your email address"><br><br>
      <input type = "submit" value = "Submit">
    </form>
</main>

Конечно, это еще можно улучшить, применяя к вашим элементам дополнительные размеры и другие стили, но я полагаю, это хорошее начало.

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

Если вы добавите outline: 1px solid #000 к main, вы поймете, почему он не по центру.

main {
    width: 800px;
    margin: 0 auto;

    outline: 1px solid;
}
<main>
    <h1>My main content</h1>
    <form action = "/action_page.php" id = "form">
      <input type = "email" id = "email" name = "email" placeholder = "Enter your email address"><br><br>
      <input type = "submit" value = "Submit">
    </form>
</main>

Элемент main занимает 800 пикселей независимо от ширины дочерних элементов, поэтому справа от формы всегда будет много пустого пространства.

Измените width на max-width и добавьте display: inline-block, чтобы main обернулся вокруг самого широкого дочернего элемента, но вместо этого вы получите другую проблему.

main {
    display: inline-block;
    max-width: 800px;
    margin: 0 auto;

    outline: 1px solid;
}
<main>
    <h1>My main content</h1>
    <form action = "/action_page.php" id = "form">
      <input type = "email" id = "email" name = "email" placeholder = "Enter your email address"><br><br>
      <input type = "submit" value = "Submit">
    </form>
</main>

Элемент больше не центрируется, потому что вы можете центрировать его только с помощью margin: auto на блочных элементах. Поэтому вместо этого добавьте div.container вокруг ширины основного элемента, максимальную ширину и центрируйте ее.

main {
    display: flex;
    justify-content: center;
 }

.center-container {
   display: inline;
   max-width: 800px;
   outline: 1px solid; /* ONLY FOR SHOWING THE SIZE OF THE CONTAINER */
}
<main>
    <div class = "center-container">
      <h1>My main content</h1>
      <form action = "/action_page.php" id = "form">
        <input type = "email" id = "email" name = "email" placeholder = "Enter your email address"><br><br>
        <input type = "submit" value = "Submit">
      </form>
   </div>
</main>

Просто уменьшите width до ширины form (содержимого main). Проверить это можно в инспекторе. И измените width на max-width, чтобы сделать его отзывчивым.

main {
  max-width: 235px; /* it was just width*/
  margin: 0 auto;
}
<main>
  <h1>My main content</h1>
  <form action = "/action_page.php" id = "form">
    <input type = "email" id = "email" name = "email" placeholder = "Enter your email address"><br><br>
    <input type = "submit" value = "Submit">
  </form>
</main>

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