zoukankan      html  css  js  c++  java
  • 实战案例:DIV嵌套

     缘于页面结构语义化的考虑,我们应该慎用div和span这两个通用元素,只有当划分页面结构模块时才使用div元素,因为模块本身是没有任何语义的,他仅代表一块独立的结构。如果想对段落内部分内联元素或文本应用某种特殊样式时,就可以使用span元素把他们独立封装在一个容器内。

    div作为布局元素,它与表格一样是可以嵌套的。因为浏览器对于任何元素的解析方式都是一样的,一般从最里层开始,然后不断向外解析。当嵌套层级很深时,将会使浏览器消耗更多的资源对嵌套关系进行解析,势必会影响浏览器的速度。

    对于一个上下三行的布局结构:

    <div id="header"></div>
    <div id="main"></div>
    <div id="footer"></div>

    为了实现页面固定宽度和居中显示效果,分别给三个div设置css样式就有点麻烦了,我们可以给它嵌套一个div层:

    <div id="wrap">    
        <div id="header"></div>
        <div id="main"></div>
        <div id="footer"></div>
    </div>

    实际上这种增加一层div嵌套的方法,肯定会给浏览器的显示带来负担,我们可以将body元素作为一个外套,这样就能充分发挥body的作用,以免造成浪费。

    <body id="wrap">
        <div id="header"></div>
        <div id="main"></div>
        <div id="footer"></div>
    </body>


    又比如:要给上述顶部页眉部分加一个导航条:

    <div id="wrap">
        <div id="header">
            <div id="logo"></div>
            <div id="banner"></div>
            <div id="nav">
                <ul>  <!--导航列表-->
                    <li></li>    <!--导航列表项-->
                    <li></li>    <!--导航列表项-->
                    <li></li>    <!--导航列表项-->
                </ul>
            </div>
         </div>   
    </div>                                

    上述代码是最优化的么?当然不是,ul元素与div元素一样都是块状元素,一个导航菜单外面嵌套两层元素,势必会产生代码冗余,如果没有被定义的特殊样式,我们完全可以这样写:

    <body id="wrap">
            <div id="logo"></div>
            <div id="banner"></div>
            <div id="nav">
                <ul>  <!--导航列表-->
                    <li></li>    <!--导航列表项-->
                    <li></li>    <!--导航列表项-->
                    <li></li>    <!--导航列表项-->
                </ul>
            </div>  
    </body>                                

      这种情况就是最优的。但是,这样做存在一定的风险,可能需要使用更多的css样式来控制整个元素的显示。如果多嵌套一层,对页面布局会有更大的帮助,能节省大量不必要的css控制代码,此时布局的功能重要性就远大于结构的功能性。

    总之,在我们大力提倡尽力减少div元素的多次嵌套时,是针对当前网页设计中设计师乱套div元素的现状而说的,但并不是谈套色变,必要的嵌套是应该的,也是必须的!

    补充:页面语义化操作:

     1、XHTML结构的语义性

    2、构建语义化页面操作

  • 相关阅读:
    读取目录中文件名的方法 C++
    std::string::compare() in C++
    std::string::erase in C++ 之 erase()方法截取string的前几位、后几位
    Source Insight 破解
    bib+windows+word=bibtex4word插件使用方法
    7K7K小游戏
    Linux+Gurobi-python调用
    使用位运算替代模运算,为了高效做模除最好选择mod除(2^n)
    windows+VS2019+gurobi解决方案配置
    The plagiarism
  • 原文地址:https://www.cnblogs.com/jasmine-95/p/5042486.html
Copyright © 2011-2022 走看看