zoukankan      html  css  js  c++  java
  • CSS浮动布局与菜单栏设计

      公司周六停电,终于可以双休了。用周五空余时间再夯实一下css基础,《CSS权威指南》概念性的内容看起来容易犯困,不如实践来得快,动手操作吧。

    一、浮动布局

      浮动存在问题:浮动使元素脱离文档流,导致下面的元素向上提。

      布局存在问题:由于浮动元素宽度已设定,根据盒模型,对于有宽度的盒子添加padding border和magin导致盒子变大,从而挤出后面浮动元素,导致下移,称作“浮动移滑”。

      围住浮动元素的三种方法:

        1为父元素添加 overflow:hidden   强制包围浮动元素

        2同时浮动父元素   后面的元素清除 clear:both

        3  1、添加非浮动的清除元素 div     2、添加伪类 : .class:after{conten:'.';display:'block';height:0;visibility:hidden;clear:both;}

      解决“浮动移滑”方案:

        1.从设定的元素宽度中减去添加的外边距,内边距和边框宽度和(一变化就容易出错);

        2.给元素添加一个div,把内容放到div中。

        3 使用box-sizing:border-box  添加边距使内容收缩,而不是盒子变大。 ie6/ie7不支持。

      三栏固定宽带布局(用到浮动和清除)

        HTML代码

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <link rel="stylesheet" href="../CSS/threeLayout.css" type="text/css"/>
     7 </head>
     8 <body>
     9     <header>浮动与三栏固定宽度布局</header>
    10     <div id="wrapper">
    11         <nav>这是导航栏</nav>
    12         <article>这是中间栏</article>
    13         <aside>这是右边栏</aside>
    14     </div>
    15     <footer>这是角标</footer>
    16 </body>
    17 </html>
    html代码

      CSS代码:  

     1 body{
     2     text-align: center;
     3 }
     4 header {
     5     background: #f00;
     6 }
     7 footer{
     8     backgroud:#000;
     9 }
    10 nav{
    11     150px;
    12     float: left;
    13 }
    14 article{
    15     600px;
    16     float: left;
    17     background: #ffed53;
    18 }
    19 aside{
    20      210px;
    21     float: left;
    22     background: #3f7ccf;
    23 }
    24 footer{
    25     clear: left;
    26     background: #000;
    27 }
    css代码

      三栏-中栏流动布局/圣杯布局/双飞翼布局

    三栏-中栏流动1负外边距实现

      1.设计思路:一个div包围左中右三栏,一个div包围左中两栏,利用负边距实现。

    “ 三栏中的右栏是 210像素宽。为了给右栏腾出空间,中栏 article 元素有一个 210 像素的右外边距。当然,光有这个外边距只能把右栏再向右推 210 像素。别急,包围左栏和中栏的两栏外包
    装上 210 像素的负右外边距,会把右栏拉回 article 元素右外边距(在两栏外包装内部右侧)创造的空间内。中栏 aticle 元素的宽度是 auto,因此它仍然会力求占据浮动左栏剩余的所有空间。
    可是,一方面它自己的右外边距在两栏外包装内为右栏腾出了空间,另一方面两栏外包装的负右外边距又把右栏拉到了该空间内。”————引自《CSS权威指南》

     html代码: 

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="../CSS/threeLayout.css" type="text/css"/>
    </head>
    <body>
    <div id="main_wrapper">
        <header>浮动与三栏流动布局</header>
        <div id="three_wrapper">
            <div id="thow_wrapper">
                <nav id="left">这是导航栏</nav>
                <article id="center">这是中间栏</article>
            </div>
            <aside id="right">这是右边栏</aside>
        </div>
        <footer>这是底标</footer>
    </div>
    </body>
    </html>
    三栏流动布局

    CSS:中间栏:  margin-right: 210px;  包围左栏和中栏的div: margin-right: -210px;  

    body{
        margin: 0;
        text-align: center;
    }
    header {
        padding: 5px 10px;
        background: #b7c19f;
        height: 50px;
    }
    #three_wrapper{
        float: left;
         100%;
    }
    #thow_wrapper{
        float: left;
        100%;
        margin-right: -210px;
    }
    nav{
        150px;
        float: left;
        height: 50px;
        background: #60ff1c;
    }
    article{
        auto;
        height:50px;
        background: #ffed53;
        margin-left: 150px;
        margin-right: 210px;;
    }
    aside{
         210px;
        height:50px;
        float: left;
        background: #3f7ccf;
    }
    footer{
        clear: left;
        background: #ff2dc9;
    }
    负边距实现

     2利用CSS3单元格 table-cell 

    <body>
        <header>浮动与三栏流动布局</header>
        <nav id="left">这是导航栏</nav>
        <article id="center">这是中间栏</article>
        <aside id="right">这是右边栏</aside>
        <footer>这是底标</footer>
    </body>
    View Code

      CSS  

     1 nav{
     2     display: table-cell;
     3     150px;
     4     height: 50px;
     5     background: #60ff1c;
     6 }
     7 article{
     8     display: table-cell;
     9     74%;
    10     height:50px;
    11     background: #ffed53;
    12 }
    13 aside{
    14     display: table-cell;
    15      210px;
    16     height:50px;
    17     background: #3f7ccf;
    18 }
    利用display:table-cell

    二、菜单栏

      1纵向列表:ul li a   将链接<a>嵌入在li内部并设置display:block ,从第二个开始为<a>添加上边框

      html代码

        <nav class="first_nav">
            <ul>
                <li><a href="#">first Nav</a></li>
                <li><a href="#">second Nav</a></li>
                <li><a href="#">third Nav</a></li>
                <li><a href="#">last Nav</a></li>
            </ul>
        </nav>
    View Code

          css代码

    *{
        margin:0;
        padding:0;
    }
    nav{
        margin: 50px;
        width:150px;
    }
    .first_nav ul{
        border:1px solid #f00;
        border-radius: 3px;
        padding: 5px 10px 3px;
      }
    
    .first_nav li{
        list-style-type: none;
    }
    
    .first_nav  li+li a{
        border-top: 1px solid #f00
    }
    
    .first_nav a{
        display: block;
        text-decoration: none;
        padding: 3px 10px;
        font:20px Exo,helvetica,arial,sans-serif;
        font-weight:400;
        color:#000;
        background: #ffed53;
    }
    .first_nav a:hover{
        color:#069;
    }
    View Code

      

      2横向列表:html代码不变,使li浮动,并且强制ul包围浮动元素

      

      CSS代码  

     1 .first_Nav a{
     2     display: block;
     3     padding:3px 10px;
     4     text-decoration: none;
     5     font: 20px Exo,helvetica,arial,sans-serif;
     6     font-weight: 400;
     7     color: #000;
     8     background-color: #ffed53;
     9 }
    10 .first_Nav li+li a{
    11     border-left: 1px solid #f00;
    12 }
    13 .first_Nav a:hover{
    14     color: #069;
    15 }
    16 .first_Nav li{
    17     float: left;
    18     list-style-type: none;
    19 }
    20 .first_Nav ul{
    21     overflow: hidden;
    22 }
    View Code

      2下拉菜单

     html代码:

      

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>www.jd.com</title>
        <link rel="stylesheet" type="text/css" href="CSS/menu.css"/>
    </head>
    <body>
        <nav id="jd_nav">
            <li><a href="#">手机/运营商/数目</a></li>
            <li><a href="#">家居/家具/厨具</a></li>
            <li><a href="#">鞋靴/箱包/奢饰品</a></li>
            <li><a href="#">图书、音像/电子商</a>
                <ul>
                    <li><a href="#">少儿</a></li>
                    <li><a href="#">教育</a></li>
                    <li><a href="#">科技</a>
                        <ul>
                            <li><a href="#">计算机与互联网</a></li>
                            <li><a href="#">科普</a></li>
                            <li><a href="#">工业技术</a></li>
                            <li><a href="#">电子通信</a></li>
                        </ul>
                    </li>
                    <li><a href="#">电子书</a></li>
                </ul>
            </li>
        </nav>
    </body>
    </html>
    下拉菜单HTML
     

    CSS:

    /*添加视觉样式*/
    #jd_nav{
        font:1em helvetica,arial,sans-serif;
    }
    #jd_nav a{
        display: block;
        color:#555;
        background-color: #eee;
        padding:.2em 1em;
        border-width: 3px;
        border-color: transparent;
    }
    #jd_nav a:hover{
        color: #fff;
        background-color: #aaa;
    }
    #jd_nav a:active{
        color:#ccc;
        background: #fff;
    }
    /*添加功能样式*/
    #jd_nav *{
        margin:0;
        padding:0;
    }
    #jd_nav ul{
        float: left;
    }
    #jd_nav li{
        float: left;
        list-style-type: none;
        /*为子菜单提供上下文*/
        position: relative;
    }
    #jd_nav li  a{
        border-right-style: solid;
        background-clip: padding-box;
        text-decoration: none;
    }
    #jd_nav li :last-child a{
        border-right-style: none;
    }
    #jd_nav li li a{
        border-right-style: none;;
        border-top-style: solid;
    }
    /*二级菜单功能样式*/
    #jd_nav li ul {
        width: 9em;
        display: none;
        position: absolute;
        left:0;
        top:100%;
    }
    #jd_nav li li {
        clear:left;
    }
    #jd_nav li li ul{
        display: none;
    }
    #jd_nav li:hover>ul {
        display: block;
    }
    /*三级菜单*/
    #jd_nav li li ul{
        position:absolute;
        left:100%;
        top:0;
    }
    下拉菜单CSS

    以下是一些CSS选择器操作:
    CSS选择器:

    上下文选择器:
      标签1 标签2 {声明} -->标签1后代的标签2元素应用次样式
    子选择器
      标签1>标签2 {}--> 标签1的儿子元素标签2 应用样式。
    同胞选择器(兄弟选择器)
      紧邻同选择
          标签1+标签2 {}-->标签1的紧跟的所有叫标签2的兄弟元素
      一般同胞选择
          标签1~标签2 {}-->选择标签1的同胞标签2
    通用选择符: * p * {color:red} 把标签p包含的所有元素的文本变成红色。
    类选择 .类名{} id选择 #id{} 属性选择器:标签名[属性名]
    链接伪类: a:link ; a:visited; a:hover: a:active
    结构化伪类: :first-child :last-child :nth-child(n)
    伪元素
       p::first-letter p段落的第一个字母
    p::first-line p段落的第一行
      ::before/::after 在特定元素前面/后面添加特殊内容
                 p::before{content:'age';}


  • 相关阅读:
    Windows API 第六篇 GetLocalTime
    _itoa _itow _itot atoi atof atol
    Window API 第五篇 WTSEnumerateProcesses
    获取计算机以及本机信息API
    Windows API 第四篇 文件操作
    [软工顶级理解组] 团队介绍和采访!
    2019 SDN上机第1次作业
    第01组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
  • 原文地址:https://www.cnblogs.com/hai233/p/6054799.html
Copyright © 2011-2022 走看看