• 第十一章 设计用户界面 之 基于浏览器优化程序行为和样式


    1. 概述

      本章内容包括:检测浏览器的特性和功能、创建可以运行于多浏览器以及移动设备的web程序、使用特定扩展(vendor-specific)加强程序行为和样式。

    2. 主要内容

      2.1 检测浏览器的特性和功能

        使用Javascript检测浏览器

    <script type="text/javascript"> 
        if ( navigator.userAgent.indexOf("MSIE")>0 ) 
        { 
        <!--[if lte IE 7]> 
        <style TYPE="text/css"> 
            @import url(ie7.css); 
        </style> 
        <![endif]--> 
        } 
    </script>

        相对于浏览器类型检测,浏览器特性检测可以更好的排除不支持的方法,在移动客户端方面更加有用。

    <script type="text/javascript"> 
        if(window.addEventListener)  
        { 
            // Browser supports "addEventListener" 
            window.addEventListener("load", myFunction, false); 
        }  
        else if(window.attachEvent)  
        { 
            // Browser supports "attachEvent" 
            window.attachEvent("onload", myFunction); 
        } 
    </script>

        目前不是所有的浏览器都支持HTML5,所以如果要使用HTML5标记,一定要有替代方案。

    <video> 
        <source src="video.mp4" type='video/mp4' /> 
        <source src="video.webm" type='video/webm' /> 
        <object type="application/x-silverlight-2"> 
            <param name="source" value="http://url/player.xap"> 
            <param name="initParams" value="m=http://url/video.mp4"> 
        </object> 
        Download the video <href="video.mp4">here</a>. 
    </video>

      2.2 创建可以运行于多浏览器以及移动设备的web程序

        可以使用 CSS3 media queries 和 HTML <meta name=”viewport”> 标记,再加上特性检测 来确保在各种浏览器上的正确显示。

        ASP.NET MVC 4 提供了检测请求的功能,可以检测传入的请求是否来源于移动端。程序可以据此返回相应的视图。

        可用的显示视图包含在 System.Web.Mvc.VirtualPathProviderViewEngine.DisplayModeProvider 下。默认包含 mobile 和 default 两个入口。

        还可以添加自定义的视图类型,比如添加一个Windows Phone 视图:

    DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("iemobile") 
    { 
        ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf 
            ("iemobile", StringComparison.OrdinalIgnoreCase) >= 0)  
    });

        如果服务端收到一个“iemobile”请求,系统会首先查找Index.iemobile.cshtml,如果没找到,就回去找Index.Mobile.cshtml。

        还可以使用CSS来适配各种需求,通过在 <meta>中添加 viewport属性来适配。

    <meta name="viewport" content="width=device-width">

        还可以使用CSS的@media 查询功能

    /* header */ 
    header .content-wrapper { 
        padding-top: 20px;  
    } 
    /* logo */ 
    .site-title { 
        color: #c8c8c8;  
        font-family: Rockwell, Consolas, "Courier New", Courier, monospace;  
        font-size: 2.3em;  
        margin: 0;  
    } 
    @media only screen and (max- 850px) { 
        /* header mobile */ 
        header .float-left,  
        header .float-right { 
            float: none;  
        } 
        /* logo mobile */ 
        header .site-title { 
            margin: 10px;  
            text-align: center;  
        }

        使用第三方Javascript脚本库,比如 jQuery Mobile, Sencha Touch, and Kendo UI 可以方便的实现浏览器兼容开发。

      2.3 使用特定扩展(vendor-specific)加强程序行为和样式

        由于种种原因,有一些浏览器会具有个别特有的特性。开发者需要根据面向的用户群来判断需要支持的浏览器。

        为了确保CSS特性可以在不同的浏览器上良好的工作,可以使用特定扩展(vendor-specific)。格式如下:

        ■ ■ - vendor identifier - meaningful name
        ■ ■ _ vendor identifier - meaningful name

        

    <style> 
         .corners 
         { 
             width: 350px;  
             margin: 0px;  
             background-color: #222;  
             color: #fff;  
             padding: 8px;  
              /* regular style */ 
             border-radius: 15px;  
              /* -moz extension */ 
             -moz-border-radius: 18px;  
         } 
    </style>

        等到制定的浏览器支持了该属性以后,这个特定扩展就可以去掉了。

    3. 总结

      ① 由于浏览器的多样性,所以各个浏览器及设备上UI显示的一致性就是一个需要好好考虑的问题。使用JQuery或者Modernizr等第三方库,可以提升工作效率。

      ② HTML5和CSS3的标准化正在进行中,所以各个浏览器的支持还不完善。所以在选择使用一些特性是,要尽量使用最通用的版本。

      ③ 如果运行目标比较固定,就可以有针对性的开发。而且还可以增加一些客户端上的代码,比如客户端验证和UI动画。

  • 相关阅读:
    信号signal的监听与处理
    oracle 12cR1&12cR2核心高实用性新特性
    Tomcat 7服务器线程模型
    抓取awr、语句级awr、ashrpt
    从percona server 5.7换到mariadb 10.2
    关于typeid和typeof
    mysql查询INFORMATION_SCHEMA表很慢的性能优化
    使用ccache大幅度加速gcc编译速度至少1倍以上(不需要修改任何编译选项)
    c++ linux下输出中文
    visual studio 2015下使用gcc调试linux c++开发环境搭建完整详解
  • 原文地址:https://www.cnblogs.com/stone_lv/p/5057852.html
Copyright © 2020-2023  润新知