<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
2、这个配置重点在width=device-width,就是让视窗口等于设配宽度,也就是我开发中能用document的宽度是这个,其它几个“初始缩放大小”“最大缩放大小”“最小缩放大小”和“是否允许用户缩放”可以理解为用来“固定”这个设置不被破坏。
3、这个设置很简单,但同时也会带来一些需要解决的问题。
a、现在的手机都是两倍三倍的Retina高清屏,1px实际的效果是不止一个像素的,对不同的设备设置不同 的,initial-scale可以有比较好的效果,比如在2倍Retina的iphone6(6s,7,8)中设置为0.5。一旦 动态设置这个,也就意味这视窗口不同了,需要不同样式适配。这也是分样式的一套基准,如何分配样式后 面会有更详细的讲解。
b、在PC端如果有最小宽度的限制,需要配置配置不同的width值。
1em=16px
(3) rem:相对于根元素html的单位,如html的font-size为16px,则1rem=16px
(4) vw/vh: 视口宽高为100vw/100vh,这个和百分比类似,只是百分比是相对于父容器,其相对于视口
2、移动适配最常用的应该是rem,很多框架和淘宝的flexible适配都是基于这个单位,而自己做的话,一般 在首页加载时全局js设置html的font-size即可,代码如下:
(function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
//这里根据设计稿为750,设置1rem=100px,
docEl.style.fontSize = 100 * (clientWidth / 375) + 'px';
};
// Abort if browser does not support addEventListener
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('domContentLoaded', recalc, false);
})(document, window);
3.如果用了sass/less等预编译语言可以更灵活的配置的,在上面方法内配置(设计稿为750的情况下):
docEl.style.fontSize = 40 * (clientWidth / 750) + 'px';
在编译函数中配置:
@function px2rem($px, $base-font-size: 20px) {
@return ($px / $base-font-size) * 1rem;
}
这样我们就可以直接使用设计稿的尺寸,如:px2rem(100px),省去了自己计算,如果没用预编译语言(推荐使用),编辑器也有插件支持单位转化。
4.上面是基于屏幕宽度来设置根元素font-size,如果设置不同的initial-scale,我们基于设备像素比设置,效果就会更好,通过window.devicePixelRatio获取。
@media all and ([min-width|max-width|orientation|min-device-width|...]) { ... }
括号[]中表示需要添加的条件,可匹配宽高/横竖屏/设备类型等,比如min-width:750px,表示最小宽度为750px,{}是在匹配模式下的样式。也有逻辑判断and/or/not连接不同的规则
3.要是引入整个文件,可以在link标签中使用
<link rel="stylesheet" media="screen and (min-width:900px)" href="big.css" type="text/css" />
表示:当屏幕大于或等于900px时,将采用big.css样式来渲染Web页面。
4.Bootstrap响应式设计这类栅隔布局采用的就是这套方式。
p{
width: 100px;
height: 1px;
background: red;
display: block;
transform: scaleY(.5);
}
不足:圆角无法实现,实现4条边框比较麻烦,并且只能单独实现,如果嵌套,会对包含的效果产生不想要的效果,所以此方案配合:after和before独立使用较多
2.利用CSS对阴影处理的方式实现0.5px的效果
box-shadow:0 1px 1px -1px rgba(0, 0, 0, 0.5);
不足:颜色不好处理, 黑色 rgba(0,0,0,1) 最深的情况了。有阴影出现,不好用大量使用box-shadow可能会导致性能瓶颈。四条边框实现效果不理想。
3.图片实现,使用 background-image 实现1px有两种方式: 渐变 linear-gradient 或直接使用图片(base64)。渐变 linear-gradient (50%有颜色,50%透明)
div{
height: 1px;
background-image:-webkit-linear-gradient(top,transparent 50%,#000 50%);
background-position: top left;
background-repeat: no-repeat;
background-size: 100% 1px;
}
不足:大量使用渐变可能导致性能瓶颈,代码量大,多背景图片有兼容性问题
/* 普通显示屏(设备像素比例小于等于1)使用1倍的图 */
.css{
background-image: url(img_1x.png);
}
/* 高清显示屏(设备像素比例大于等于2)使用2倍图 */
@media only screen and (-webkit-min-device-pixel-ratio:2){
.css{
background-image: url(img_2x.png);
}
}
/* 高清显示屏(设备像素比例大于等于3)使用3倍图 */
@media only screen and (-webkit-min-device-pixel-ratio:3){
.css{
background-image: url(img_3x.png);
}
}
b.image-set 实现高清化
.css {
background-image: url(1x.png); /*不支持image-set的情况下显示*/
background: -webkit-image-set(
url(1x.png) 1x,/* 支持image-set的浏览器的[普通屏幕]下 */
url(2x.png) 2x,/* 支持image-set的浏览器的[2倍Retina屏幕] */
url(3x.png) 3x/* 支持image-set的浏览器的[3倍Retina屏幕] */
);
}
c.很多网页端对图片的要求还是比较低的,不像app那样,图片一般用一张2倍高清图就行,最新的设备对以上属性的支持还是可以的,对于要求高的应用使用
FastClick.attach(document.body);
(2) zepto的touch模块,tap事件也是为了解决在click的延迟问题
//使用appearance改变webkit浏览器的默认外观
input,select { -webkit-appearance:none; appearance: none; }
//winphone下,使用伪元素改变表单元素默认外观
//1.禁用select默认箭头,::-ms-expand修改表单控件下拉箭头,设置隐藏并使用背景图片来修饰
select::-ms-expand { display:none; }
//2.禁用radio和checkbox默认样式,::-ms-check修改表单复选框或单选框默认图标,设置隐藏并使用背景图片来修饰
input[type=radio]::-ms-check,
input[type=checkbox]::-ms-check { display:none; }
//3.禁用pc端表单输入框默认清除按钮,::-ms-clear修改清除按钮,设置隐藏并使用背景图片来修饰
input[type=text]::-ms-clear,
input[type=tel]::-ms-clear,
input[type=number]::-ms-clear { display:none; }
// 禁止长按链接与图片弹出菜单
a,img { -webkit-touch-callout: none }
// 禁止ios和android用户选中文字
html,body {-webkit-user-select:none; user-select: none; }
// 改变输入框placeholder的颜色值
::-webkit-input-placeholder { /* WebKit browsers */
color: #999; }
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
color: #999; }
::-moz-placeholder { /* Mozilla Firefox 19+ */
color: #999; }
:-ms-input-placeholder { /* Internet Explorer 10+ */
color: #999; }
input:focus::-webkit-input-placeholder{ color:#999; }
// android上去掉语音输入按钮
input::-webkit-input-speech-button {display: none}
来自:https://segmentfault.com/a/1190000019559169
在全面屏的 iPhone X 上,不需要而外的代码,Safari 可以非常完美的展示现有的网站。整个网站的内容都会自动地展示在一个“安全区域”内,并不会被四周的圆角或者“小刘海”遮挡住。
像素 :像素是屏幕显示最小的单位。设备像素 :设备像素又称物理像素(physical pixel),设备能控制显示的最小单位,我们可以把这些像素看作成显示器上一个个的点。 iPhone5 的物理像素是 640 X 1136
关于移动端适配的技术方案主要有以下四种:(1)通过媒体查询的方式即CSS3的meida queries(2)以天猫首页为代表的 flex 弹性布局(3)以淘宝首页为代表的 rem+viewport缩放(4)rem 方式
判断是否是IPhoneX手机;增加fix-iphonex-bottom样式,如果想更改IPhoneX底部34像素的背景颜色怎么办呢?增加iphone-footer-bg样式
em与rem之间的区别:共同点:它们都是像素单位,它们都是相对单位。不同点:em大小是基于父元素的字体大小,rem大小是基于根元素(html)的字体的大小
为了提高代码的兼容性,我们有时需要判断当前系统的平台,然后做一些适配。比如,我们在使用 StatusBar 做导航栏的时候,在 iOS 平台下根视图的位置默认情况下是占据状态栏的位置的,我们通常希望状态栏下面能显示一个导航栏
本文的目标是通过下文介绍的适配方案,使用vue或react开发移动端及H5的时候,不需要再关心移动设备的大小,只需要按照固定设计稿的px值布局,提升开发效率。
首先是名词介绍:像素:Pixel,就是物理像素:也就是设备像素,逻辑像素:(css像素)单位为 px设备像素比:devicePixelRatio,(在高倍屏会出现1px变大的问题)。css单位em:相对于当前对象内文本的字体尺寸
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!