一个自定义的指南针样式的控件,手机端样式调用适配web端的代码

论如何在手提式有线话机端web前端达成自定义原生控件的体制

2015/10/30 · HTML5 ·
原生控件

原版的书文出处:
卖烧烤夫斯基   

手提式有线电话机开发webapp的同桌肯定遇到过如此难题,如何为丑极了的无绳电话机成分运用自定义的样式。首先,要弄精通为啥要定义手提式有线电话机原生控件的体制,就需求探视手提式无线电话机的这些原生框样式的丑陋摸样:

android:

图片 1

一个自定义的指南针样式的控件,手机端样式调用适配web端的代码。ios:

图片 2

方案1
只顾一点: 貌似大漠今年(17)年推荐使用vhvw展开适配了。
https://github.com/amfe/lib-flexible/issues/154
方案2
大漠 使用Flexible达成手淘H5页面包车型客车终点适配
文章地址:
https://github.com/amfe/article/issues/17
参阅了大漠的文章
除却大段文字应用px来书写,别的基本使用rem 进行Flexible进展示公布局
鉴于现行反革命有的浏览器不协助 vw,所以本人未来应用的是 master
的分支 版本0.3.2

代码:/Files/cappuccino/Compass.rar

web移动端前端营造(含样式布局,纯净版不含别的样式框架),web样式

