Как я могу центрировать один столбец/форму начальной загрузки точно по центру моего экрана?

Я пытался часами, но не могу найти решение, моя проблема:

Я пытаюсь создать страницу входа в систему, где форма входа расположена горизонтально и вертикально по центру страницы. Я работаю с syncfusion blazor и создал полноэкранный контейнер:

HTML:

<div class="control-section" style="min-height: 100vh !important; background-color: red !important;">
    
</div>

CSS:

body, html {
   margin: 0 !important;
   padding: 0 !important;
}

.container {
 max-width: 100% !important;
 width: 100% !important;
 height: 100% !important;
 padding-right: 0px !important;
 padding-left: 0px !important;
}

.pb-3 {
  padding-bottom: 0rem !important;
}

Это работает, и контейнер устанавливается на полную ширину и высоту без каких-либо полос прокрутки.

Однако я пытаюсь создать на этой странице один столбец, который вертикально и горизонтально центрирован в центре страницы.

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

Что я пробовал до сих пор:

<div class="control-section" style="min-height: 100vh !important; background-color: red !important;">
     <div class="col-xs-12 col-sm-2 offset-5" style="background-color: blue !important;">Test</div>
</div>

Это создало столбец шириной 2 и смещением 5, поэтому он центрирован по горизонтали, однако я не могу центрировать или вертикально. Может ли кто-нибудь помочь мне с этим?

ОБНОВЛЕНИЕ после ответа

Я использовал код ответа centerArea и поместил форму в свою строку:

.HTML:

<div class="control-section centerArea">
    <div class="col-xs-12 col-sm-2" style="background-color: blue !important;">
        <section>
            <form id="account" method="post">
                <hr />
                <div asp-validation-summary="All" class="text-danger"></div>
                <div class="form-group" style="margin-top: 150px !important;">
                    <label asp-for="Input.Email"></label>
                    <input asp-for="Input.Email" class="form-control" />
                    <span asp-validation-for="Input.Email" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Input.Password"></label>
                    <input asp-for="Input.Password" class="form-control" />
                    <span asp-validation-for="Input.Password" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <div class="checkbox d-inline-block">
                        <label asp-for="Input.RememberMe">
                            <input asp-for="Input.RememberMe" />
                            @Html.DisplayNameFor(m => m.Input.RememberMe)
                        </label>
                    </div>
                    <div class="d-inline-block">
                        <a id="forgot-password" asp-page="./ForgotPassword">Password?</a>
                    </div>
                </div>
                <div class="form-group">
                    <button type="submit" class="btn btn-primary">Log in</button>
                </div>
                <div class="form-group">
                    <p>
                        <a id="forgot-password" asp-page="./ForgotPassword">Password?</a>
                    </p>
                    <p>
                        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
                    </p>
                    <p>
                        <a id="resend-confirmation" asp-page="./ResendEmailConfirmation">Resend email confirmation</a>
                    </p>
                </div>
            </form>
        </section>
    </div>
</div>

.CSS:

<style>
body, html {
    margin: 0 !important;
    padding: 0 !important;
}

.container {
    max-width: 100% !important;
    width: 100% !important;
    height: 100% !important;
    padding-right: 0px !important;
    padding-left: 0px !important;
}

.pb-3 {
    padding-bottom: 0rem !important;
}

.centerArea {
    min-height: 100vh !important;
    background-color: red !important;
    color: white;
    display: flex;
    justify-content: center;
}

img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.form-group {
    display: block !important;
    margin: 0 auto !important;
    max-width: 90% !important;
    margin-bottom: 1% !important;
}

.d-inline-block {
    display: inline-block !important;
}
</style>

Это выводит следующее:

введите здесь описание изображения

Как вы видите, контент расположен по центру по горизонтали, но не по вертикали? Я пытаюсь сделать что-то вроде этого:

введите здесь описание изображения

заранее спасибо


