自适应网页

452 阅读1分钟

实现思路

字体自适应

  • 通过写js控制最大fontSize
  • 通过动态调整root的fontSize
  • 通过rem实现自适应

不声明过多的font-size:这是设计层面的问题,设计精良的页面不会有过多的font-size声明。

image.png 图片来源:www.bilibili.com/video/BV1ov…

通过媒体查询控制root的fontSize

参考antd-design源码

断点

// Media queries breakpoints
// @screen-xs and @screen-xs-min is not used in Grid
// smallest break point is @screen-md
@screen-xs: 480px;
@screen-xs-min: @screen-xs;
// 👆 Extra small screen / phone

// 👇 Small screen / tablet
@screen-sm: 576px;
@screen-sm-min: @screen-sm;

// Medium screen / desktop
@screen-md: 768px;
@screen-md-min: @screen-md;

// Large screen / wide desktop
@screen-lg: 992px;
@screen-lg-min: @screen-lg;

// Extra large screen / full hd
@screen-xl: 1200px;
@screen-xl-min: @screen-xl;

// Extra extra large screen / large desktop
@screen-xxl: 1600px;
@screen-xxl-min: @screen-xxl;

// provide a maximum
@screen-xs-max: (@screen-sm-min - 1px);
@screen-sm-max: (@screen-md-min - 1px);
@screen-md-max: (@screen-lg-min - 1px);
@screen-lg-max: (@screen-xl-min - 1px);
@screen-xl-max: (@screen-xxl-min - 1px);

通过宽度来查询


@media only screen and (max-width: 767.99px) {
    ...
}

@media (max-width: @screen-sm-min) {
    ...
}

通过分辨率的<resolution>查询

@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2dppx)

html:not([data-scale]) .am-modal-button-group-h .am-modal-button:last-child {

 border-left: none;

}

-webkit-min-device-pixel-ratio 非标准

该特性是非标准的,请尽量不要在生产环境中使用它!

测试工具

Responsive Viewer

image.png

image.png

上图数据是获取设备尺寸

www.zhangyunling.com/study/2018/…

document.documentElement.clientWidth
document.documentElement.clientHeight
document.body.clientWidth
document.body.clientHeight
window.innerWidth
window.innerHeight
screen.availWidth
screen.availHeight
screen.width
screen.height

来源:www.zhangyunling.com/814.html

iPhone12

docEl.client=390-661;
docBody.client=390-0;
window.inner=390-661;
screen.avail=390-844;
screen.=390-844

TODO

  • 写一个更好的读取设备的html
  • 如何设计好代码,避免使用过多的font-size
  • mobile和web是同一套代码吗?
    • 参考淘宝 苏宁易购等网站

    淘宝网页版:www.taobao.com/

    淘宝手机版:main.m.taobao.com/