关键词:
有时会出现一个图表需要同时在PC、移动端上展现的场景。这需要 ECharts 内部组件随着容器尺寸变化而变化的能力。为了解决这个问题,ECharts 完善了组件的定位设置,并且实现了类似 CSS Media Query 的自适应能力。
ECharts组件的定位和布局
大部分『组件』和『系列』会遵循两种定位方式:
一、left/right/top/bottom/width/height 定位方式:
这六个量中,每个量都可以是『绝对值』或者『百分比』或者『位置描述』。
-
绝对值 : 单位是浏览器像素(px),用
number
形式书写(不写单位)。例如{left: 23, height: 400}
。 -
百分比 : 表示占 DOM 容器高宽的百分之多少,用
string
形式书写。例如{right: ‘30%‘, bottom: ‘40%‘}
。 -
位置描述 :可以设置
left: ‘center‘
,表示水平居中。 可以设置top: ‘middle‘
,表示垂直居中。
这六个量的概念,和 CSS 中六个量的概念类似:
- left:距离 DOM 容器左边界的距离。right:距离 DOM 容器右边界的距离。top:距离 DOM 容器上边界的距离。bottom:距离 DOM 容器下边界的距离。width:宽度。
height:高度。
在横向,left
、right
、width
三个量中,只需两个量有值即可,因为任两个量可以决定组件的位置和大小。 纵向,top
、bottom
、height
三个量,和横向类同不赘述
二、center
/ radius
定位方式:
-
center
是一个数组,表示
[x, y]
,其中,x
、y
可以是『绝对值』或者『百分比』,含义和前述相同 ?。 -
radius
是一个数组,表示
[内半径, 外半径]
,其中,内外半径可以是『绝对值』或者『百分比』,含义和前述相同。在自适应容器大小时,百分比设置是很有用的。
横向(horizontal)和纵向(vertical)
例如,在细长的移动端屏幕上,可能适合使用『纵向布局』;在PC宽屏上,可能适合使用『横向布局』。横纵向布局的设置,一般在『组件』或者『系列』的 orient
或者 layout
配置项上,设置为 ‘horizontal‘
或者 ‘vertical‘
。
Media Query
Media Query 提供了『随着容器尺寸改变而改变』的能力
要在 option 中设置 Media Query 须遵循如下格式:
option = {
baseOption: { // 这里是基本的『原子option』。
title: {...},
legend: {...},
series: [{...}, {...}, ...],
...
},
media: [ // 这里定义了 media query 的逐条规则。
{
query: {...}, // 这里写规则。
option: { // 这里写此规则满足下的option。
legend: {...},
...
}
},
{
query: {...}, // 第二个规则。
option: { // 第二个规则对应的option。
legend: {...},
...
}
},
{ // 这条里没有写规则,表示『默认』,
option: { // 即所有规则都不满足时,采纳这个option。
legend: {...},
...
}
}
]
};
上面的例子中,baseOption
、以及 media
每个 option 都是『原子 option』,即普通的含有各组件、系列定义的 option。
query:
每个 query
类似于这样:
{
minWidth: 200,
maxHeight: 300,
minAspectRatio: 1.3
}
现在支持三个属性:width
、height
、aspectRatio
(长宽比)。每个属性都可以加上 min
或 max
前缀。比如,minWidth: 200
表示『大于等于200px宽度』。两个属性一起写表示『并且』,比如:{minWidth: 200, maxHeight: 300}
表示『大于等于200px宽度,并且小于等于300px高度』。
option:
media
中的 option 既然是『原子 option』,理论上可以写任何 option 的配置项。但是一般我们只写跟布局定位相关的,例如截取上面例子中的一部分 query option:
media: [ ..., { query: { maxAspectRatio: 1 // 当长宽比小于1时。 }, option: { legend: { // legend 放在底部中间。 right: ‘center‘, bottom: 0, orient: ‘horizontal‘ // legend 横向布局。 }, series: [ // 两个饼图左右布局。 { radius: [20, ‘50%‘], center: [‘50%‘, ‘30%‘] }, { radius: [30, ‘50%‘], center: [‘50%‘, ‘70%‘] } ] } },
{
query: {
maxWidth: 500 // 当容器宽度小于 500 时。
},
option: {
legend: {
right: 10, // legend 放置在右侧中间。
top: ‘15%‘,
orient: ‘vertical‘ // 纵向布局。
},
series: [ // 两个饼图上下布局。
{
radius: [20, ‘50%‘],
center: [‘50%‘, ‘30%‘]
},
{
radius: [30, ‘50%‘],
center: [‘50%‘, ‘75%‘]
}
]
}
},
...
]
多个 query 被满足时的优先级:
注意,可以有多个 query
同时被满足,会都被 mergeOption
,定义在后的后被 merge(即优先级更高)。
默认 query:
如果 media
中有某项不写 query
,则表示『默认值』,即所有规则都不满足时,采纳这个option。
容器大小实时变化时的注意事项:
在不少情况下,并不需要容器DOM节点任意随着拖拽变化大小,而是只是根据不同终端设置几个典型尺寸。
但是如果容器DOM节点需要能任意随着拖拽变化大小,那么目前使用时需要注意这件事:某个配置项,如果在某一个 query option
中出现,那么在其他 query option
中也必须出现,否则不能够回归到原来的状态。(left/right/top/bottom/width/height
不受这个限制。)
移动端自适应
此代码加到head标签里面,加入后可随不同机型的移动设备,设置html的fontSize大小,这样子用rem可作为解决移动端自适应的方案 !function(N,M){functionL(){vara=I.getBoundingClientRect().width;a/F>750&&(a=750*F);vard=a/10;I.style.fontSize=d+"px 查看详情
移动端自适应字体大小
设置1rem=100pxwindow.addEventListener((‘orientationchange‘inwindow?‘orientationchange‘:‘resize‘),(function(){functionc(){varhtml=document.documentElement;html.style.fontSize=100*(html.clientWidth/375)+‘ 查看详情
移动端自适应方案(代码片段)
...显示精度问题一像素显示问题,缩放导致的像素适应问题移动端的自适应问题http://www.cnblogs.com/520yan...http://www.cnblogs.com/520yan...https://mp.weixin.qq.com/s?__...https://github.com/amfe/artic...1、 查看详情
移动端自适应解决方案
实现移动端自适应大概的几种方法:1.固定宽度,使用一个模式加上少许的媒体查询;2.使用flexbox解决;3.使用百分比加媒体查询;4.使用rem。一、如果是简单app,排版不管分辨率怎么变,关键元素宽高和位置固定,只是元素容器... 查看详情
移动端自适应布局方案尝试
原文地址:移动端自适应布局方案尝试问题刚开始接触移动端H5页面的时候最困扰的几个问题是:6或6p上明明是1px的边框怎么就成了2px或3px辣么粗!图片,div等如何等比自适应设计图后来慢慢知道了第一点是由于retina屏幕下设备... 查看详情
移动端自适应rem的设置
...果有层层嵌套的话会导致这个值非常大或者非常小。在写移动端页面的时候为了使页面能够适应多种尺寸的移动设备大小,通常会用rem来表示各个元素的大小。rem:fontsizeoftherootelement,即相对于根元素字体的大小。因此,在开发... 查看详情
vue-cli+postcss实现移动端自适应
基于vue-cli3创建一个移动端项目vueaddvue-h5cdvue-h5npmrunserve安装postcss相关插件由于vue-cli已经内置了postcss,只需要安装相关插件,就可以实现vw/vh自适应布局。npmi--savepostcss-aspect-ratio-minipostcss-px-to-viewportpostcss-write-svgpostcss-cssnext 查看详情
metaviewport设置移动端自适应
1、viewport移动设备上的viewport是设备屏幕上用来显示网页的那部分区域,再具体一点就是浏览器上用来显示网页的那部分区域,但viewport又不局限于浏览器可视区域的大小,它可能比浏览器的可视区域大,也可能比浏览器的可视... 查看详情
移动端自适应处理页面布局
处理页面大概会有若干种方案:第一种就是使用bootstrap;自己使用自适应单位常用的rem,em,及别人封装好的插件flexble.js;在使用flexble.js;时发现两个问题,高度没有很好的展现,有时会比设计稿低,会造成页面扁平不好看,第二种就... 查看详情
浅谈移动端的自适应问题——响应式rem/em利用js动态实现移动端自适应
随着3G的普及,越来越多的人使用手机上网。移动设备正超过桌面设备,成为访问互联网的最常见终端。于是,网页设计师不得不面对一个难题:如何才能在不同大小的设备上呈现同样的网页?本篇文章将讲述自适应网页设... 查看详情
viewport原理和使用和设置移动端自适应的方法
viewport原理和使用和设置移动端自适应的方法HTML中:<metaname="viewport"content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"> 该meta标签的作用是让当前viewport的宽度等于设备的宽度,同时不允许用户手动缩放。当然m... 查看详情
vue3.0+vite实现移动端自适应布局
参考技术A然后再main.ts中引入amfe-flexible最后启动项目就会发现px已经是自适应的单位,如果想用原来的px只需改成大写的PX单位即可 查看详情
移动端自适应解决方案
http://dudodo.cc/2017/06/01/%E7%A7%BB%E5%8A%A8%E7%AB%AF%E8%87%AA%E9%80%82%E5%BA%94%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/#more 设计稿640640px=6.4rem100px=1rem10px=0.1rem1px=0.01rem (functio 查看详情
处理移动端自适应布局的方法-calc()与vw
在处理移动端自适应布局时,目前前端最流行的方法应该就是使用媒体查询,来设置HTML的字体大小,然后用rem为单位对Dom的宽高进行设置,这个方法的优势在于兼容性方面很好,劣势则在于当前市场上不同的机型太多,尺... 查看详情
vw实现移动端自适应页面
一、设备支持情况测试网站:https://caniuse.com/#search=vwcss3test:https://airen.github.io/css3test/,https://github.com/airen/css3test1、PC端2、mobile端二、vw的不足比如当容器使用vw单位,margin采用px单位时,很容易造成整体宽度超过100vw,从而影响... 查看详情
移动端自适应布局方案尝试
问题刚开始接触移动端H5页面的时候最困扰的几个问题是:6或6p上明明是1px的边框怎么就成了2px或3px辣么粗!图片,div等如何等比自适应设计图后来慢慢知道了第一点是由于retina屏幕下设备像素比的问题造成,第二点知道了单位r... 查看详情
主机排行网重大更新,移动端自适应(代码片段)
此前有网友反馈,主机排行网在移动端表现太丑了,希望我改改,今天周末,我专门花了两个多小时来好好把移动短整治了一下,比以前好看多了。对比改变对比一下吧,下图是前版本的主机排行网:新版效果:本次修改的过程... 查看详情
vuecli3.0安装配置移动端自适应插件(postcss-pxtorem)
1.下载lib-flexible,并在main.js中引用npmilib-flexible--save2.安装自适应插件npmipostcss-pxtorem--save或npmipostcss-px-to-viewport--save3.修改vue.config.js配置文件(若项目中没有新建一个)module.export={lintOnSave:true,css:{loaderOptions 查看详情