断点

使用 Vuetify 的时候,你可以根据窗口的尺寸设定应用的布局。例如,我们可以使用特定的 grid 属性或者与指定的断点相关的助手类 (i.e. display) 设定布局。Vuetify 提供了 5 个预先定义的断点,你也可以根据自己的需要修改他们。

Material Design Viewport Breakpoints
DeviceCodeTypesRange
Extra smallxssmall to large handset< 600px
Smallsmsmall to medium tablet600px > < 960px
Mediummdlarge tablet to laptop960px > < 1264px
Largelgdesktop1264px > < 1904px
Extra largexl4k and ultra-wides> 1904px
* -16px on Desktop

Breakpoint object

  1. {
  2. // Breakpoints
  3. xs: boolean
  4. sm: boolean
  5. md: boolean
  6. lg: boolean
  7. xl: boolean
  8. // Conditionals
  9. xsOnly: boolean
  10. smOnly: boolean
  11. smAndDown: boolean
  12. smAndUp: boolean
  13. mdOnly: boolean
  14. mdAndDown: boolean
  15. mdAndUp: boolean
  16. lgOnly: boolean
  17. lgAndDown: boolean
  18. lgAndUp: boolean
  19. xlOnly: boolean
  20. // Current breakpoint name (e.g. 'md')
  21. name: string
  22. // Dimensions
  23. height: number
  24. width: number
  25. // Thresholds
  26. // Configurable through options
  27. {
  28. xs: number
  29. sm: number
  30. md: number
  31. lg: number
  32. }
  33. // Scrollbar
  34. scrollBarWidth: number
  35. }

Vuetify将有效的断点转换为应用程序内的可访问对象。这将允许您根据视口的大小应用特定的属性和特性。您可以通过$vuetify.breakpoint访问这个对象。

  1. <!-- Vue Component -->
  2. <script>
  3. export default {
  4. mounted () {
  5. console.log(this.$vuetify.breakpoint)
  6. },
  7. computed: {
  8. imageHeight () {
  9. switch (this.$vuetify.breakpoint.name) {
  10. case 'xs': return '220px'
  11. case 'sm': return '400px'
  12. case 'md': return '500px'
  13. case 'lg': return '600px'
  14. case 'xl': return '800px'
  15. }
  16. },
  17. },
  18. }
  19. </script>

用例

您可以定义自己的断点阈值像素值,但目前需要两个步骤:1. 要更新样式,您将必须覆盖 $grid-breakpoints SASS 变量(请参见 SASS variables)。 2. 若要在事物的 javascript 端使用相同的值,则必须在应用程序引导期间将它们传递给它们,如下所示:

  1. // src/plugins/vuetify.js
  2. import Vue from 'vue'
  3. import Vuetify from 'vuetify/lib'
  4. export default new Vuetify({
  5. breakpoint: {
  6. thresholds: {
  7. xs: 340,
  8. sm: 540,
  9. md: 800,
  10. lg: 1280,
  11. },
  12. scrollBarWidth: 24,
  13. },
  14. })

该对象包含与您已经习惯使用的栅格系统相同的语义属性。让我们尝试一个真实世界的例子。您有一个v-dialog组件,您想要在移动设备上转换成一个全屏对话框。通常情况下,您需要将视野大小绑定在观察者上,和/或在页面加载时进行检查。

  1. <!-- Vue Component -->
  2. <script>
  3. export default {
  4. data: () => ({
  5. isMobile: false,
  6. }),
  7. beforeDestroy () {
  8. if (typeof window !== 'undefined') {
  9. window.removeEventListener('resize', this.onResize, { passive: true })
  10. }
  11. },
  12. mounted () {
  13. this.onResize()
  14. window.addEventListener('resize', this.onResize, { passive: true })
  15. },
  16. methods: {
  17. onResize () {
  18. this.isMobile = window.innerWidth < 600
  19. },
  20. },
  21. }
  22. </script>

这是很多的样板文字。即使您选择使用内置的 v-resize 指令,仍然必须定义调整大小的方法。使用 breakpoint 对象,您可以完全跳过这个逻辑并重新构建您的应用程序。

  1. <!-- Vue Component -->
  2. <template>
  3. <v-dialog :fullscreen="$vuetify.breakpoint.xsOnly">
  4. ...
  5. </v-dialog>
  6. </template>