vuetify js grid полная высота столбцов и прокрутка при переполнении - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь заполнить <v-content> приложения vuetify js, используя его сетку. Как заполнить столбцы, чтобы занять все доступное пространство и переполнить прокрутку до определенных ячеек?

enter image description here

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
})
.grid-item-blue {
  background-color: lightblue;
}

.grid-item-green {
  background-color: lightgreen;
  overflow-y: scroll;
}

.grid-item-pink {
  background-color: pink;
  height: 100px;
}
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>

<div id="app">
  <v-app id="inspire">
    <v-app-bar app fixed dark>
      <v-toolbar-title>Toolbar</v-toolbar-title>
    </v-app-bar>
    <v-content>
      <v-container fluid fill-height pa-0>
        <v-row no-gutters class="top-row">
          <v-col cols="9" class="grid-item-blue">fill screen</v-col>
          <v-col cols="3" class="grid-item-green">independent vertical scroll
          </v-col>
        </v-row>
        <v-row no-gutters class="bottom-row">
          <v-col cols="12" class="grid-item-pink">fixed height, always on bottom</v-col>
        </v-row>
      </v-container>
    </v-content>
    <v-footer app dark>
      <span>Footer</span>
    </v-footer>
  </v-app>
</div>

Вот как у меня это работает, используя css сетку.

<div class="grid">
    <div class="grid-item-blue">fill screen</div>
    <div class="grid-item-green">independent vertical scroll</div>
    <div class="grid-item-pink">fixed height, always on bottom/</div>
</div>
.grid {
  height: calc(100vh - 64px - 36px);
  display: grid;
  gap: 10px;
  grid-template-columns: 9fr 3fr;
  grid-template-rows: 1fr 100px;
}

.grid-item-blue {
  background-color: lightblue;
  grid-column: 1 / 2;
  grid-row: 1 / 2;
}

.grid-item-green {
  background-color: lightgreen;
  grid-column: 2 / 3;
  grid-row: 1 / 2;
  overflow-y: scroll;
}

.grid-item-pink {
  background-color: pink;
  grid-column: 1 / 3;
  grid-row: 2 / 3;
}

1 Ответ

1 голос
/ 01 мая 2020
  1. Сделать контейнер контейнером flexbox.
  2. flex-grow:0; На втором элементе.
  3. flex-grow:1; На первом элементе.

Шаг 1:

<v-container fluid fill-height pa-0>

Становится:

<v-container fluid pa-0 class="d-flex flex-column flex-grow-1 fill-parent-height">

Последний класс есть пользовательский .fill-parent-height{ height:100%; }


Шаг 2:

<v-row no-gutters class="top-row">

Становится:

<v-row no-gutters class="top-row flex-grow-1 flex-shrink-1">

Шаг 3:

<v-row no-gutters class="bottom-row">

Становится:

<v-row no-gutters class="bottom-row flex-grow-0 flex-shrink-0">

Демо

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
})
.grid-item-blue {
  background-color: lightblue;
}

.grid-item-green {
  background-color: lightgreen;
  overflow-y: scroll;
}

.grid-item-pink {
  background-color: pink;
  height: 100px;
}
.grid-item-green>p{
	height:9000px;
	border:10px solid;
	margin:20px;
}

.fill-parent-height {
  height: 100%;
}

.top-row{
	min-height: 0;
}
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>

<div id="app">
  <v-app id="inspire">
    <v-app-bar app fixed dark>
      <v-toolbar-title>Toolbar</v-toolbar-title>
    </v-app-bar>
    <v-content style="height:100vh">
      <!-- <v-container fluid fill-height pa-0> -->
      <v-container fluid pa-0 class="d-flex flex-column flex-grow-1 fill-parent-height">
        <!-- <v-row no-gutters class="top-row"> -->
        <v-row no-gutters class="top-row flex-grow-1 flex-shrink-1">
          <v-col cols="9" class="grid-item-blue fill-parent-height">
	          fill screen
	      </v-col>
          <v-col cols="3" class="grid-item-green fill-parent-height">
	          independent vertical scroll
	          <p>long element</p>
          </v-col>
        </v-row>
        <!-- <v-row no-gutters class="bottom-row"> -->
        <v-row no-gutters class="bottom-row flex-grow-0 flex-shrink-0">
          <v-col cols="12" class="grid-item-pink">fixed height, always on bottom</v-col>
        </v-row>
      </v-container>
    </v-content>
    <v-footer app dark>
      <span>Footer</span>
    </v-footer>
  </v-app>
</div>

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

Чтобы зеленый элемент можно было прокручивать, нам нужно распространить Высота вниз от html или использование единиц просмотра в произвольном элементе контейнера, я выбрал <v-content style="height:100vh">

Я обновляю демонстрацию выше.

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