@charset 'utf-8';
*{margin:0;padding:0; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-text-size-adjust:none; } /* highlight equal to outline,only dose it has a effect in google chrome lite browser */
*:focus,*:active {outline:none;}
html, body {  height:100%;}
body{ width: 100%;font-family: \5FAE\8F6F\96C5\9ED1,\5B8B\4F53;-webkit-user-select:none;}
p,a,span,textarea,b,input,dt,dd { color: #666;font-size: 0.9rem;}
ul, ol{list-style:none;}
img{border:none;}
a { text-decoration:none;}
textarea {resize:none;}
input[type=button],button{text-align: center; background: none; border: 0; outline: none; }
input { background: white; border: none; outline: none;}

/*占位符颜色*/
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color:#ccc; }
input:-moz-placeholder, textarea:-moz-placeholder { color:#ccc; }
input::-moz-placeholder, textarea::-moz-placeholder { color: #ccc; }
input:-ms-input-placeholder, textarea:-ms-input-placeholder { color: #ccc; }

/* 浮动 */
.fl { float: left !important; }
.fr { float: right !important; }
.clear { clear: both; }

/* 功能 */
.hide { display:none !important; }/*隐藏*/
.ellipsis { overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;word-break:keep-all; } /* 字数省略 */
.keep { position:fixed !important;border-bottom: #ccc 1px solid !important; } /*滚动保持*/
.mask {display: none;position: fixed;left: 0;z-index: 11;width: 100%; height: 100%;background-color:rgba(0, 0, 0, 0.4);}/*遮罩层*/

/* 效果 */
.shadow,.all-shadow * {box-shadow: 0 0 .3rem #ddd !important;}
.gradient,.all-gradient * {background: -webkit-linear-gradient(top, #fff4f4,#fff);}
.radius,.all-radius * { border-radius: .2em;}
.left-radius {border-top-left-radius: .2em;border-bottom-left-radius: .2em;}
.right-radius {border-top-right-radius: .2em;border-bottom-right-radius: .2em;}
.top-radius {border-top-left-radius: .2em;border-top-right-radius: .2em;}


/* ---------------------------------- 主题A开始 ---------------------------------- */
/* 母版样式 */
.app{display:table;width:100%;height:100%;}
.app>* { display: table-row;  }
.app>:nth-child(2) { width: 100%;height:100%; }
.app>:first-child,.header{top:0; width: 100%;height: 2.5rem;line-height:2.5rem;}
.app>:last-child,.footer{ bottom:0;width: 100%; /*height: 4rem;*/}/*height:无定义高度,当需要页脚时可在当前页定义页脚,并添加标签<div class="footer"></div>即可*/
.header,.footer{ position:fixed;display:table;}
.header>*{display:table-cell;font-size:1rem;color:white;}

.A-color{ color: #00c1d9 }
.A-color-gray {color: #ccc}
.A-color-error { color: #ff8181 }
.A-color-success { color:green }
.A-color-disabled { color: #999 }

.A-border { border-color: #ccc }
.A-border-top{ border-top:1px solid #ccc}
.A-border-bottom {border-bottom:1px solid #ccc }
.A-border-left { border-left:1px solid #ccc  }
.A-border-right{ border-right:1px solid #ccc }

.A-bg {background-color:#00c1d9 !important } /* 主题点击效果 */
.A-bg-body { background-color: #d9d9d9; } /* 主题body背景 */
.A-bg-bar {background-color:#e6e6e6 !important } /* 主题点击效果 */

.A-icon-filter{ background: url(/Image/Ico/filter.png) center no-repeat;background-size:1.4rem;}
.A-icon-user{ background: url(/Image/Ico/user.png) center no-repeat;background-size:1.4rem;}
.A-icon-arrow-down{ background: url(/Image/Ico/arrow_down.png) 1rem center no-repeat;background-size:.8rem .4rem;}

.A-btn-all,.A-btn {} /* 主题按钮 */
.A-btn-click {background-color:#00b5cb !important } /* 主题点击效果 */
/* ---------------------------------- 主题A结束 ---------------------------------- */

asp.net 母版页:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Css")
    @RenderSection("css", false)
</head>
<body>
<div class="app">
    <div></div>
    <div>@RenderBody()</div>
    <div></div>
</div>
@Scripts.Render("~/Js")
@RenderSection("js", required: false)
</body>
</html>

asp.net 首页:

@{
    ViewBag.Title = "首页";
}
@section css
{
    <style>
        .app > :last-child, .footer { height:2.5rem }
        .city-btn { width: 5.5rem;text-indent:2.3rem; }
        .filter-btn,.user-btn{ width:3.2rem;}        
    </style>
}
<div class="header A-bg">
    <a class="city-btn A-icon-arrow-down A-btn"></a>
    <h1></h1>
    <a class="filter-btn A-icon-filter A-btn"></a>
    <a class="user-btn A-icon-user A-btn"></a>
</div>
<div class="body">
     //...
</div>
<div class="footer A-bg"></div>
@section js
{
    <script>
        //...
    </script>
}

体现结果:

图片 3

@charset ‘utf-8’;* { margin : 0 ; padding : 0 ; -moz-box-sizing :
border-box ; -webkit…

没法的挑三拣四

看完了那些丑陋的界面成分,大家就足以知晓当大家把他们暴光在产品同学的眼中时,那种层层的杀气了。能够见到,界面成分十二分丑陋,产品兄弟是早晚不会承受的。不过,不得不说那个控件在触发后的作用比pc机上的要炫酷。那其间以apple机的滚筒选取最为特出.以下是它们触发后调用原生控件的职能:

android:

图片 4图片 5图片 6

ios:

图片 7图片 8图片 9

只好说这几个样式原生弹出样式是契合我们陈设的尺码的,因为它即反映了UI界面包车型大巴祥和和体验度,又不损耗任何web质量,关键是大家怎么都不供给做。产品BZJ君看到了,指明要在apple机下要滚筒的职能用来选取日期也许下来单。若是大家不能够解决掉界面文本框的样式难点,那么不论后边的功力多炫酷,始终使不能够令人接受的。恐怕你会想花时间写类似的效果?笔者不否定你可以写出来,可是必要多少日子的工作量吗?也很五个人选取了插件的方法。通过jq插件(假如您的档次中没在动用jq,为了那一个效果无奈下载jq和其插件)来落到实处,其实是十三分吃力不讨好的政工。三个是插件那种事物出了难题恐怕转移了要求后它会变得那三个的不得了扩大,第三个自然是考虑到能源加载,在手提式有线电话机端特别须要考虑。因而,选用插件是下下策!

多少个的定义定义:

化解方法

难题来了,既想要弹出层的炫酷效果,又想自定义控件在界面显示的样式。如何是好吧?露珠曾经尝试过最简便易行的主意去重写css去改变它们的体裁,可是固然在google若干小时,也远非找到如意的结果。露珠也尝试过-webkit-appearance属性,但它也出示不顺畅。况且大家还索要同盟多机型(安卓,苹果,wp?)。无论怎么样,走改变原有样式的路是无效的。露珠经过一番思索,找到了自认为相当好的缓解格局,也是这篇博文的主旨:既然控件在页面包车型地铁体裁不得以转移,这就暗藏它,然而!不是用display:none隐藏,也不是把width和height设置为0,大家期待的是看不到它们的原本样式,而期望保留对它们的tap和focus事件。可是除此之外上述的艺术,还有怎么样能使它们看不见呢?聪明的你早晚想到了,对,正是opacit:0,
通过将控件的不发光度设置为0,大家能够让要素继续让它留在界面上,并且维持随时响应focus事件的情形。大家要做的,是为该控件设置为相对定位,覆盖在大家自定义样式的2个element上。那样,用户看到的是上面的element,但当她的手去触碰此element时,他骨子里触碰的是截然透鲜明留在界面上的原生控件!如下图所示:

图片 10

那仍旧第叁步,接下去大家需求为控件绑定响应事件,超越1/2气象下我们需求绑定的风浪都以onchange,一旦采取成功,就把值复制到自定义的element上去。那样马到成功了!不管您是因而表单或许post提交,你取到的值仍旧是控件的值,自定义的element只负责显示,不担负作业!

图片 11

大体像素(physical pixel)

三个大体像素是显示屏(手机荧屏)上不大的情理突显物理单元,在操作系统的调度下,每三个设备都有协调的颜色值和亮度值。便是那几个设施像素的微薄距离欺骗了大家肉眼看到的图像效果。

图片 12

image.png

相关文章