Bootstrap - Как получить карту вертикально по центру между строкой поиска и нижней частью области просмотра? - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь расположить карту по центру между строкой поиска и нижней частью окна просмотра.

Я пытался сделать рост 100%, но затем он простирается за пределыобласть просмотра и пользователь может прокрутить вниз в пустое пространство.Я пытался использовать align-content: center; в родительском контейнере, но это ничего не меняет.

html.html


<body>
    <div class="navbar navbar-expand-lg sticky-top">
        <!-- nav info -->
    </div>

    <div class="container-fluid">

        <!-- Title above search bar -->
        <div class="row">
            <div id="search-title" class="col-xl-6 col-md-7 col-sm-8 col-8 mx-auto">
                <h3>Title</h3>
            </div>
        </div>

        <!-- Search bar -->
        <div class="row">
            <div class="col-xl-6 col-md-7 col-sm-8 col-8 mx-auto">
                <!-- search form -->
                </form>
            </div>
        </div>

        <!-- No results -->
        <div class="row">
            <div id="no-results" class="col-xl-6 col-md-7 col-sm-8 col-8 mx-auto">

                {% if term != '' and not cameras %}
                <!-- if no results then tell user -->
                {% endif %}

            </div>
        </div>

        <!-- Resulting card from search -->
        {% if camera %}
        <div class="container align-center">
            <!-- I would like this card to be vertically centered between the search bar and the bottom of viewport -->
            <div class="col-xl-6 col-md-7 col-sm-8 col-8 mx-auto card myclass">
                <div class="card-body">
                    <!-- info -->
                </div>
            </div>
        </div>
        {% endif %}
    </div>
</body>

css

html, body {
    height: 100%;
    width: 100%;
}

.align-center {
    align-content: center;
}

Вот как это выглядит прямо сейчас.Обратите внимание, как граница на теле находится ниже области просмотра.

Current image

Ответы [ 3 ]

1 голос
/ 21 июня 2019
  1. Вы можете сделать это, установив высоту вашей страницы.На самом деле height:100vh полностью заполняет страницу.Поскольку у вас есть навигационная панель, рассчитайте ее высоту и вычтите ее из 100vh следующим образом height:calc(100vh - (56px)).
  2. Чтобы установить карту в центр страницы, вы можете использовать position:absolute и transform:translate(-50%,-50%)имущество.Это выровняет вашу карту по вертикали и горизонтали в центре.Я буду выровнен по центру во всех устройствах тоже.

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css"
    integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
  <style>
    .form-control-borderless {
      border: none;
    }

    .form-control-borderless:hover,
    .form-control-borderless:active,
    .form-control-borderless:focus {
      border: none;
      outline: none;
      box-shadow: none;
    }
    .centre{
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%,-50%)
    }
  </style>
</head>

