Ограничить максимальную длину страницы в css - PullRequest
2 голосов
/ 20 января 2020

У меня есть Vue приложение, работающее с Vuetify, но ни одно из них, похоже, не приспособлено для того, чтобы справиться с моим желанием ограничить максимальную длину страницы, чтобы не было прокрутки. Я надеюсь, что в этом есть смысл. Я надеюсь, что просто подтяну экран с кучей маршрутизации к аналогично отформатированным экранам. Конечно, пользователь может сделать окно меньше, и в этом случае мне понадобится прокрутка. Итак, как бы мне это настроить, когда я хочу, чтобы страница была открыта на весь экран с максимальной длиной страницы, которая предотвратит прокрутку НЕОБХОДИМОСТЬ, но все же разрешит прокрутку, если есть необходимость из-за того, что пользователь изменяет размер страницы до чего-то другого? немного меньше?

Я часами искал подробности об этом, но не нашел ничего, что действительно казалось бы прямым решением. Как я могу установить максимальную длину страницы? CSS предложит это? Я видел решение, помещающее CSS в тег <head>, но в приложении Vue этот тег заголовка не используется так же, как типичные HTML страницы.

РЕДАКТИРОВАТЬ: потому что Я не думаю, что ясно, что, поскольку я работаю в vue / vuetify, решение может отличаться от общего случая, я думаю, что будет лучше, если я предоставлю свое приложение. vue и пример страницы.

--- Приложение. vue ---


<template>
  <v-app>
    <app-toolbar></app-toolbar>
    <router-view></router-view>
    <app-footer></app-footer>
  </v-app>
</template>

<script>
import AppToolbar from "./components/AppToolbar.vue";
import AppFooter from "./components/AppFooter.vue";

export default {
  name: "App",

  components: {
    AppToolbar,
    AppFooter
  },

  data: () => ({
    //
  })
};
</script>
<style scoped></style>

--- Домашняя страница. vue ---

<template>
  <div>
    <v-app>
      <v-responsive aspect-ratio="16/9">
        <v-carousel cycle hide-delimiter-background show-arrows-on-hover>
          <v-carousel-item
            v-for="(item, i) in items"
            :key="i"
            :src="item.src"
            reverse-transition="fade-transition"
            transition="fade-transition"
          ></v-carousel-item>
        </v-carousel>
      </v-responsive>
    </v-app>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        {
          src: "https://cdn.vuetifyjs.com/images/carousel/squirrel.jpg"
        },
        {
          src: "https://cdn.vuetifyjs.com/images/carousel/sky.jpg"
        },
        {
          src: "https://cdn.vuetifyjs.com/images/carousel/bird.jpg"
        },
        {
          src: "https://cdn.vuetifyjs.com/images/carousel/planet.jpg"
        }
      ]
    };
  }
};
</script>

<style></style>

РЕДАКТИРОВАТЬ 2: Добавление app-toolbar & app-footer

--- Панель инструментов. vue ---

  <template>
  <div>
    <v-toolbar dense color="#3F51B5" dark>
      <v-app-bar-nav-icon
        color="#76ff03"
        @click.stop="drawer = !drawer"
      ></v-app-bar-nav-icon>

      <v-btn to="/" color="#76ff03" text>Vuetification</v-btn>

      <v-spacer></v-spacer>
      <v-spacer></v-spacer>
      <v-spacer></v-spacer>
      <v-spacer></v-spacer>
      <v-spacer></v-spacer>
      <v-spacer></v-spacer>
      <v-spacer></v-spacer>
      <v-spacer></v-spacer>
      <v-row align="center" justify="center">
        <v-badge bordered color="error" icon="mdi-lock" overlap>
          <v-btn class="white--text" color="error" depressed>
            Lock Account
          </v-btn>
        </v-badge>

        <div class="mx-3"></div>

        <v-badge
          bordered
          bottom
          color="deep-purple accent-4"
          dot
          offset-x="10"
          offset-y="10"
        >
          <v-avatar size="40">
            <v-img src="https://cdn.vuetifyjs.com/images/lists/2.jpg"></v-img>
          </v-avatar>
        </v-badge>

        <div class="mx-3"></div>

        <v-badge avatar bordered overlap>
          <template v-slot:badge>
            <v-avatar>
              <v-img src="https://cdn.vuetifyjs.com/images/logos/v.png"></v-img>
            </v-avatar>
          </template>

          <v-avatar size="40">
            <v-img src="https://cdn.vuetifyjs.com/images/john.png"></v-img>
          </v-avatar>
        </v-badge>
      </v-row>
      <div class="hidden-sm-and-down">
        <v-btn icon>
          <v-icon color="#76ff03">mdi-magnify</v-icon>
        </v-btn>
        <v-btn icon>
          <v-icon color="#76ff03">mdi-heart</v-icon>
        </v-btn>
        <v-btn icon>
          <v-icon color="#76ff03">mdi-dots-vertical</v-icon>
        </v-btn>
        <v-btn color="#76ff03" text>About</v-btn>
        <v-btn to="/contact" color="#76ff03" text>Contact</v-btn>
        <v-btn to="/login" color="#76ff03" text>Login</v-btn>
      </div>
    </v-toolbar>

    <v-navigation-drawer
      v-model="drawer"
      expand-on-hover
      app
      temporary
      right
      height="160px"
    >
      <v-list-item>
        <v-list-item-avatar>
          <v-img src="https://randomuser.me/api/portraits/men/78.jpg"></v-img>
        </v-list-item-avatar>

        <v-list-item-content>
          <v-list-item-title>John Leider</v-list-item-title>
        </v-list-item-content>
      </v-list-item>

      <v-divider></v-divider>

      <v-list dense>
        <v-list-item v-for="item in items" :key="item.title" link>
          <v-list-item-icon>
            <v-icon>{{ item.icon }}</v-icon>
          </v-list-item-icon>

          <v-list-item-content>
            <v-list-item-title>{{ item.title }}</v-list-item-title>
          </v-list-item-content>
        </v-list-item>
      </v-list>
    </v-navigation-drawer>
  </div>