person Niels    schedule 01.07.2020    source источник
comment
до сих пор не могу понять, почему row не подходят? В любом случае, сделать .control-section гибким контейнером может быть полезно.   -  person ths    schedule 01.07.2020
comment
Потому что я хочу, чтобы фон контейнера был изображением   -  person Niels    schedule 01.07.2020
comment
Я изменил код. Пожалуйста, проверьте..   -  person aks44    schedule 01.07.2020


Ответы (2)


Решение только для начальной загрузки:

сделать оболочку div.control-section гибким контейнером, присвоив ей класс d-flex и назначив m-auto элементу .col-*.

d-flex, m-auto — это классы Bootstrap. Кроме того, я добавил класс Bootsrap p-2 в оболочку div.control-section, чтобы иметь небольшой интервал, если высота области просмотра меньше высоты содержимого.

.control-section {
  min-height: 100vh;
  background: rgba(0, 0, 0, .4) url("https://images.unsplash.com/photo-1506765515384-028b60a970df") center no-repeat;
  background-size: cover;
  background-blend-mode: overlay;
}
<!-- importing Bootsrap (just for the demo) -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

<!-- Your code -->
<div class="control-section d-flex p-2">
  <div class="col-11 col-md-8 col-lg-4 m-auto" style="background-color: blue !important;">
    <section>
      <form id="account" method="post">
        <hr />
        <div asp-validation-summary="All" class="text-danger"></div>
        <div class="form-group">
          <label asp-for="Input.Email"></label>
          <input asp-for="Input.Email" class="form-control" />
          <span asp-validation-for="Input.Email" class="text-danger"></span>
        </div>
        <div class="form-group">
          <label asp-for="Input.Password"></label>
          <input asp-for="Input.Password" class="form-control" />
          <span asp-validation-for="Input.Password" class="text-danger"></span>
        </div>
        <div class="form-group">
          <div class="checkbox d-inline-block">
            <label asp-for="Input.RememberMe">
                            <input asp-for="Input.RememberMe" />
                            @Html.DisplayNameFor(m => m.Input.RememberMe)
                        </label>
          </div>
          <div class="d-inline-block">
            <a id="forgot-password" asp-page="./ForgotPassword">Password?</a>
          </div>
        </div>
        <div class="form-group">
          <button type="submit" class="btn btn-primary">Log in</button>
        </div>
        <div class="form-group">
          <p>
            <a id="forgot-password" asp-page="./ForgotPassword">Password?</a>
          </p>
          <p>
            <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
          </p>
          <p>
            <a id="resend-confirmation" asp-page="./ResendEmailConfirmation">Resend email confirmation</a>
          </p>
        </div>
      </form>
    </section>
  </div>
</div>

person ths    schedule 01.07.2020
comment
Можно ли центрировать модальное окно немного выше, чем при отображении на мобильном телефоне? В противном случае пользователь должен прокрутить вниз, чтобы перейти к форме входа. - person Niels; 01.07.2020
comment
Итак, вы хотите, чтобы модальное окно было вверху (а не по центру по вертикали) на мобильном устройстве? Если да, то просто добавьте mt-0 mt-md-auto классов в .col-*. К вашему сведению, содержимое вашего модального окна длинное, и это вызывает прокрутку. - person ths; 01.07.2020

Попробуй это:

.html

<div class="control-section centerArea">
  <div class="col-xs-12 col-sm-2 offset-5 centerAreaChild">Test</div>
</div>

.css

.centerArea {
    margin: 0px;
    padding: 0px;
    border-width: 0px;
    background-color: blue;
    min-height: 800px;
    display: flex;
    align-items: center;
    justify-content: center;
}
.centerAreaChild {
    text-align: center;
    height: 300px;
    background-color: red;
    justify-content: center;
    align-items: center;
    color: white;
    width: 200px;
    display: flex;
}
person aks44    schedule 01.07.2020
comment
Проверьте обновленный ответ, я использовал ваш код и лучше объяснил проблему - person Niels; 01.07.2020
comment
Я изменил код.. Пожалуйста, проверьте.. - person aks44; 01.07.2020