<body>
  <nav class="navbar navbar-expand-lg bg-dark navbar-dark sticky-top">
    <a class="navbar-brand" href="#"><img class="img-responsive" src="/testing/users/images/logo.png"></a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="collapsibleNavbar">
      <ul class="navbar-nav  ml-auto">
        <li class="nav-item"><a href="/testing/" class="nav-link"><span class="fa fa-fw fa-home"></span> Home</a></li>
        <li class="nav-item"><a href="/testing/users/account.php" class="nav-link"><span
              class="fa fa-fw fa-user"></span> admin</a></li>
        <li class="nav-item">
          <a href="/testing/users/messages.php" class="nav-link">
            <span class="fa fa-envelope"></span><i class="badge"></i> Message</a>
        </li>
        <li class="nav-item dropdown">
          <a class="nav-link dropdown-toggle" href="#" id="dropdown_main" data-toggle="dropdown" aria-haspopup="true"
            aria-expanded="false"><span class="fa fa-fw fa-cogs"></span> <span class="caret"></span>Settings</a>
          <div class="dropdown-menu dropdown-info" aria-labelledby="dropdown_main">
            <a class="dropdown-item" href="/testing/"><span class="fa fa-fw fa-home"></span> Home</a>
            <div class="dropdown-divider"></div>
            <a class="dropdown-item" href="/testing/users/account.php"><span class="fa fa-fw fa-user"></span>
              Account</a>
            <a class="dropdown-item" href="/testing/users/admin.php"><span class="fa fa-fw fa-cogs"></span> Admin
              Dashboard</a>
            <a class="dropdown-item" href="/testing/users/admin.php?view=users"><span class="fa fa-fw fa-user"></span>
              User Management</a>
            <a class="dropdown-item" href="/testing/users/admin.php?view=permissions"><span
                class="fa fa-fw fa-lock"></span> Permissions Management</a>
            <a class="dropdown-item" href="/testing/users/admin.php?view=pages"><span class="fa fa-fw fa-wrench"></span>
              Page Management</a>
            <a class="dropdown-item" href="/testing/users/admin.php?view=messages"><span
                class="fa fa-fw fa-envelope"></span> Messages Manager</a>
            <a class="dropdown-item" href="/testing/users/admin.php?view=logs"><span class="fa fa-fw fa-search"></span>
              System Logs</a>
            <a class="dropdown-item" href="/testing/users/logout.php"><span class="fa fa-fw fa-sign-out"></span>
              Logout</a>
          </div>
        </li>
        <li class="nav-item dropdown menu">
          <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown"
            aria-haspopup="true" aria-expanded="false">
            <span class="fa fa-fw fa-lock"></span> menu
          </a>
          <div class="dropdown-menu w-100" aria-labelledby="navbarDropdown">
            <a class="dropdown-item mx-auto" href="#">Action</a>
            <a class="dropdown-item" href="#">Another action</a>
            <a class="dropdown-item" href="#">Another action</a>
            <a class="dropdown-item" href="#">Another action</a>
          </div>
        </li>
      </ul>
    </div>
  </nav>
  <div class="container" style="height:calc(100vh - (56px))">
    <br>
    <div class="row justify-content-center">
      <div class="col-12 col-md-10 col-lg-8">
        <form class="card card-sm">
          <div class="card-body row no-gutters align-items-center">
            <div class="col-auto">
              <i class="fas fa-search h4 text-body"></i>
            </div>

            <div class="col">
              <input class="form-control form-control-lg form-control-borderless" type="search"
                placeholder="Search topics or keywords">
            </div>

            <div class="col-auto">
              <button class="btn btn-lg btn-success" type="submit">Search</button>
            </div>
            <!--end of col-->
          </div>
        </form>
      </div>
      <!--end of col-->
    </div>
    <div class="col-sm-6 centre">
      <div class="card bg-light ">
        <div class="card-body text-center">
          <p class="card-text">Some text inside the card</p>
        </div>
      </div>
    </div>
  </div>
</body>

</html>
1 голос
/ 21 июня 2019

Вы можете заключить элемент вашей карты в контейнер (card-container) со свойством position, установленным в относительное. Дайте вашей карте абсолютное позиционирование с верхним свойством, установленным на 50%. Убедитесь, что в вашем контейнере указано свойство высоты.

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

Вы также можете использовать функцию flex-box в css, чтобы сделать ваш макет более отзывчивым. Это также решит проблему, которая возникает у вас на большом экране. Я обновил код внутри контейнера и классы CSS, примененные к секции контейнера. Обновите свой код соответствующим образом и дайте мне знать.

.card-container {
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
  border: 2px solid red;
}


.card-body {
  flex: 2 0;
  align-self: center;
  border: 2px solid green;
}
.card {
  flex: 1 1;
  align-self: center;
  
}


.good-status {
  color: #45A163;
}

.bad-status {
  color: red;
}
  <div class="card-container">
    <div class="card mx-auto"></div>
    <div class="card-body">
      <h5 class="card-title text-center">Title</h5>
      <ul>
        <li>Item 1</li>
        <li>Item 1</li>
        <li>Item 1</li>
        <li>Item 1</li>
      </ul>
      <a href="#" class="btn btn-primary">Ping device</a>
      <a href="#" class="btn btn-primary">Go to webbooter page</a>
    </div>
       <div class="card mx-auto"></div>
  </div>
</div>
0 голосов
/ 21 июня 2019

Нет причин использовать высоту: 100%, calc () или дополнительный CSS . Используйте классы flexbox, доступные в Bootstrap 4. Установите минимальную высоту тела (min-vh-100), столбец направления гибкого канала, а затем flex-fill, чтобы контейнер заполнил оставшуюся высоту. Вертикальное центрирование будет работать как положено.

<body class="d-flex flex-column min-vh-100">
   <nav>
   </nav>
   <div class="container-fluid d-flex flex-column flex-fill align-items-center justify-content-center">
      <div class="row">...</div>
   </div>
</body>

https://www.codeply.com/go/3k7MBc10tb

Похожие: Bootstrap 4: Как заставить строку растянуть оставшуюся высоту?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...