</template>
<script>
export default {
  data() {
    return {
      drawer: false,
      items: [
        { title: "Home", icon: "mdi-ghost" },
        { title: "About", icon: "mdi-kabaddi" }
      ]
    };
  }
};
</script>
<style scoped>
.toolbar-item {
  color: #76ff03;
}
</style>

--- Нижний колонтитул. vue ---

plate>
  <v-app>
    <v-footer dark padless fixed>
      <v-card class="flex" text tile>
        <v-card-title class="teal">
          <strong class="subheading"
            >Get connected with us on social networks!</strong
          >

          <v-spacer></v-spacer>

          <v-btn v-for="icon in icons" :key="icon" class="mx-4" dark icon>
            <v-icon color="#76ff03" size="24px">{{ icon }}</v-icon>
          </v-btn>
        </v-card-title>

        <v-card-text class="text-center">
          <v-layout>
            <v-flex class="toolbar-item" v-for="(col, i) in rows" :key="i" xs3>
              <span class="body-2" v-text="col.title.toUpperCase()" />
              <div v-for="(child, i) in col.children" :key="i" v-text="child" />
            </v-flex>
            <v-flex class="toolbar-item" xd3 layout column>
              <span class="body-2">CONTACT</span>
              <div>
                <v-icon color="#76ff03" size="18px" class="mr-3"
                  >fa-home</v-icon
                >
                New York, NY 10012, US
              </div>
              <div>
                <v-icon color="#76ff03" size="18px" class="mr-3"
                  >fa-envelope</v-icon
                >
                info@example.com
              </div>
              <div>
                <v-icon color="#76ff03" size="18px" class="mr-3"
                  >fa-phone</v-icon
                >
                + 01 234 567 89
              </div>
              <div>
                <v-icon color="#76ff03" size="18px" class="mr-3"
                  >fa-print</v-icon
                >
                + 98 765 432 10
              </div>
            </v-flex>
          </v-layout>
          <strong> {{ new Date().getFullYear() }} — Vuetify </strong>
        </v-card-text>
      </v-card>
    </v-footer>
  </v-app>
</template>
<script>
export default {
  data: () => ({
    icons: [
      "fab fa-facebook",
      "fab fa-twitter",
      "fab fa-google-plus",
      "fab fa-linkedin",
      "fab fa-instagram"
    ],
    rows: [
      {
        title: "Company Name",
        children: [
          "Here you can use rows and columns here to organize your footer content. Lorem ipsum dolor sit amet, consectetur adipisicing elit"
        ]
      },
      {
        title: "Produts",
        children: [
          "MDBootstrap",
          "MDWordPress",
          "BrandFlow",
          "BootstrapAngular"
        ]
      },
      {
        title: "Useful Links",
        children: [
          "Your account",
          "Become an Affiliate",
          "Shipping Rates",
          "Helper"
        ]
      }
    ]
  })
};
</script>
<style scoped>
strong {
  color: #76ff03;
}
.toolbar-item {
  color: #76ff03;
}
</style

>

Ответы [ 2 ]

1 голос
/ 20 января 2020

По умолчанию, если содержимое HTML больше окна, браузер создаст полосы прокрутки, а если оно меньше окна, прокрутки не будет. Тем не менее, я не думаю, что это то, что вы действительно просите. Я думаю, что вы пытаетесь изменить сам размер окна.


Я начну с того, что очень плохая практика - изменять размер окна браузера пользователя . Вместо этого вам следует поработать над тем, чтобы ваш контент подходил.

При этом Vue. js и Vuetify основаны на Javascript, и вам потребуется написать несколько пользовательских JS для изменения размера. окно браузера. Значение по умолчанию overflow для тега <body> (да, оно существует в приложении Vue) позаботится о прокрутке ...

window.resizeTo(width, height);

Должен вызываться после того, как Vue отобразит содержимое на экран, так что внутри Vue Монтируемый хук жизненного цикла .

Теперь я предполагаю, что высота содержимого меняется, так что вы захотите получить высоту Vue app дел.

var newHeight = document.getElementById('app').innerHeight()

Вы также хотите получить размер экрана, чтобы окно не было больше экрана. Вы можете получить эту высоту от объекта screen.

var screenHeight = window.screen.height

так

if(newHeight < screenHeight){
   window.resizeTo('800px', newHeight);
} else {
   window.resizeTo('800px', screenHeight);
}

Прежде чем сделать это

Вы должны знать, что самые современные браузеры ЗАБЛОКИРУЮТ функцию window.resizeTo(), поэтому вы снова должны найти другое решение проблемы.

0 голосов
/ 20 января 2020

Вы можете вложить свой контент в другой элемент div. Если max-height вашего внутреннего div равна высоте его контейнера, полоса прокрутки никогда не появится. если вы хотите увидеть полосу прокрутки, используйте это.

.scrollDiv {
    height:auto;
    max-height:150%;
    overflow:auto;   
}
...