Bootstrap 4 не может центрировать ряд по вертикали - PullRequest
0 голосов
/ 18 января 2019

Я запускаю новый проект asp.net mvc и, что бы я ни пытался, я не могу отцентрировать строку div, содержащую изображение и раскрывающиеся списки по вертикали. Я прикрепил картинку, на которой вы можете видеть, как контент находится наверху, и использовал ужасные цвета, чтобы вы могли быстро ее увидеть.

site.css:

html, body {
    height: 100%;
}

#mmenu_screen > .row {
    min-height: 100vh;
}

/* Set padding to keep content from hitting the edges */
.body-content {
    padding-left: 15px;
    padding-right: 15px;
}

/* Override the default bootstrap behavior where horizontal description lists 
   will truncate terms that are too long to fit in the left column 
*/
.dl-horizontal dt {
    white-space: normal;
}

/* Set width on the form input elements since they're 100% wide by default */
input,
select,
textarea {
    max-width: 280px;
}

.flag {
    width: 100px;
}

Layout.cshtml:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    <div class="d-flex flex-column h-100" style="background-color: antiquewhite;">
        @RenderBody()
    </div>

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

Index.cshtml:

<div class="container-fluid h-100 d-flex flex-column" style="background-color: aqua">
    <div class="row h-100" style="flex:1;">
        <div class="col-md-4">
            <div class="row">
                <div class="col-md-6">
                    @Html.LabelFor(model => model.Year)
                </div>
                <div class="col-md-6">
                    @Html.DropDownListFor(model => model.Year, new SelectList(Model.Years, "Value", "Text"), new { @class = "form-control year-dropdown", style = "font-size:120%;" })
                </div>
            </div>
            <div class="row p-2"></div>
            <div class="row">
                <div class="col-md-6">
                    Edad en el momento del accidente
                </div>
                <div class="col-md-6">
                    @Html.DropDownListFor(model => model.Year, new SelectList(Model.Ages, "Value", "Text"), new { @class = "form-control year-dropdown" })
                </div>
            </div>
        </div>
        <div class="col-md-8">
            <img src="~/Content/img/accident-1497298.jpg" alt="car_accident" class="img-fluid w-100" />
        </div>
    </div>
</div>

Любая помощь будет высоко ценится.

First approach

Edit:

Теперь, после предложения @ Artūrs Orinskis (код ниже), содержимое первого столбца отцентрировано по вертикали относительно изображения, но вся строка, содержащая изображение (это то, что я ожидаю отцентрировать по вертикали относительно области просмотра) по-прежнему вверху как на рисунке 2.

Figure 2

Редактировать 2:

@ Артурс Оринскис указал мне верное направление, и после некоторых проб и ошибок я получил рабочее решение, и я вставлю код ниже, если он кому-нибудь поможет.

Финальный код:

<div class="container-fluid d-flex flex-column flex-fill">
        <div class="row" style="background-color: yellowgreen; height: 100vh">
            <div class="col-4 d-flex bg-success">
                <div class="d-flex flex-column flex-fill my-auto bg-info">
                    <div class="form-group">
                        <input class="form-control">
                    </div>
                    <div class="form-group">
                        <input class="form-control">
                    </div>
                </div>
            </div>
            <div class="col-8 d-flex bg-warning">
                <div class="d-flex flex-fill my-auto bg-info">
                    <img src="~/Content/img/accident-1497298.jpg" alt="car_accident" class="img-fluid w-100" />
                </div>
            </div>
        </div>
    </div>

Figure 3

1 Ответ

0 голосов
/ 18 января 2019

Попробуйте этот подход.

Основные пункты дизайна:

  1. сохранить высоту 100% только для тегов html и body
  2. большинство элементов используют загрузчик .flex-fill для полной загрузки содержимого в области просмотра и столбец .flex для вертикального перемещения по всей странице. это помогает контролировать вертикальное выравнивание
  3. Синий фон (.bg-info) оставлен, чтобы вы могли видеть, как содержимое расширяется, начиная от центра по всей странице по вертикали настолько, насколько это необходимо

body, html {
  height: 100%;
}

body {
  display: flex;
  flex-direction: column;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<html>
  <body>
    <div class="container-fluid d-flex flex-column flex-fill">
      <div class="row flex-fill">
        <div class="col-4 d-flex bg-success">
          <div class="d-flex flex-column flex-fill my-auto bg-info">
            <div class="form-group">
              <input class="form-control">
            </div>
            <div class="form-group">
              <input class="form-control">
            </div>
          </div>
        </div>
        <div class="col-8 d-flex flex-column bg-warning">
          <div class="d-flex flex-fill my-auto bg-info">
            <img class="img-fluid w-100" src="data:image/svg+xml, %3Csvg viewBox='0 0 612 612' xmlns='http://www.w3.org/2000/svg' focusable='false'%3E%3Ctitle%3EBootstrap%3C/title%3E%3Cpath d='M510 8a94.3 94.3 0 0 1 94 94v408a94.3 94.3 0 0 1-94 94H102a94.3 94.3 0 0 1-94-94V102a94.3 94.3 0 0 1 94-94h408m0-8H102C45.9 0 0 45.9 0 102v408c0 56.1 45.9 102 102 102h408c56.1 0 102-45.9 102-102V102C612 45.9 566.1 0 510 0z'%3E%3C/path%3E%3Cpath fill='currentColor' d='M196.77 471.5V154.43h124.15c54.27 0 91 31.64 91 79.1 0 33-24.17 63.72-54.71 69.21v1.76c43.07 5.49 70.75 35.82 70.75 78 0 55.81-40 89-107.45 89zm39.55-180.4h63.28c46.8 0 72.29-18.68 72.29-53 0-31.42-21.53-48.78-60-48.78h-75.57zm78.22 145.46c47.68 0 72.73-19.34 72.73-56s-25.93-55.37-76.46-55.37h-74.49v111.4z'%3E%3C/path%3E%3C/svg%3E">
          </div>
        </div>
      </div>
    </div>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...