移动端
2020-04-16 11:09:09 0 举报
AI智能生成
前端移动端知识点总结
作者其他创作
大纲/内容
dpr
the resolution in physical pixels / the resolution in CSS pixels
移动端最小触控区域<br>
44*44px
移动端适配方案
rem
px2rem
动态对html根元素的font-size进行修改,<br>在页面初次加载以及window触发resize事件时<br>修改html根元素的font-size<br>
预设:<br>设计稿统一750px<br>px2rem 的 remunit=75px<br><br>eleDesignSize:元素在设计稿上的尺寸<br>eleCssSize:写在css文件中的元素的尺寸,数值与eleDesignSize相等,<br>即:eleCssSize==eleDesignSize<br>deviceWidth:手机宽度<br>remunit:px2rem里面设置的rem单位<br>rootFontSize:html根元素的font-size<br><br>因为<br>1. eleCssSize/remunit * rootFontSize == deviceWidth/750*eleDesignSize<br>2. eleCssSize==eleDesignSize<br><br>所以<br>1/remunit*rootFontSize==deviceWidth/750<br>所以<br>rootFontSize==deviceWidth/750*remunit<br>当 remunit==75 时,rootFontSize==deviceWidth/10<br>
vh/vw方案<br><br>个人认为比 rem 麻烦,<br>相对 rem 方案也没有优点
vw : 1vw 等于 视口宽度 的 1%<br>vh : 1vh 等于 视口高度 的 1% <br>vmin : 选取 vw 和 vh 中 最小 的那个<br>vmax : 选取 vw 和 vh 中 最大 的那个<br>
使用 css 预处理器把设计稿尺寸转换为 vw 单位,包括 文本,布局高宽,间距 等,<br>使得这些元素能够随视口大小自适应调整。<br><br>// 以1080px作为设计稿基准<br>$vw_base: 1080<br>@function vw($px) {<br> @return($px / 1080) * 100vw<br>}<br><br>我的想法:以后每次都要用 vw 这个方法?那写起来很复杂呀
不足
存在一些兼容性问题,Android4.4以下不支持
媒体查询
优势
能够使网页在不同设备、不同分辨率屏幕上呈现<b>合理布局</b>,<b>不仅仅是样式伸缩变换</b>
不足
<ol><li>要匹配足够多的设备与屏幕,一个web页面需要多个设计方案,工作量大<br></li><li>通过媒体查询技术需要设置一定量的断点,到达某个断点前后的页面发生显著变化,<br>用户体验不太友好<br></li></ol><br>
参考
https://www.jianshu.com/p/2c33921d5a68
图片处理
Image-set
对于背景图片,使用image-set根据用户设备的分辨率匹配合适的图像, <br>同时要考虑兼容性问题。<br><br><style><br>.css {<br> background-image: url(1x.png); /*不支持image-set的情况下显示*/<br> background: image-set(<br> url(1x.png) 1x,/* 支持image-set的浏览器的[普通屏幕]下 */<br> url(2x.png) 2x,/* 支持image-set的浏览器的[2倍Retina屏幕] */<br> url(3x.png) 3x/* 支持image-set的浏览器的[3倍Retina屏幕] */<br> );<br>}<br></style><br>
参考链接
https://www.jianshu.com/p/2c33921d5a68
1px 边框
产生原因
在像素比等于2的屏幕中,css设置的1px会被渲染成2px的物理像素,看起来会比较粗。
解决
伪元素 + transform 实现<br>(用的多)
<font color="#c41230">利用 :before 或者 :after 伪元素实现 border ,<br>将伪元素绝对定位,<br>借助媒体查询,用 transform 的 scale 方法按照相应的比率缩小伪元素的高度或者宽度。</font><br>
单边
.scale-1px{<br> position: relative;<br> border:none;<br>}<br>.scale-1px:after{<br> content: '';<br> position: absolute;<br> bottom: 0; <br> width: 100%;<br> height: 1px;<br>background: #000;<br> -webkit-transform: scaleY(0.5);<br> transform: scaleY(0.5);<br> -webkit-transform-origin: 0 0;<br> transform-origin: 0 0;<br>}<br><br><b><font color="#0076b3">@media</font> (-webkit-min-device-pixel-ratio: 3), /* Webkit-based browsers */<br> (min--moz-device-pixel-ratio: 3), /* Older Firefox browsers (prior to Firefox 16) */<br> (min-resolution: 3dppx) /* The standard way */{<br> .scale-1px:after:{<br> -webkit-transform:scaleY(0.333);<br> transform:scaleY(0.333);}<br> }<br>}</b><br>
四边
.scale-1px{<br> position: relative;<br> margin-bottom: 20px;<br> border:none;<br>}<br>.scale-1px:after{<br> content: '';<br> position: absolute;<br> top: 0;<br> left: 0;<br> border: 1px solid #000;<br> -webkit-box-sizing: border-box;<br> box-sizing: border-box;<br> width: 200%;<br> height: 200%;<br> -webkit-transform: scale(0.5);<br> transform: scale(0.5);<br><font color="#c41230"> -webkit-transform-origin: left top;<br> transform-origin: left top;</font><br>}<br>
背景渐变实现
<font color="#c41230">设置1px的渐变背景,50%有颜色,50%透明。很多UI都是采用这种方法,比如:weui、mint-ui...</font>
单边
.background-gradient-1px {<br>background-image: linear-gradient(180deg, #000, #000 50%, transparent 50%);<br>background-size: 100% 1px;<br>background-repeat: no-repeat;<br>background-position: bottom left;<br>background-origin: border-box;<br>}
相关 CSS 属性与函数
linear-gradient()
<font color="#c41230">CSS linear-gradient() 函数用于创建一个表示两种或多种颜色线性渐变的图片。<br>其结果属于<gradient>数据类型,是一种特别的<image>数据类型。</font><br>
语法
linear-gradient(<br> [ <angle> | to <side-or-corner> ,]? <color-stop-list> )<br> \-------------------------/ \----------------------------/<br> Definition of the gradient line List of color stops <br><br>where <side-or-corner> = [ left | right ] || [ top | bottom ]<br> and <color-stop-list> = [ <linear-color-stop> [, <color-hint>? ]? ]#, <linear-color-stop><br> and <linear-color-stop> = <color> [ <color-stop-length> ]?<br> and <color-stop-length> = [ <percentage> | <length> ]{1,2}<br> and <color-hint> = [ <percentage> | <length> ]
background-origin
<font color="#c41230">The background-origin CSS property sets the background's origin: <br>from the border start, inside the border, or inside the padding.</font><br>
四边
.background-gradient-1px {<br>// <font color="#c41230">多个背景</font><br>background:<br> linear-gradient(<b>90deg</b>,red, red 50%, transparent 50%) left / 1px 100% no-repeat<font color="#c41230"><b>,</b></font><br> linear-gradient(<b>90deg</b>,blue, blue 50%, transparent 50%) right / 1px 100% no-repeat<b><font color="#c41230">,</font></b><br> linear-gradient(purple, purple 50%, transparent 50%) top / 100% 1px no-repeat<b><font color="#c41230">,</font></b><br> linear-gradient(green, green 50%, transparent 50%) bottom / 100% 1px no-repeat<br>}<br>
参考链接
https://www.cnblogs.com/chenwenhao/p/9350425.html
JSBridge
是什么
JSBridge 是 Native 和非 Native 之间的桥梁,它的核心是构建 Native 和非 Native 间双向通信的通道<br>
原理
JavaScript 是运行在一个单独的 JS Context 中(例如,WebView 的 Webkit 引擎、JSCore)。<br>这些 Context 与原生运行环境的天然隔离,我们可以将这种情况与 RPC(Remote Procedure Call,远程过程调用)通信进行类比,<br>将 Native 与 JavaScript 的每次互相调用看做一次 RPC 调用。<br>
实现
java 如何调用 Javascript
<font color="#0076b3">使用 Android Sdk 提供的交互方法</font>
webView.loadUrl("javascript:scriptString"); //其中 scriptString 为 Javascript 代码
在 KITKAT 之后,又新增了一个方法:<br><br> webView.evaluateJavascript(scriptString, new ValueCallback<String>() {<br> @Override<br> public void onReceiveValue(String value) {<br> <br> }<br> });<br>其中 scriptString 为 Javascript 代码,ValueCallback 的用来获取 Javascript 的执行结果。这是一个异步掉用。<br>这个调用看起比上面的正常,而且更像是一个方法调用。<br>
Javascript 如何调用 java
先在 Javascript 环境中<br><b><font color="#0076b3">注入一个 Java 代理</font></b><br>
class <b>JavaProxy</b>{<br> @JavascriptInterface //注意这里的注解。出于安全的考虑,4.2 之后强制要求,不然无法从 Javascript 中发起调用<br> public void<b> javaFn</b>(){<br> //xxxxxx<br> };<br> }<br><br><font color="#381e11"><b> webView.addJavascriptInterface</b></font><b style="color: rgb(0, 118, 179);">(new JavaProxy();, "java_proxy")</b><font color="#0076b3">;</font><br>
<font color="#0076b3">在 Javascript 环境中<br>直接调用 Java 代理<br>上的方法</font><font color="#381e11">即可</font><br>
java_proxy.javaFn();
参考
https://blog.csdn.net/yuzhengfei7/article/details/93468914<br>
https://www.cnblogs.com/xesam/p/5402985.html
0 条评论
下一页