使用Quasar设计Material和IOS风格的响应式网站
栏目: CSS · 发布时间: 8个月前
来源: segmentfault.com
本文转载自:https://segmentfault.com/a/1190000018332068,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。
Quasar
Quasar
是一款基于 Vue.js
开发的 UI
框架,可以让你轻松构建网站简洁明快的界面,更重要的是它还能让你轻松做好 RWD
(响应式网站设计),除此之外还能帮助你加上 PWA
,使你的网页变成手机上的 App
。
以下内容来自官网 Quasar Framework ,概括了 Quasar
的主要特点。
Quasar
是 MIT
许可的开源框架(基于 Vue ),可帮助 Web
开发人员创建:
- 响应式网站
PWA
- 通过
Apache Cordova
构建移动App
- 多平台桌面应用程序(使用
Electron
)
选择Quasar的5个理由
- 内建了
Material
及IOS
两种主题 - 组件均内建
RWD
快速响应 - 多样的基础
UI
组件库 - 自带了
Vuex
、VueRouter
、Vuei18n
(多国语系) - 强大的部署工具
安装指南
首先安装 Node.js
和 vue-cli
,具体安装方法查看官网资料。
然后安装 Quasar
, npm install -g quasar-cli
。
最后搭建项目: quasar init
取代 main.js
的 quasar.config.js
设置文件:
- 引用Quasar内建的组件,可以不用在每个地方
import components
i18n
设置多国语系icons
移除注释即可使用开发模式
下的HTTPS以及port
设置CSS
动画设置- 其他外部插件的设置
PWA
、manifest
等设置
quasar.config.js
plugins
以前在 Vue
安装其他的 plugin
会在 main.js
里引入,而在 Quasar
就会取代 main.js
成为全部配置文件。
css
CSS的引入都会放在这个文件,默认的位置 /src/css
,所需的CSS库已经准备好,可以直接使用。
extra
这里是设置是否引入 quasar-extras 的内容。
Package | name | 说明 |
---|---|---|
Roboto Font | roboto-font |
Material主题的建议字体 |
Roboto Font Latin Extended | roboto-font-latin-ext |
Material主题的建议字体 |
Material Icons | material-icons |
Material风格的 icon |
MDI (Material Design Icons) | mdi |
Material风格的 icon 扩展 |
Font Awesome | fontawesome |
自由选择 icon |
Ionicons | ionicons |
ionicons 的 icon |
Animate.css | animations |
网页组件动画 |
scopeHoiting
默认 true
,用来提升 webpack
运行时的性能
VueRouterMode
设置 Vue Router
的模式,有 history
、 hash
两种值。
vueCompiler
包含两种Vue的编译模式 vue runtime
+ compiler
,默认只有 runtime-only
运行时编译
gzip
使网站支持 gzip
的格式。
analyze
在 build
时会运行 webpack-bundle-analyzer
工具。
extractCSS
提取CSS到文件中。 VueLoader
extendWebpack
在 dev
模式中 服务器 的设置。
https port
设置成指定的 port
,当quasar在运行 dev
模式时,遇到相同的 port
时会自己再 +1
。
open
是否在 dev
指令执行完成后,自动开启此网站的分页在浏览器上。
Layout
quasar dev
打开初始页面,页面的 header
和 drawer
都是在 layout/MyLayout.vue
里。
一些常用的属性:
属性 | 取值 | 说明 |
---|---|---|
side |
String |
有两个值 left , right ,决定要出现在左边还是右边 |
overlay |
Boolean |
设置侧边栏弹出时是挤压 q-page-container 还是直接盖在上面 |
content-style |
Object |
设置侧边栏的CSS |
content-class |
String/Object/Array |
设置侧边栏的 class |
mini |
Boolean |
把侧边栏缩小到只有 icon |
这里的CSS要用 Object
的方式传入。
:content-style="{color: 'red'}"
旅游网站-Header
演示项目:
- Toolbar
- ToolbarTitle
- Button
color="primary" text-color="primary" inverted> 好玩旅游网 slot="subtitle">WeFunWeb class="gt-xs"> class="q-mr-md" flat>精选景点 class="q-mr-md" flat>美食地图 class="q-mr-md" flat>夜宿晓行 class="q-mr-md" flat>夜宿晓行 class="q-mr-md" flat>注册 class="q-mr-md" flat>登录
Toolbar
color
Quasar内建色: color-palette
在 /src/css/themes/common.variables.styl
里面增加调色板的颜色。
inverted
让 背景色 变成 白色 ,然后使原来白色的文字变成设置的 背景色 。
glossy
加上玻璃效果
QToolbarTitle
gt-xs
用来设置显示像素高于 576px
的页面样式。
q-mr-md
mr
等于 margin-right
sm
就是 size
的值为 small
其他非外观的功能属性:
disable
,:disable="true"
时按钮禁用label
设置按钮的文字type
可以是button
、submit
、reset
其中一种loading
,值为true
显示读取中percentage
显示读取的圆圈,要跟loading
一起使用dark-percentage
用在亮色系的按钮上
List&ListItem
修改Drawer
v-model="rightDrawerOpen" content-class="bg-grey-10" side="right"
设置了 rightDrawerOpen
需要加到 data
里。
export default { name: 'MyLayout', data () { return { rightDrawerOpen: false } } }
手机端按钮
控制显示的 class
用 lt-sm
只要像素小于 sm(768px)
就会显示该区域。
设置List和 ListItem
使用Dark属性使得组件内容在暗色背景下更好显示
List中可用组件,这些组件需要自己去配置文件中自行引入。
QListHeader QItemSeparator QItem QItemSide QItemMain QItemTitle
旅游网站-Carousel页面轮播
建立新的首页
在 src/pages/
下新建 Index
文件夹,并在此文件夹下新建 Index.vue
作为首页,删除原来的 Index.vue
文件。
修改Vue Router
在 src/router/routers.js
修改 Index.vue
的路径。
建立轮播的区块
在 src/pages/Index
下新建 SectionCarousel.vue
,并在 Index.vue
中引入。
然后再 template
下的 q-page
中加入 section-carousel
开始写轮播
官方Carousel
在设置文件 quasa.config.js
中引入:
framework: {
components: [ 'QCarousel', 'QCarouselSlide', 'QCarouselControl' ... ], }
加入轮播的图片/页面
color="white" infinite arrows autoplay height="400px" > img-src="statics/images/papercut1.jpg"/> img-src="statics/images/papercut2.jpg"/>
加入文字区块
Quasar在 carousel
中有个子组件 QCarouselControl
用来自定义按钮在页面上。
根据官方文档的范例, QCarouselControl
要放在 QCarousel
的最后面,也就是 QCarouselSlide
的后面。
position="center" slot="control-nav" slot-scope="carousel" class="carouselInput">
在 q-carousel-control
中加入内容:
class="main"> class="title">新锐旅游网站
class="subtitle">您身边的好玩专家
发现周边好玩的地方,玩得快乐,玩得精彩。
加上CSS
调整手机版CSS
@media (min-width: 768px) { .carouselInput .title { font-size 48px } .carouselInput .subtitle { font-size 24px } } @media (max-width: 768px) { .carouselInput .title { font-size 24px } .carouselInput .subtitle { font-size 16px } }
旅游网站-搜索框
加入搜索框
input
首先到 quasar.config.js
中引入 QInput
framework: { components: ['QInput'] }
在 最后绑定 使用 Flex CSS 调整组件长度。 引入 加入 在 引入 在 使用 设配手机端,在CSS底部加入: 解决在手机像素下原来 列表类直接用 在 主要使用了 具体代码: SectionCarousel.vue 在 在 卡片内的内容都会大量重复,所以直接把卡片独立成一个组件。 在 在 卡片主要分成三个部分: 在 继续补上 评分 和 地标 的 让 新增一个 在 要进行页面导航/切换需要用到Vue Router。 在 在 视差(Parallax) 在 {{ localData.title }} 按照8格+4格进行排版: CSS补上左右 这里要用Quasar的面包屑 BreadCrumbs 组件。 在 这里按照 引入 评分组件 Rating 表单字段(Field) Field的组件有 在 Chips Input 这里的用法通常都是在组件中加入 引入组件 复选框(Checkbox) 在 复选框需要绑定数据类型为 切换键Toggle 在 选项组option-group 把选项写进一个 每一步都是一样的,在 时间日期输入框Datetime,有Material和IOS两种风格。 有两个组件需要引入,一个是输入时显示,一个是默认就是显示的。分别为: 日期时间输入 Datetime Input 日期时间选择器 Datetime Picker 编辑器(WYSIWYG) 在 主要设置页面的属性有三个: 旋转按钮(Knob) 在 操作表(ActionSheet) 在 跟上面的操作基本上一样,只是能够多监听 基本跟上面的Action Sheet一样的操作方法。 在配置文件中引入 模态框(Modal) 引入 使用按钮或是 自由行·出国度假 泰国、首尔、珠海、九寨沟 最小窗口 设置 控制打开关闭窗口的一些方法,要搭配 通知框(Notify) Ajax栏(Ajax Bar) 在 因为在每个页面都会用到,所以放在最上层 内部加载(Inner Loading) 使用InnerLoading时会作用在 CSS间距类CSS Spacing Classes 类型 总共有7种选择,除了基本的 有 CSS阴影(立面图)CSS Shadows 可视范围CSS Visibility CSS定位类CSS Positioning Classes 调色板(Color Palette) 在 这里 多国语系(I18n) 在 Quasar的切换语系不像是传统的 Vue-I18n在 {{$t('apple')}}q-input
内容:
inverted
显示 背景color
主题颜色after
用来显示输入框前后 icon
v-model="search"
,此时需要在 data
中添加 value
值,否则会报错。data() {
return {
search: ''
}
}
调整排版
自动填入
autocomplete
QAutocomplete
组件:framework: {
components: ['QAutocomplete']
}
q-autocomplete
:
static-data
field
list
设置静态数据
countries: [
{label: '广州市', icon: 'fas fa-map-marker-alt'}, {label: '深圳市', icon: 'fas fa-map-marker-alt'}, {label: '珠海市', icon: 'fas fa-map-marker-alt'}, {label: '[网美景点]香山公园,秋季赏枫胜地', stamp: '北京市'}, {label: '珠海长隆[海豚剧场]精彩不容错过!精彩变身演出抢先看', stamp: '珠海,长隆', rightTextColor: 'pink-13'} ]
自定义过滤器
filter
q-autocomplete
中加入 filter
:lodash
处理 filter
。旅游网站-Popover弹出框
加入Popover组件
quasar.config.js
中引入 QPopover
。 Popoverno-focus
fit
v-show="!search"
内容排版
FlexCSS
来进行排版。@media (max-width: 576px) {
.viewList {
width: 280px
}
}
Popover
不能自动 fix
的问。这里应该是小于Popover的 fix
的 最小宽度 。设置内容(List&Item)
list
做最快。加入右侧Icon及文字
src/components
下新建 LIcon.vue
,提升组件复用。q-icon
来引入 Font Awesome 的 icon
。在原来的页面引入子组件
旅游网站-Cards卡片
建立并引入第二个区块
src/pages/Index
下新建 SectionCards.vue
组件,用来作为卡片区块。Index.vue
中引入 SectionCards.vue
。区块内版面规划
制作卡片
src/components/
下新建一个 LCard.vue
。quasar.config.js
中引入卡片组件 Cardsframework: {
components: [ 'QCard', 'QCardTitle', 'QCardMain', 'QCardMedia', 'QCardSeparator', 'QCardActions' ] }
q-card-media
q-card-title
q-card-main
q-card-actions
q-card-separator
SectionCards.vue
中引入 LCard.vue
。import LCard from 'src/components/LCard.vue' export default { components:{ LCard }, }
加上Icon
Icon
。让LCard的文字能从父组件引入
LCard.vue
能够动态获取数据:
:src="image"/>
在SectionCards设置数据
data
数据 monthBestList
,然后在 template
模板中使用 v-for
获取数据并显示。 v-for="(data,index) in monthBestList">
调整CSS及layout
旅游网站-制作景点详情页
src/pages
下新建 place
文件夹,并在此文件夹下新建 Index.vue
作为文章的主要页面。设置Vue Router
router/routes.js
中加入导航:const routes = [ { path: '/', component: () => import('layouts/MyLayout.vue'), children: [ {path: '', component: () => import('pages/Index')}, {path: 'Place', component: () => import('pages/Place')} ] } ];
http://localhost:8080/#/place
中查看效果。加入视差(Parallax)组件
quasar.config.js
中引入 QParallax
组件。
主题部分的页面排版
margin 5%
让页面看起来不会太满。.place-main {
margin-left 5%
margin-right 5%
}
设置左边画面
quasar.config.js
中引入:'QBreadcrumbs',
'QBreadcrumbsEl',
加上景点信息及评分的排版
8格+4格
设定,左侧栏要设为文字靠右对齐。加上景点信息
LIcon.vue
图标组件:
... 加上评分
表单组件-Field
QInput
、 QSeclet
、 QDatetime
、 QChipsInput
引入组件
quasar.config.js
中引入组件基本范例
label
设置标题文字icon
设置标题的 icon
icon-color
设置标题 icon
的颜色helper
组件地下的辅助文字error
控制组件在错误时会变成红色警示error-label
错误时会显示的文字warning
控制组件是否为警告状态warning-label
同 error-label
count
显示目前输入多少文字inset
用来为没有 icon/label
的栏位留空orientation
组件的排列方向(水平 horizontal
/垂直 vertical
)label-width
文字区块的宽度(以 12
格宽度划分)假设文字的宽度要和输入一样长,则设定为 6
dark
是文字反白,适用在暗色背景下表单组件-Chips Input
export default {
data() {
return {
model: []
}
}
}
外观属性
chips-color
改变 chips
的颜色chips-bg-color
改变 chips
的背景颜色add-icon
替换输入时显示在右边的 enter
按钮 icon
基本属性
prefix
加入前缀文字(不影响 array
内的值)suffix
加入后缀文字,可以跟前缀一起用hide-underline
移除原本输入框的底线no-parent-field
如果外面套有QField,可以避免跟QField的效果连结upper-case
自动转大写lower-case
自动转小写大部分组件都会重复的基本属性
float-label
悬浮标题stack-label
固定式标题color
组件颜色inverted
是否有背景色inverted-light
改善亮色背景下组件的显示dark
改善暗色背景下组件的显示error
错误warning
警告disable
跟 readonly
类似,但是会有灰键效果事件属性
@input(newVal)
@change(newVal) @clear(clearVal) @duplicate(val) @add(val) @remove({index, value})
方法属性(Vue Methods)
red
属性,然后再其他地方使用 this.$refs
来对这些组件进行操作。add(value)
remove(index)
focus()
select()
clear()
addSomething() {
this.$refs.myChipInput.add('Hello Quasar')
}
表单组件-Radio
QRadio
, 单选框(Radio)与QField一起使用
基本属性
val
存储绑定变量的值label
组件上的文字left-label
设定为 true
时,文字会改变显示在选项的左边checked-icon
改变选取时的iconunchecked-icon
改变未选取时的iconcolor
改变组件的颜色keep-color
没选取时也会有颜色(默认是灰色)readonly
只读属性disable
禁用dark
在暗色背景时,凸显组件文字no-focus
不会触发聚焦事件基本事件
@input
@blur
@focus
表单组件-Checkbox
引入组件
quasai.config.js
中引入 QCheckbox
。Array
,也需要和 QField
一起使用。基本属性
val
数值,加入到 v-model
绑定的变量中true-value
如果 model
不是数组,在选取时会给 model
值 true
,用来取代 true
false-value
同上解析indeterminate-value
用来替换 null
toggle-indeterminate
使点击可以让状态在以上三个中转换表单组件-Toggle
引入组件
quasar.config.js
中引入 QToggle
基本属性
val
, v-model
是 Array
,会加在 Array
内icon
如果底下两个( checke-icon
、 unchecked-icon
)icon 会被覆盖掉表单组件-Option Group
Array
中,然后直接用 v-for
全部渲染出来。引入组件
quasar.config.js
中引入 QOptionGroup
。基本范例
CheckBox
toggle
、 radio
和 checkbox
类似,只需要修改 type
属性值即可表单组件-Datetime
引入组件
framework: {
components: ['QDatetime']
}
framework: {
components: ['QDatetimePicker']
}
基本操作
// Datetime Input
<q-datetime v-model="model" type="date"/> // Datetime Picker <q-datetime-picker v-model="model" type="date"/>
基本属性
type
,一共有三个值,默认是 date
date
time
datetime
minimal
,不显示标题min max
,设置能够选择的日期时间范围
format-model
存储的时间格式,有四种选择:auto
date
number
string
format24h
设为24时制的时钟基本方法
Input
show()
hide()
toggle()
clear()
Picker
setYear(val)
setMonth(val) setDay(val) setHour(val) setMinute(val) setView(val) clear()
表单组件-Editor
内建的文章编辑器Editor
quasar.config.js
中引入 QEditor
组件。
Toolbar
Definitions
label
要显示的文字icon
要显示的icontip
小提示cmd
如果不想用默认的功能名称,可以用这个绑回你要的功能handler
自定义 methods
的 function
名称save: {
label:'保存',
handler: functionName
}
disable
禁用
Font
基本事件
@input
@fullscreen(true/false)
表单组件-Knob旋转按钮
quasar.config.js
中引入 QKnob
组件。属性
size
调整组件的大小,默认 120px
step
数值的间距decimals
小数点显示的位数min max
最小值和最大值color
、 track-color
颜色、未到达的旋转轴颜色line-width
线条的宽度,默认 6px
事件
@input(val)
@change(val)
@drag-value(val)
弹窗-Action Sheet
quasar.config.js
中引入 ActionSheet
组件,有Material和IOS两种风格。pluginS
形式framework: {
plugins: ['ActionSheet']
}
components
形式framework: {
components: ['QActionSheet']
}
作为Plugins的使用方法
Vue内
this.$q.actionSheet(configObj)
Vue外
import { ActionSheet } from 'quasar';
ActionSheet.create(configObj)
this.$q.actionSheet({ title: '操作选择', grid: true, //使用格状排版(一排三个) dismissLabel: '取消', //取消按钮的文字 只有IOS主题下可用 默认是cancel actions: [ { label: '抓虫', color: 'green', icon: 'fas fa-bug', handler() { console.log('抓虫大师') } }, { label: '分享到微博', color: 'blue', icon: 'fas fa-weibo' }, { label: '请人帮忙', color: 'black', icon: 'fas fa-alipay' } ] }).then(action => {}).watch(() => {});
作为Component的使用方法
@show
和 @hide
时间。事件
@ok
@cancel
@show
@hide
@escape-key
弹窗-Dialog
this.$q.dialog({ title: '选择主菜', message: '主厨精心特制主餐请选择', color: 'red-13', ok: true, cancel: true, preventClose: true, //设置为true,除非按cancel或是ok,不然不会关闭窗口 noBackdropDismiss: false, //按空白的地方不会关闭窗口 noEscDismiss: false, //按Esc不会关闭窗口 stackButtons: false, //为true时会将ok/cancel按钮垂直排列 position: 'top', //设置窗口显示的位置 //使用input prompt: { mode: '顶级和牛帝王蟹', type: 'text' }, //使用option options:{ type:'radio', model:'beef', //默认的选项 items:[ {label:'绝对不加热生牛排',value:'beef'}, {label:'极地冰山沙漠鲔鱼',value:'tuna'}, {label:'超级漆黑山洞野猪肉',value:'pork'} ] } }).then(action => {}).watch(() => {});
作为Component的使用方法
QDialog
组件。弹窗-Modal
QModal
组件,另外加入 directives
的 CloseOverlay
。method
将 modal
设为 true
才能打开 modal
。全页显示
想去哪里玩?
minimized
position
后会自动清除 content-css
定义的 css
,所以要在里面多一个 div
来做 padding
。基本属性
minimized
, maximized
设置窗口最小化或是最大化no-route-dismiss
、 no-esc-dismiss
、 no-backdrop-dismiss
分别为控制换页、按下Esc、按黑色背景是否会触发开闭事件content-css
, content-classes
,Modal内的CSS及class,在设置了 position
后会无效position
设置弹窗出来的位置position-classes
设置 position
后就要用这个来设 class
,默认是 items-center
, justify-center
transition
, enter-class
, leave-class
可以用自定义的CSS来做出场的动画no-refocus
是否让关闭窗口时聚焦回到打开窗口前的最后一个组件Vue方法
this.$refs.窗口名称
来使用。show
hide
toggle
弹窗-Notify
this.$q.notify({ message: '已保存', timeout: 5000, // type:'positive', //自带选项 color: 'grey', textColor: 'blue', icon: 'fas fa-warning', avatar: 'statics/images', //这个跟icon二选一 detail: '', position: 'top', actions: [ { label: '', icon: '', noDismiss: true, handler() { console.log('hello world'); } } ], onDismiss() { console.log('warning'); } });
在Vue外使用
import {Notify} from 'quasar'; Notify.create('已保存'); //方式二 Notify.create({ message: '已保存' });
进度条-Ajax Bar&Loading Bar
quasar.config.js
中引入 QAjaxBar
组件。基本使用
Ajax Bar
App.vue
。
position
设置组件位置size
载入条的宽度,默认 4px
color
默认 red
reverse
使进度方向相反基本事件
@start
@stop
基本方法
start()
stop()
Loading Bar
进度条-Inner Loading
注意事项
relative-position
这个 class
下,如果没有添加这个会变成整页。基本操作
index.vue
MyField.vue
效果
CSS Helpers
空间排版CSS Spacing Classes
基本范例
q-ma-xs
q
作为前缀ma
:
m
类型, margin
a
方向, all
xs
范围的大小跟 flex css
一致语法
q-[类型][方向]-[大小]
m
( margin
向外扩)p
( padding
向内扩)t(top)
, r(right)
, l(left)
、 b(bottom)
, a(all)
之外,还有两种 x(left+right)
, y(top+bottom)
。
none
, auto
(只能用在 margin
), xs
, sm
, md
, lg
, xl
。阴影CSS Shadows
可视范围CSS Visibility
位置排版CSS Positioning Classes
自定义颜色
src/css/app.styl
文件中自定义全局CSS新增颜色
.text-redsp
color: #D03F38
.bg-redsp
background: #D03F38
text
和 bg
需要同时设定。使用
多国语系I18n
Quasar的I18n
quasar.config.js
中设置:framework: {
i18n: 'zh-hans'
}
读取当前语系
let lang = this.#q.i18n.getLocal()
动态设置
vue-i18n
直接换就能用,必须重新载入新语系的语系档。
Vue-I18n
src/i18n
里面,参照已经设定的内容添加自己想要的语系。应用
动态切换语系
methods: {
setLang() {
this.$i18m.local = 'zh-CN'
}
}
以上所述就是小编给大家介绍的《使用Quasar设计Material和IOS风格的响应式网站》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!