移动端使用百分比与em做适配

自从使用了rem的适配方案之后,已经彻底的忘记其他的适配了。但是今天在主站中做一个弹窗UI,由于主站之前没用rem适配,所以只能使用百分比加媒体查询做适配了。在使用的过程中偶尔明白了以前一直没有了解的一些问题,记录一下,页面可以根据窗口的大小自适应缩放,这个demo链接

1、元素的宽度使用了百分比来定宽,这样就可以根据屏幕的宽度来自适应了。这个方式要注意百分比的参考的基准。使用百分比定宽的元素,百分比参考的是该元素最近的、定了宽度的、父元素。

    <div class="m-lucky-number-dialog">
        <h3>恭喜你获得一张618的幸运号!</h3>
        <p class="number">452124</p>
        <p class="tip-text"><span>6.18当日凭此幸运号兑奖</span><i>,</i><span>中奖信息将短信提醒哦~</span></p>
        <div class="no-phone-number">
            <input type="text" placeholder="中奖信息不容错过,赶快填写吧">
            <a class="d-btn save-phone-number">保存手机号</a>
            <a href="http://study.163.com" target="_blank" class="go-index">幸运号是什么?</a>
        </div>
        <a class="close-btn"></a>
    </div>
Paste_Image.png

2、字体大小font-size的参考值
由于我们的字体大小使用的是em为字体单位,所以必须要有一个参考值。其实em跟百分比的宽度参考规则一样,如果父元素没有设置font-size,那么它的参考对象就会一直往上冒泡,直到body,也就是参考的是该元素最近的,定了font-size的、父元素。元素最终字体大小是 该元素的字体大小 * 所参考的父元素的字体大小
比如我给最外层父元素.m-lucky-number-dialog设置了font-size:10px;,那么它里面的所有元素的字体大小都会参考它,比如我的绿色的按钮.d-btn

.d-btn {
        width: 77.8%;
        height: 2.5em;
        line-height: 2.5em;
        margin-top: 3.7%;
        border-radius: 7px;
        font-size: 3.2em;
        background-color: #08d346;
        color: #fff;
    }

设置的font-size:3.2rem,那么实际的的字体大小就是 3.2*10=32px;但是我们是适配页面,不可能在所有的手机屏幕都显示32px大小的,所以我们需要根据屏幕尺寸要改变字体的大小,所以最好是使用媒体查询来修改最外层父元素的font-size,比如我的视觉稿是640px,量出来该按钮的字体font-size是32px;那么当我们把640px的视觉稿显示成320px大小时,视觉稿缩小一半,那么相对应的按钮的字体font-size也会缩小一半成16px;所以我们只需要把最外层的父元素.m-lucky-number-dialog设置了font-size:5px;就可以了,这样简单方便,其实10px、5px、并不是绝对的,看个人喜好,也可以设置20px、50px、只要等比缩放就好了

@media screen and (max-width: 375px) and (min-width: 320px) {
    .m-lucky-number-dialog {
        font-size: 5px;
    }
}

@media screen and (max-width: 414px) and (min-width: 375px) {
    .m-lucky-number-dialog {
        font-size: 6px;
    }
}

@media screen and (max-width: 639px) and (min-width: 414px) {
    .m-lucky-number-dialog {
        font-size: 6.5px;
    }
}

@media screen and (min-width: 640px) {
    .m-lucky-number-dialog {
        font-size: 10px;
    }
}

3、给元素设置height、line-height百分比不起作用
给元素设置宽高时,如果都能使用百分比,那么会简单很多,但是给height设置百分比大多不起作用(只要给最近的父元素设置了height,给子元素height设置百分比就起作用了),更不用说line-height了,而且line-height使我们是元素垂直居中很好的办法,但是也不能设置px,所以还是设置em吧,虽然height、line-height起作用了,但是你会发现不符合你的期望。那么到底是为什么呢,那还是再看一下我的绿色按钮吧,我给最外层设置的是10px,按钮的原始高度是80px,可是我给它的height、line-height都设置了2.5em然后都显示正确了,原因是当使用em给某一个元素设置height、line-height时,它会先以自身的font-size为基准,然后em单位再参考父元素,比如给按钮元素设置了height:2.5em,那么它的真实高度是 2.5em * font-size = 8em,然后8em * 10px = 80px,如果该元素没有设置font-size,那么就会以最近的父元素作为参考。

.d-btn {
        width: 77.8%;
        height: 2.5em;
        line-height: 2.5em;
        margin-top: 3.7%;
        border-radius: 7px;
        font-size: 3.2em;
        background-color: #08d346;
        color: #fff;
    }

4、使用sprite做背景图不能准确定位的问题
我之前研究过使用sprite图做背景图的方法,结果发现rem配合百分比定位的效果还不错,需要涉及到的属性是backgroun-size的适配,以及top、left、icon大小的计算,em的sprite图适配有待研究,现在还是建议使用单张图片,或者base-64.

以下是全部的sass代码:

.m-lucky-number-dialog {
    width: 84%;
    margin: 100px auto;
    background-color: #fff;
    position: relative;
    font-size: 10px;
    overflow: hidden;
    padding: 16.7% 0;
    border-radius: 4px;
    .close-btn {
        position: absolute;
        width: 22px;
        height: 22px;
        top: 3.125%;
        right: 3.125%;
        background: transparent url("http://nos.netease.com/edu-image/4466DE7D9DA466817955EE00D40DD6E7.png") center center no-repeat;
        background-size: 22px;
    }
    h3,
    p,
    input,
    a,
    {
        display: block;
        text-align: center;
        margin: 0 auto;
    }
    h3 {
        color: #fe7caa;
        font-size: 3em;
        font-weight: normal;
        width: 77.8%;
    }
    .number {
        width: 63%;
        height: 1.78em;
        line-height: 1.78em;
        color: #fe7caa;
        font-size: 4.5em;
        margin: 7.4% auto 0;
        background-color: #eee;
    }
    .tip-text {
        font-size: 1.8em;
        line-height: 1em;
        margin-top: 7.4%;
        color: #999;
    }
    .go-index {
        font-size: 1.8em;
        color: #999;
        margin-top: 3.7%;
        line-height: 14px;
        text-decoration: underline;
    }
    .d-btn {
        width: 77.8%;
        height: 2.5em;
        line-height: 2.5em;
        margin-top: 3.7%;
        border-radius: 7px;
        font-size: 3.2em;
        background-color: #08d346;
        color: #fff;
    }
    .no-phone-number {
        padding-top: 5.56%;
        input {
            border: 1px solid #d2d2d2;
            width: 77.8%;
            height: 4em;
            box-sizing: border-box;
            font-size: 2em;
            color: #222;
            border-radius: 7px;
            line-height: 4em;
            text-align: left;
            text-indent: 3.7%;
        }
        .d-btn {
            width: 77.8%;
            height: 2.5em;
            line-height: 2.5em;
            margin-top: 3.7%;
            border-radius: 7px;
            font-size: 3.2em;
            background-color: #08d346;
            color: #fff;
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,747评论 1 92
  • 学习CSS的最佳网站没有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_阅读 1,044评论 0 1
  • 1.块级元素和行内元素 块级(block-level)元素;行内(内联、inline-level)元素。 块元素的...
    饥人谷_小侯阅读 1,998评论 1 4
  • 本文为阅读《Head First HTML 与 CSS》的css部分的读书笔记,方便回顾书上的知识,另一篇为Hea...
    兼续阅读 1,820评论 0 17
  • 一 外部式css样式 (也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css...
    KunMitnic阅读 936评论 0 1