金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > web前端 > 腾讯微云黑色遮罩引导蒙版更好的CSS实现方式,

腾讯微云黑色遮罩引导蒙版更好的CSS实现方式,

发布时间:2019-11-06 22:37编辑:web前端浏览(143)

    前端开发者应该知道的 CSS 小技巧

    2016/02/23 · CSS · 2 评论 · CSS

    本文由 伯乐在线 - cucr 翻译,艾凌风 校稿。未经许可,禁止转载!
    英文出处:Matt Smith。欢迎加入翻译组。

    一些小技巧让你的CSS技术更专业

    1. 使用:not()去除导航上不需要的边框
    2. body添加行高
    3. 垂直居中任何元素
    4. 逗号分离的列表
    5. 使用负nth-child选择元素
    6. 使用SVG图标
    7. 文本显示优化
    8. 在纯CSS幻灯片上使用max-height
    9. 继承box-sizing
    10. 表格单元格等宽
    11. 使用Flexbox摆脱边界Hack
    12. 使用属性选择器选择空链接

    腾讯微云黑色遮罩引导蒙版更好的CSS实现方式

    2016/03/08 · CSS · 1 评论 · 蒙版

    原文出处: 张鑫旭(@张鑫旭 )   

    以20像素为基准的CSS网页布局实践分享

    2016/03/24 · CSS · 布局

    原文出处: 张鑫旭(@张鑫旭)   

    使用:not()添加/去除导航上不需要的边框

    添加边框…

    CSS

    /* 添加边框 */ .nav li { border-right: 1px solid #666; }

    1
    2
    3
    4
    5
    /* 添加边框 */
     
    .nav li {
         border-right: 1px solid #666;
    }

    …然后去除最后一个元素的边框…

    CSS

    /* 移除边框 */ .nav li:last-child { border-right: none; }

    1
    2
    3
    4
    5
    /* 移除边框 */
     
    .nav li:last-child {
         border-right: none;
    }

    …使用伪类 :not() 将样式只应用到你需要的元素上:

    CSS

    .nav li:not(:last-child) { border-right: 1px solid #666; }

    1
    2
    3
    .nav li:not(:last-child) {
         border-right: 1px solid #666;
    }

    当然,你可以使用.nav li + li 或者 .nav li:first-child ~ li, 但是使用 :not() 的意图特别清晰,CSS选择器按照人类描述它的方式定义边框。

    一、微云的实现

    网站有一些改动的时候,为了让用户熟知新的操作位置,往往会增加一个引导,常见的方式就是使用一个黑色的半透明蒙版,然后需要关注的区域是镂空的。

    然后上周五我去微云转悠的时候,也看到了引导层,于是职业病又犯了,去学习下别人是怎么实现的。下面是观测的结果:

    为了实现镂空蒙层效果,作者发挥了小时候拼积木的才能,使用两层HTML结构,内层使用5块独立区域拼接形成,至于中间镂空的区域的阴影则是使用的图片实现的。

    图片 1

    图片 2

    虽然最终的效果满足了产品的需求,对于用户而言,目的已经达到。但是,从代码质量层面、潜在的体验提升可能性、使用场景广度上来讲,还是弱了很多的。

    举例来说,如果我们某个提示区域面积很大,那中间的那个镂空区域尺寸是不是要变,那后面的背景图片怎么办?搞新图,有人看到了使用了background-size:cover, 那IE7,IE8怎么办?哦,可能微云不需要管IE7, IE8.

    如果不需要管IE7, IE8,那这里的实现就显得更加小白了。我们实际上只需要一层标签,一层空标签就可以实现我们的效果,且不需要图片。

    一、一切从line-height行高说起

    想想看,你CSS构建页面的时候,默认的字体大小和行高分别是多少?

    下面是我统计的一些数据:

    • 新浪微博:12px/1.5
    • 腾讯微博:12px/1.75
    • 淘宝网/天猫/腾讯微云:12px/1.5
    • 京东:12px/150%

    计算下来,基本行高要么是18像素,要么是21像素~

    我想,大多数小伙伴应该没关注过这方面的细节,基本行高大致就可以,取1.5方便计算,1.75呢似乎也无伤大雅。

    当下的网页早已告别当初就只能浏览信息的那种状态,页面结构更加复杂,大段描述文字的情况只占少数,因此,行高的角色有点从阅读体验层面转换为更方便的计算或者其他什么角色。

    这里的“其他什么角色”看似平淡无奇的一句话,其实才是本文的主角。在本文,行高担任了网页垂直格栅基准的角色!

    图片 3

    我们以前可能听过网页格栅布局,老实讲,我对水平格栅一点兴趣也没有,几百篇CSS文章我也从来没有介绍过,因为跟自己的布局理念不符;但是,我今天倒是要提一提垂直格栅!

    页面内容往往是自上而下瀑布式的呈现,内容千变万化,元素的高度也是变幻莫测,因此对于垂直方向,所谓格栅,几乎是无稽之谈。确实是这样,但是,局部的格栅有时候会让我们的页面变得更加规范,以及可以让我们的工作更加轻松。

    而这一切,就要从行高说起。我们以前写页面,都是设置字体大小以及行高值,确定单行文本所占据的高度内容;而我们这里,则逆向思维,我们希望页面基本文字所占据的高度是20像素,则我们的行高应该是?

    现在是大屏时代,假设我们的默认字号大小是14像素,我们计算下:20/14≈1.4285714285714286,四舍五入的结果,于是得到:

    CSS

    body { line-height: 1.42857; font-size: 14px; }

    1
    2
    3
    4
    body {
      line-height: 1.42857;
      font-size: 14px;
    }

    不好意思,给大家下套子了,注意了,在CSS中,行高计算的时候,一定不要向下四舍五入,而要向上。类似上面的代码,虽然14*1.42857近乎就是20像素,但是,不好意思,最后还是以19像素的高度呈现,在Chrome浏览器下就是如此!

    因此,实际的设置应该是:

    CSS

    body { line-height: 1.42858; font-size: 14px; }

    1
    2
    3
    4
    body {
      line-height: 1.42858;
      font-size: 14px;
    }

    于是,我们就得到了一个20像素为基准的网页布局环境了,此时,普通一行文字的高度就是20像素,那又有什么好处呢?

    单一来看,20像素的高度单元和21像素似乎没什么差别,但是,如果放在一个完整的体系里面,价值就能很好地体现了!

    body添加行高

    你不需要分别为每一个 <p>, <h*> 等元素添加行高,而是为body添加:

    CSS

    body { line-height: 1; }

    1
    2
    3
    body {
         line-height: 1;
    }

    这种方式下,文本元素可以很容易从body继承。

    二、我的实现

    主要在于思维方式的变化。拼积木这种想法大家都比较容易想到,符合日常认知,但是,但代码层面,我们可以进行思维转换,发散思考,偌大的半透明遮罩层,我们不要老想着背景色块背景色块,可以突破常规思维,把它认为是边框,一个很大很大的边框(我们平时使用border都是1像素巨多),这样,我们自然就有了镂空效果。

    如下图示意:
    图片 4

    但是,目前我们中间的镂空区域方的,有没有什么办法变成圆的呢?
    自然有,方法1是元素设置超大圆角,但是,此时为了边框依然填满整个屏幕,border边框尺寸要大大增大,但是,为了不影响页面的滚动条,我们必须再嵌套一层标签,就显得啰嗦了;
    方法2则是方法1某些方面的逆向思维处理,就是把当前元素作为外层限制标签,里面重新生成一个大尺寸伪元素,实现自适应尺寸的圆角效果,这个好,HTML干净不啰嗦,CSS一步到位(代码如下示意);

    .cover::before { content: ''; width: 100%; height:100%; border-radius: 50%; border: 400px solid #000; position: absolute; left: -400px; top: -400px; /* 自己瞎填的参数,示意 */ box-shadow: inset 0 0 5px 2px rgba(0,0,0,.75); }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    .cover::before {
        content: '';
        width: 100%; height:100%;
        border-radius: 50%;
        border: 400px solid #000;
        position: absolute;
        left: -400px; top: -400px;
        /* 自己瞎填的参数,示意 */
        box-shadow: inset 0 0 5px 2px rgba(0,0,0,.75);
    }

    大家可以看到,上面的伪元素的各个参数都是固定参数值,与外部元素的尺寸什么的没有任何关系,只要外部元素尺寸不超过400,里面永远会有一个正椭圆的内阴影的镂空图形(因为超出部分会被.cover隐藏),要理解圆角和正椭圆的关系,可以参考我之前的文章:“秋月何时了,CSS3 border-radius知多少?”。

    眼见为实,耳听为虚,您可以狠狠地点击这里:一层标签实现网站引导镂空蒙版功能demo (点击黑色蒙层会有引导切换效果)

    demo这个镂空蒙层所使用的HTML代码如下:

    <div class="cover"/></div>

    1
    <div class="cover"/></div>

    没错,就这么简单,没什么嵌套,没有什么五个元素变形金刚合体,没有使用图片。

    微云这张图片3K多,以微云的用户访问量,估计流量费要不少钱的。

    而且,大家如果点击蒙版,会发现,镂空的区域大小每次都是不一样的,有大有小,有高有瘦,而微云的那个实现方法要满足此需求就棘手;而且,大家发现没,这些尺寸位置的变化都是动画来动画去的,不是嗙嗙嗙这种生硬的效果,更soft, 对用户视觉引导效果更好,你看,我从这里到这里了,为什么可以实现动画效果呢,因为我们的镂空和内阴影都是CSS实现的,而微云的图片方法,显然是无法有动画的。

    图片 5

    JS代码辅助
    当然,我的实现也离不开JS的辅助,JS的工作很简单,让蒙层的width/height以及border大小和需要引导的元素相关联。

    我特意整了个可以公用的方法coverGuide(命名不喜欢自己随便改):

    var coverGuide = function(cover, target) { var body = document.body, doc = document.documentElement; if (cover & target) { // target size(width/height) var targetWidth = target.clientWidth, targetHeight = target.clientHeight; // page size var pageHeight = doc.scrollHeight, pageWidth = doc.scrollWidth; // offset of target var offsetTop = target.getBoundingClientRect().top + (body.scrollTop || doc.scrollTop), offsetLeft = target.getBoundingClientRect().left + (body.scrollLeft || doc.scrollLeft); // set size and border-width cover.style.width = targetWidth + 'px'; cover.style.height = targetHeight + 'px'; cover.style.borderWidth = offsetTop + 'px ' + (pageWidth - targetWidth - offsetLeft) + 'px ' + (pageHeight - targetHeight - offsetTop) + 'px ' + offsetLeft + 'px'; cover.style.display = 'block'; // resize if (!cover.isResizeBind) { if (window.addEventListener) { window.addEventListener('resize', function() { coverGuide(cover, target); }); cover.isResizeBind = true; } else if (window.attachEvent) { window.attachEvent('onresize', function() { coverGuide(cover, target); }); cover.isResizeBind = true; // IE7, IE8 box-shadow hack cover.innerHTML = ''; } } } };

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    var coverGuide = function(cover, target) {
        var body = document.body, doc = document.documentElement;
        if (cover & target) {
            // target size(width/height)
            var targetWidth = target.clientWidth,
                targetHeight = target.clientHeight;
     
            // page size
            var pageHeight = doc.scrollHeight,
                pageWidth = doc.scrollWidth;
     
            // offset of target    
            var offsetTop = target.getBoundingClientRect().top + (body.scrollTop || doc.scrollTop),
                offsetLeft = target.getBoundingClientRect().left + (body.scrollLeft || doc.scrollLeft);
     
            // set size and border-width
            cover.style.width = targetWidth + 'px';
            cover.style.height = targetHeight + 'px';    
            cover.style.borderWidth =
                offsetTop + 'px ' +
                (pageWidth - targetWidth - offsetLeft) + 'px ' +
                (pageHeight - targetHeight - offsetTop) + 'px ' +
                offsetLeft + 'px';
     
            cover.style.display = 'block';
     
            // resize
            if (!cover.isResizeBind) {
                if (window.addEventListener) {
                    window.addEventListener('resize', function() {
                        coverGuide(cover, target);
                    });    
                    cover.isResizeBind = true;
                } else if (window.attachEvent) {
                    window.attachEvent('onresize', function() {
                        coverGuide(cover, target);
                    });
                    cover.isResizeBind = true;
     
                    // IE7, IE8 box-shadow hack
                    cover.innerHTML = '';
                }
            }
        }
    };

    这里的coverGuide方法使用原生JS实现,IE6+浏览器都是兼容的,不依赖JS库,大家可以随意使用。当然,写得匆忙,没有严格验证,可能有bug,大家可以稍微留点心。

    使用非常简单,语法如下:

    coverGuide(cover, target);

    1
    coverGuide(cover, target);

    其中cover就是.cover这个单独的蒙版元素,target则是我们需要指引的元素,按钮啊,导航什么的。然后,我们的镂空区域自动定位到target的位置,大小也是target元素的大小。超省心。

    具体使用,可参考上面的demo,源代码就在页面上。

    IE7,IE8怎么办
    如果你需要兼容IE7,IE8,我们不妨就方框效果;如果设计和产品接受不了,则可以使用图片打个补丁,例如上面JS代码部分的:

    cover.innerHTML = '<img src="guide-shadow.png">';

    1
    cover.innerHTML = '<img src="guide-shadow.png">';

    我demo使用的这个图片长下面这样:
    图片 6

    大小还有阴影都是我自己随手一搞的,旨在示意,真实项目大家可以向设计师索要图片。

    然后,CSS超easy, 图片撑满我们的cover就可以。

    /* IE7, IE8 img */ .cover > img { width: 100%; height: 100%; }

    1
    2
    3
    4
    /* IE7, IE8 img */
    .cover > img {
        width: 100%; height: 100%;    
    }

    二、20像素为基准的20*20像素的小图标策略

    基本上每一个网站都离不开小图标,国际通用的图形语言,对于一个网站而言,无论是体验还是辨识度都是必不可缺的。

    目前而言,绝大多数网站还是处于12像素字体时代,设计师设计的图标都是按照16*16像素规格设计的偏多;不太专业的设计师可能会14~20像素之间摇摆。

    反正不管怎样,最后(加上sprite工具盛行)我们图形在网页中的尺寸基本上就是16px*16px:

    CSS

    .icon-hi { display: inline-block; width: 16px; height: 16px; }

    1
    2
    3
    4
    .icon-hi {
        display: inline-block;
        width: 16px; height: 16px;
    }

    当然,17px*18px也是很常见的:

    CSS

    .icon-hi { display: inline-block; width: 17px; height: 18px; }

    1
    2
    3
    4
    .icon-hi {
        display: inline-block;
        width: 17px; height: 18px;
    }

    这种一小图标真实尺寸构建CSS代码的方式有3个比较大的问题:

    1. 与后面文字的对齐
    2. 点击区域大小
    3. 重复冗余的CSS代码

    1. 与后面文字的对齐
    由于vertical-align属性的兼容性,以及vertical-align:middle并不是严格意义的垂直居中,因此,小图标+文字的对齐,基本上都要针对不同浏览器加个hack补丁;在加上,如果你的图标尺寸一会儿16像素,一会儿18像素,显然,没法通过全局一个设置使得整站的小图标和文字都对齐良好!

    例如,腾讯微博这里,图标就是16像素尺寸,然后,一些五花八门的处理:
    图片 7 图片 8

    很多补丁,很多CSS处理,里面图标使用了absolute绝对定位,这倒是处理兼容挺不错的方法,但是,显然不具有普遍适用性。

    2. 点击区域大小
    有时候,我们的小图标直接就是点击按钮,此时,如果你的尺寸就是16像素*16像素,会不会点不准的概率就上升了,如果图标是20px*20px呢?

    3. 重复冗余的CSS代码
    当下类似grunt-spritesmith的小图标合并工具基本成了前端团队的标配,而根据我的观察,基本上,大家都是设计师给的图标直接扔到文件夹里面进行合并,于是,产出的代码基本上就是width/height/background-position的模式,然而,可能里面70%宽高都是16像素,20%是18像素,还有10%是其他小尺寸,也就是,其实很多CSS代码是可以合并的,然而,都浪费了。

    如下生成less代码截图(源自真实项目):
    图片 9

    以上这些问题实际上一个对策就可以搞定,就是所有图标统一按照20px*20px的标准处理!
    图片 10

    你想啊,我们网页文字基础高度是20像素,图标也是20像素高,天然对齐,问题1解决;20*20的点击区域对吧,显然比16*16要大,问题2解决;所有图标都是20*20的尺寸范围内,所有width/height都可以合并,大大减少CSS代码,问题3也搞定了!

    如下图CSS生成模板示意:
    图片 11

    ————-低调的分隔线————-

    然而,实际上的处理要比上面说的复杂和深奥的多!

    图标和文字天然对齐
    按照我们直观的认知,两个元素都是20像素高,都在自己的垂直范围内居中,那这两个元素应该是在一个水平线上的。实际上真的是这样吗?是的,但是,注意这里的但是,是有条件限制的!

    在“CSS深入理解vertical-align和line-height的基友关系”一文中,其中就已经提及过:

    The baseline of an ‘inline-block’ is the baseline of its last line box in the normal flow, unless it has either no in-flow line boxes or if its ‘overflow’ property has a computed value other than ‘visible’, in which case the baseline is the bottom margin edge.

    中文直译就是:

    ‘inline-block’的基线是正常流中最后一个line box的基线, 除非,这个line box里面既没有line boxes或者本身’overflow’属性的计算值而不是’visible’, 这种情况下基线是margin底边缘。

    翻译成白话就是:

    如果inline-block水平元素’overflow’不是’visible’,或者里面没有内联元素(图片、文字之类),则整个元素的基线就是自身的下边缘;否则,基线就是里面最后一行图文元素的基线(图片 12这是我们需要的)。

    有点不太理解?没关系,不是本文的重点。你只要知道,我们要想20像素高的图标和20像素高的文字天然对齐显示,需要满足这两个条件:

    1. overflow属性值除了visible都不行;
    2. 里面需要有不加修饰的文本内容;

    所以,下面两种情况都是淘汰的!

    CSS

    .icon { display: inline-block; width: 20px; height: 20px; background: ... overflow: hidden; }

    1
    2
    3
    4
    5
    6
    .icon {
        display: inline-block;
        width: 20px; height: 20px;
        background: ...
        overflow: hidden;    
    }

    JavaScript

    <i class="icon"></i> .icon { display: inline-block; width: 20px; height: 20px; background: ... }

    1
    2
    3
    4
    5
    6
    7
    <i class="icon"></i>    
     
    .icon {
        display: inline-block;
        width: 20px; height: 20px;
        background: ...
    }

    第一种情况是overflow:hidden拖后腿了;第二种情况是<i>标签里面是空大屁,基线还是元素底边缘而不是里面的文字(如果有)。

    因此,要想实现小图标天然对齐,我们不能有overflow:hidden同时HTML标签内部有文本内容,我靠,好多限制,貌似很烦啊,然而,经过本人的实践,是可以有CSS代码段满足各种场景的对齐效果的,如下:

    CSS

    .icon { display: inline-block; width:20px; height:20px; background: ...; white-space:nowrap; letter-spacing: -1em; text-indent: -99em; color: transparent; /* IE7 */ *text-indent: 0; *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '3000'); } .icon:before { /* 伪元素插入空格文本 */ content: '3000'; }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    .icon {
        display: inline-block;
        width:20px; height:20px;
        background: ...;
        white-space:nowrap;
        letter-spacing: -1em;
        text-indent: -99em;
        color: transparent;
        /* IE7 */
        *text-indent: 0;
        *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '3000');
    }
    .icon:before {
        /* 伪元素插入空格文本 */
        content: '3000';
    }

    您可以狠狠地点击这里:小图标文字对齐的终极解决方案demo

    结果,无论是空标签HTML,还是内置可访问性提示文字的HTML,都是对齐效果棒棒哒!

    XHTML

    <i class="icon"></i> <a href="javascript:" class="icon">删除</a>

    1
    2
    3
    <i class="icon"></i>
     
    <a href="javascript:" class="icon">删除</a>

    图片 13

    而且,就算文字的字号大小变化,例如14px16px图标和文字也是对齐良好的,因为,对齐的本质是图标元素里面的文字和后面的文字对齐,文字和文字对齐,自然是天然对齐的,千古难题就这么有了解决方案,以前的CSS hack啊,什么vertical-align控制,还有margin负值偏移都是浮云了!图片 14

    图标20*20尺寸扩展grunt工具
    设计师设计的图标都是16px~20px不等,CSS代码都是Grunt工具生成的,我们很难简单控制让所有图标都是20*20的区域大小。除非,我们对所有的小图标在导出的时候,手动扩展画布到20px*20px。

    亲,什么年代了,又不是搞艺术品,手工劳作年代过去了,直接上工具。

    我基于GM搞了个20像素以下小图标自动扩展为20像素大小图片的Grunt工具:

    精力有限,这个小项目还没细整就扔上去了,可以看到,很多模板生成的文字我还没来得及改。

    window用户记得要安装ImageMagick.exe,安装时候记得勾上那个全局变量什么东西的。

    如果有什么问题,欢迎……不要来打扰我,忙,自己想办法,么么哒~~

    图标的重心像素级处理
    有些图标,虽然设计师给的尺寸是标准的,没有多余像素,但是,可能图标本身的形状并不是对称的,尤其上下,这就会导致图标的重心会有些偏上或者偏下,导致和后面的文字呈现的时候,虽然真实尺寸是对齐的,但是视觉感觉却是不在一条线上。如果要求很高,可以让设计师或UI工程师自己微调下,一般1像素就够了,当然,是调整图片,例如,重心低的,下面多1像素高度的透明区域。

    垂直居中任何元素

    不,这不是黑魔法,你的确可以垂直居中任何元素:

    CSS

    html, body { height: 100%; margin: 0; } body { -webkit-align-items: center; -ms-flex-align: center; align-items: center; display: -webkit-flex; display: flex; }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    html, body {
      height: 100%;
      margin: 0;
    }
     
    body {
      -webkit-align-items: center;  
      -ms-flex-align: center;  
      align-items: center;
      display: -webkit-flex;
      display: flex;
    }

    想让其他元素居中?垂直,水平…任何东西,任何时间,任何位置?CSS-Tricks上有 一个不错的文章 来做到这一切。

    注意:IE11上flexbox的一些 缺陷行为。

    三、结束语

    这种蒙版覆盖思想呢,不仅仅适用于这种大面积的引导。我们上传图片,尤其上传头像之后,要对头像进行剪裁,常见的交互之一就是四周黑色,中间镂空,也可以使用巨大border来实现我们的效果,一层标签足矣,根本不需要上下左右额外4层标签拼接合体实现。

    内部自适应的圆角效果单看文字,很多小伙伴估计不知道我在说些什么,建议去demo页面看下伪元素的代码,真实区域大小和最终效果,估计就会明白了。

    感谢阅读,欢迎交流,欢迎提供更好的实现方法,一定有的,只是我功力不够。

    以上~

    图片 15

    相关文章

    • 小tip:CSS3下的圆形遮罩效果实现与应用 (0.604)
    • CSS3 box-shadow兼容loading效果兼IE10+ CSS Hack介绍 (0.396)
    • CSS3 box-shadow盒阴影图形生成技术 (0.396)
    • CSS border三角、圆角图形生成技术简介 (0.350)
    • CSS3图标图形生成技术个人攻略 (0.338)
    • 遐想:如果没有IE6和IE7浏览器… (0.286)
    • 伪元素表单控件默认样式重置与自定义大全 (0.286)
    • first-line伪类实现兼容IE6/IE7的单标签多背景效果 (0.286)
    • CSS计数器(序列数字字符自动递增)详解 (0.286)
    • CSS之before, after伪元素特性表现两则 (0.286)
    • CSS3/SVG clip-path路径剪裁遮罩属性简介 (RANDOM – 0.255)

      1 赞 2 收藏 1 评论

    图片 16

    三、40像素高度的UI组件体系

    前面提到过,20像素的基准行高要在体系中才能大放异彩,而这个体系的另一个非常重要的成员就是页面的基本UI组件们!

    所有的按钮均是40像素高度,所有的输入框都是40像素高度,所有的下拉框、时间选择框都是40像素高度;

    图片 17

    上图截自“基于原生HTML的UI组件开发”一文那个展示前端分离的例子:QQ公众平台UI组件下的前端分离demo

    由于我们的基准文字高度是20像素,因此,左边文字距离顶部的间距,就是标准的10像素!

    图片 18

    图片 19

    这就使得我们网页中无论是大模块之间的间距,还是小的文字和空间之间的间距;无论是水平的间距还是垂直的间距,全部都是标准的5像素的倍数。从而让我们所有的大小模块的实际高度都是10的倍数(padding-top

    • line-height*行数 + padding-bottom)。

    换句话说,我们以20像素为基准进行布局和UI组件设计,使得我们的网页间距标准化了,无形之中会让我们页面的排版更专业,同时也让zxx.lib.css的利用率提升了。

    图片 20

    如果我们进一步深究按钮或者输入框的实现细节,你会发现,其CSS实现本身就是按照20像素为基准的策略进行实现的:
    图片 21

    //zxx: 擦,一看代码,发现按钮直接行高控制的,失策失策,我回去就调整下,这其实是有问题的,适用性大了折扣,因为没有遇到按钮中有图标的设计情境,所以没有暴露出来。更好实现应该和上面输入框一行,20像素行高,使用padding实现最终的40像素高度。

    逗号分离的列表

    让列表看起来更像一个真正的逗号分离列表:

    CSS

    ul > li:not(:last-child)::after { content: ","; }

    1
    2
    3
    ul > li:not(:last-child)::after {
      content: ",";
    }

    使用伪类:not() ,这样最后一个元素不会被添加逗号。

    四、结束语

    看似是简单的要求以20像素为基准,实际上根植于体系中并有一套完整的解决方案。

    不过,跳出内容本身,换个角度讲,本文的内容其实挺无聊的。

    人家淘宝天猫就是基础高度18像素,不是这里推荐的20像素,但照样年销售额3万亿,照样上市,照样造就了一大批土豪。

    所以,大家大可不必过分在意一点点的CSS细节,CSS对于产品的商业价值有,但是到了一定阶段以后,实际上就有限,或者说很难直观的体现,或者说性价比就不高了。今天还有小伙伴问我,absolute绝对定位元素display:nonevisiibility:hidden两个隐藏的渲染性能差异,这个问题的商业价值比本文内容还要小1万倍,以现在浏览器的渲染性能以及我们实际的开发需求,就算有差异,有价值吗,肯定没有!

    大环境如此浮躁,你会发现,自己遇到的困境并不是技术成长遇到了瓶颈,而是根据不需要你这方面进一步的技术成长,来,干点收益更明显的事情!

    我想,很多前辈技术博客断掉了,怕也是人在职场,身不由己!

    我能不能走出一条不一样的路呢?

    图片 22

    2 赞 2 收藏 评论

    图片 23

    本文由金沙国际官网发布于web前端,转载请注明出处:腾讯微云黑色遮罩引导蒙版更好的CSS实现方式,

    关键词: