VuetifyJs เป็นเฟรมเวิร์ก Material Design ที่ยอดเยี่ยมสำหรับ VueJs มันมาพร้อมกับส่วนประกอบที่พร้อมใช้งานมากมาย “แชมป์เปี้ยนที่ซ่อนอยู่” คือการสร้างระบบตอบสนอง นี่ไม่ใช่ส่วนประกอบ แต่เป็นคุณลักษณะที่ประกาศในส่วนประกอบบางส่วน ฉันจะแสดงให้คุณเห็นในบทความนี้ถึงวิธีสร้างข้อความ แบบฟอร์ม รูปภาพ และเกือบทุกอย่างที่ตอบสนองได้ ในภายหลังโดยใช้ออบเจ็กต์เบรกพอยต์ ดังนั้นหากคุณต้องการสร้างเว็บแอปพลิเคชันที่เหมาะกับวิวพอร์ตทุกขนาด VuetifyJs และแน่นอนว่าบทความนี้เหมาะสำหรับคุณ ;)
ฉันคิดว่าคุณใช้งานโปรเจ็กต์ VueJs กับ VuetifyJs อยู่ ดังนั้นฉันจึงข้ามขั้นตอนการสร้างโปรเจ็กต์นั้นไป หากคุณต้องการลองใช้บทช่วยสอนนี้ในการตั้งค่าใหม่ โปรดอ่าน บทช่วยสอน Vuetify Quick Start อีกประเด็นหนึ่ง: ฉันใช้ typescript (และฉันสามารถแนะนำสิ่งนี้ได้) หากคุณใช้ Javascript ส่วนประกอบของคุณอาจแตกต่างออกไปเล็กน้อย แต่บทความนี้เราแทบไม่มีการเขียนโค้ดเลย ดังนั้นจึงไม่มีปัญหา
เบรกพอยท์
เบรกพอยต์ในแอปพลิเคชันเว็บแบบตอบสนองแสดงถึงขนาดมุมมองที่แตกต่างกัน แน่นอนว่ามีสมาร์ทโฟนที่มีขนาดอื่นนอกเหนือจากแท็บเล็ต โน้ตบุ๊ก หรือจอพีซีทั่วไปหรือหน้าจอกว้างพิเศษ เราในฐานะนักพัฒนาเว็บควรสร้างแอปพลิเคชันที่ทำงานบนทุกขนาดหน้าจอเป็นอย่างน้อย ฉันคิดว่ามันควรจะใช้งานได้และดูดีกับทุกขนาดหน้าจอ เพื่อให้บรรลุเป้าหมายนี้ ข้อมูลจำเพาะการออกแบบวัสดุจึงให้จุดพักแก่เรา หนึ่งรายการสำหรับอุปกรณ์แต่ละประเภท
ภาพหน้าจอด้านบนแสดงเบรกพอยท์วิวพอร์ตของดีไซน์ Material ระบบเบรกพอยต์นี้ถูกใช้อย่างหนักโดย VuetifyJs คุณสามารถตรวจสอบ "เอกสาร" เพื่อดูข้อมูลเพิ่มเติมได้
ข้อความตอบสนอง
คุณสมบัติข้อความตอบสนองบางอย่างมาพร้อมกับ Vuetify 2.3.0 ดังนั้นนกที่ตื่นเช้าอย่างน้อยหนึ่งตัวจะต้องใช้เวอร์ชันเบต้า
แล้วข้อความโต้ตอบคืออะไร? ขนาดข้อความขึ้นอยู่กับขนาดหน้าจอ หากคุณมีพาดหัวบนจอแสดงผลแบบกว้างพิเศษ ขนาดแบบอักษร 80px อาจดูดีกว่า 20px ในอีกด้านหนึ่ง — พาดหัวขนาด 80px สามารถทำลายการออกแบบทั้งหมดบนโทรศัพท์มือถือขนาดเล็กได้ ข้อความที่ตอบสนองจึงสมเหตุสมผลอย่างยิ่ง แน่นอนคุณสามารถทำได้ด้วยคำสั่ง css และสื่อ แต่ใน VuetifyJs นี่เป็นคุณสมบัติการประกาศที่พร้อมใช้งาน
รูปภาพด้านบนแสดงให้เห็นว่าส่วนหัวและแม้แต่ข้อความสามารถเปลี่ยนขนาดมุมมองได้อย่างไร ใน Vuetify คุณสามารถรับพฤติกรรมนี้ได้ง่ายๆ โดยการประกาศคลาสที่แตกต่างกันในองค์ประกอบข้อความของคุณ:
<template> <v-row class="pa-3"> <h1 class=" text-h4 [1] text-md-h2 [2] text-lg-h1 [2] text-xl-h1 [2] text-truncate" [3] >This is my heading</h1> <p class=" text--secondary text-caption text-sm-body-2 text-md-body-1 text-lg-body-1 text-xl-body-1 text-justify"> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut... </p> </v-row> </template> /// @/components/ResponsiveText.vue
คุณจะมีคลาสขนาดข้อความเริ่มต้น [1] ซึ่งครอบคลุมเบรกพอยต์ที่เล็กที่สุด (xs) เสมอ ค่าเริ่มต้นสามารถเขียนทับได้โดยใช้คลาสเบรกพอยต์สำหรับแต่ละเบรกพอยต์ [2] - หากคุณต้องการขนาดข้อความที่แตกต่างกันตามค่าเริ่มต้น รูปแบบจะเป็น text-[breakpoint]-[fontsize]
เสมอ โดยเฉพาะอย่างยิ่งในส่วนหัว เครื่องมือที่ยอดเยี่ยมคือ text-truncate
ซึ่งจะตัดข้อความออกหากไม่พอดีกับองค์ประกอบภายนอก
แบบฟอร์มตอบรับ
ปัญหาใหญ่อีกประการหนึ่งในการสร้างเว็บแอปพลิเคชันแบบตอบสนองคือแบบฟอร์ม ควรจัดเรียงตามขนาดมุมมอง ที่นี่ระบบกริดที่ยอดเยี่ยมสามารถแสดงจุดแข็งของมันได้ แน่นอนว่าระบบกริดไม่เพียงแต่มีประโยชน์ในการใช้แบบฟอร์มเท่านั้น แต่ยังเป็นกรณีทั่วไปสำหรับเว็บแอปพลิเคชันแบบตอบสนองอีกด้วย ดังนั้นฉันจึงใช้ตัวอย่างแบบฟอร์ม — มันจะทำงานเหมือนเดิมเสมอ ไม่ว่าคุณจะต้องการใส่อะไรลงบนหน้าจอก็ตาม
ระบบกริดประกอบด้วยแถวและคอลัมน์ ทุกแถว "เสมือน" มีคอลัมน์ "เสมือน" 12 คอลัมน์ ซึ่งให้ตารางจำนวนแถวตามต้องการ โดยแต่ละแถวมี 12 คอลัมน์ vuetify มีสององค์ประกอบ — v-row
และ v-column
สิ่งสำคัญคือต้องเข้าใจว่าคุณสามารถวาง v-row
และ v-column
ลงในระบบกริดได้ แต่ไม่จำเป็นต้องเท่ากับตารางคงที่ n ถึง 12
ฟิลด์ในภาพด้านบนล้วนตั้งชื่อด้วย R(ow)[number]C(olumn)[number] ดังนั้นคุณจะเห็นได้ว่าฟิลด์ต่างๆ เคลื่อนที่อย่างไรในระบบกริดในการเปลี่ยนขนาดมุมมอง เราสามารถดูแถวแบบฟอร์มแรก (R1C1, R1C2, R1C3) เพื่อให้สิ่งต่าง ๆ ชัดเจนยิ่งขึ้น บนหน้าจอขนาดใหญ่ แถวแรก (ซึ่งเท่ากับองค์ประกอบ v-row
) จะมีสามฟิลด์ในสามองค์ประกอบ v-col
v-col
แรกกระจายมากกว่า 6 คอลัมน์เสมือน ส่วนอีก 2 คอลัมน์มากกว่า 3 คอลัมน์แต่ละคอลัมน์ ดังนั้นพวกเขาจึงกระจายคอลัมน์เสมือนทั้งหมด 12 คอลัมน์
มาดูที่ภาพหน้าจอด้านล่างซ้ายกัน รูปร่างเดียวกัน ขนาดมุมมองที่ต่ำกว่า องค์ประกอบ v-col
แรกกระจายมากกว่า 12 คอลัมน์เสมือน ส่วนอีก 2 คอลัมน์มีมากกว่า 6 คอลัมน์แต่ละคอลัมน์ ดังนั้นองค์ประกอบ v-row
จึงต้องมีสองแถวถึง 12 คอลัมน์เสมือน ภาพหน้าจอด้านล่างขวาแสดงแบบฟอร์มเดียวกันในมุมมองที่เล็กมาก v-row
ต้องการแถวเสมือนสามแถวที่นี่ และแต่ละ v-col
กระจายไปทั่ว 12 คอลัมน์
คำถามคือ — ฉันจะรับพฤติกรรมนี้จาก VuetifyJs ได้อย่างไร โชคดีที่นี่เป็นส่วนที่ง่าย เช่นเดียวกับการเขียนจำนวนคอลัมน์เสมือนลงในแอตทริบิวต์เบรกพอยต์:
... <v-row> <v-col cols="12" md="6" lg="6" xl="6"> <v-text-field label="Field R1C1" ></v-text-field> </v-col> <v-col cols="12" sm="6" md="3" lg="3" xl="3"> <v-text-field label="Field R1C2" ></v-text-field> </v-col> <v-col cols="12" sm="6" md="3" lg="3" xl="3"> <v-text-field label="Field R1C3" ></v-text-field> </v-col> </v-row> ... /// @/components/ResponsiveForm.vue
มีแอตทริบิวต์เบรกพอยต์สำหรับเบรกพอยต์ดีไซน์ Material ทุกรายการ ยกเว้น xs
อันนี้ครอบคลุมโดยแอตทริบิวต์เริ่มต้น cols
ด้วยระบบกริด VuetifyJs คุณสามารถสร้างเลย์เอาต์ที่ตอบสนองได้ทรงพลังมากโดยไม่ต้องใช้โค้ด JavaScript เลย
ขนาดภาพที่ตอบสนอง
การตอบสนองของภาพมาจากความสามารถในการโหลดภาพขนาดและคุณภาพที่ดีที่สุดสำหรับอุปกรณ์ สำหรับสิ่งนี้ องค์ประกอบ img
นำเสนอแอตทริบิวต์ scrset
และ sizes
มีบทความดีๆ มากมายบนเว็บ ดังนั้นฉันจะไม่เขียนบทความอื่นอีก ข้อความสำหรับผู้ใช้ VuetifyJs คือ: คุณลักษณะทั้งสองนี้มีอยู่ในองค์ประกอบ v-img
เช่นกัน คุณจึงใช้สิ่งที่ตอบสนองแบบมาตรฐานพร้อมฟีเจอร์ที่ยอดเยี่ยม เช่น รูปภาพที่โหลดล่วงหน้าแบบขี้เกียจหรือแอตทริบิวต์ contain
ได้
... <v-img src="http://catify.de/.../village_1264.jpg" lazy-src="http://catify.de/.../village_blur.jpg" srcset="http://catify.de/.../village_600.jpg 600w, http://catify.de/.../village_960.jpg 960w, http://catify.de/.../village_1264.jpg 1264w, http://catify.de/.../village_1904.jpg 1904w, http://catify.de/.../village_2400.jpg 2400w" width="100%" ></v-img> ... /// @/components/ResponsiveImage.vue
ประเภทตอบสนอง - หรือ JavaScript
สำหรับความปรารถนาทุกประการในการตอบสนอง ที่ VuetifyJs ไม่ได้เติมเต็มในลักษณะที่ประกาศ พวกเขาให้ออบเจ็กต์เบรกพอยต์ที่ตอบสนองแก่คุณ สิ่งนี้สามารถใช้ในคุณสมบัติการคำนวณ วิธีการ หรือเกือบทุกที่ภายในบริบท VueJs:
this.$vuetify.breakpoint
โดยจะสนับสนุนคุณด้วยข้อมูลเกี่ยวกับเบรกพอยต์ปัจจุบัน เงื่อนไข มิติ ฯลฯ คุณสามารถดู "เอกสารประกอบ" เพื่อดูข้อมูลเพิ่มเติม ในตัวอย่างนี้ ฉันใช้ออบเจ็กต์นี้ เพื่อสลับจากไอคอนต่างๆ ในแถบแอปไปเป็นไอคอนเบอร์เกอร์ เพื่อเปิดเมนูที่ซ่อนอยู่ ทำได้ง่ายๆ ด้วยโค้ดบรรทัดเดียว [1]:
<script lang="ts"> import Vue from 'vue' import { Component } from "vue-property-decorator" @Component export default class ResponsiveActionIcons extends Vue { get shrink() { return this.$vuetify.breakpoint.smAndDown [1] } show() { console.log("show menu...") } } </script> /// @/components/ResponsiveActionIcons.vue
ตอนจบ
คุณสามารถค้นหาแหล่งที่มาของตัวอย่าง VuetifyJs ที่ตอบสนองของฉันได้ใน พื้นที่เก็บข้อมูล github ฉันหวังว่าคุณจะสนุกกับบทความนี้ กรุณาแสดงความคิดเห็นหากคุณมีคำถามใด ๆ หรือต้องการที่จะให้ข้อเสนอแนะ