zoukankan      html  css  js  c++  java
  • CSS菜单双箭头菜单

    本例的目标是实现带有两侧箭头的菜单效果,这里的箭头没有使用任何背景图像文件,而是完全依靠CSS代码实现的。

    仍然使用前面的HTML代码,但是必须进行一定的改造,也就是每个菜单项增加了两个盒子来放置三角形。具体代码如下:

    <div id="menu">
        <a href="#">
            <span class="left"></span>
                Home
            <span class="right"></span>
        </a>
        <a href="#">
            <span class="left"></span>
                Contact Us
            <span class="right"></span>
        </a>
        <a href="#">
            <span class="left"></span>
                Web Dev
            <span class="right"></span>
        </a>
        <a href="#">
            <span class="left"></span>
                Web Design
            <span class="right"></span>
        </a>
        <a href="#">
            <span class="left"></span>
                Map
            <span class="right"></span>
        </a>
    </div>

      可以看出,在每个<a></a>标记之间,连接文字的前后增加了一对<span></span>标记,同时分别设置了CSS类别,即leftright。注意它们内部本身是空白的,这样可以通过CSS的样式吧这些span显示为三角形了。

     说明 1)有的参考资料上成为钩子,意思是它像钩子一样可以挂接CSS样式,很形象说明了这种方法的本质。

    下面首先设置#menu容器,代码如下:

    #menu {
        font-family:Arial, Helvetica, sans-serif;  /*
    字体
    */
        font-size:14px;
        margin:0 auto;    /*
    居中对齐
    */
        border:solid 1px #CCC;
        120px;
    }

    接着设置菜单项普通样式

    #menu a,#menu a:visited{
        text-decoration:none;
        text-align:center;
        color:#c00;
        display:block;
        padding:4px;
        background-color:#fff;
        border:1px solid #fff;            /*
    白色边框
    */
        height:1em;
        position:relative;
    }

    注意 这里要注意两点

    1)倒数第二行的设置,为每一个菜单项设置了边框,而边框的颜色与背景色相同。这是由于将来在鼠标指针经过时候会出现红色的边框,因此为了前后不产生跳动,这里加上了一个与红色边框相同粗细的边框。虽然看不见它,实施可以防止鼠标指针经过时产生跳动。

    2)最后一行样式的设置,将菜单项的CSS盒子设为了相对定位。这实际上并不是要改变菜单项本身的位置,而是要通过这个设置使菜单项的CSS盒子成为了一个包含块,从而能够使它下属的CSS盒子以它为基准进行定位。

    制作到这里,在浏览器中的显示如图

    首先制作鼠标经过时红色边框

    #menu a:hover{
        border-color:#c00;
    }

    然后对span的共同属性进行设置,代码如下:

    #menu a:hover span{
        display:block;
        height:0;
        0;
        overflow:hidden;    /*
    防止溢出
    */
        border:solid 8px #fff;
        top:4px;            /*
    设置竖直方向的定位
    */
        position:absolute;     /*
    绝对定位
    */
    }

    接下来需要设置各自不同的属性,代码如下

    #menu a:hover span.left{
        border-left-color:#c00;
        left:8px;
    }
    #menu a:hover span.right{
        border-right-color:#c00;
        right:8px;
    }

    最终的效果如图

    最后再来解释一下

    现在如果把这行代码删除,那么测试效果如图所示

    FirefoxIE中的不同效果

    可以看到Firefox中显示的效果依然正确,但是在IE中就不正确了,这时因为即使span中没有任何内容,IE也会认为有默认的行高。加入这一行CSS代码,就可以使IE也能中也实现期望的效果了。

     

     

  • 相关阅读:
    Javascript的私有变量和方法、共有变量和方法以及特权方法、构造器、静态共有属性和静态共有方法
    Spring4整合Hibernate4出现的错误的解决
    Javascript类的创建
    Kettle学习总结(一)
    Kettle Excel导入数据到数据库
    Python 爬虫 2 (转)
    Js仿腾讯微博效果
    飘雪效果
    列表获取对应图片
    飞入购物车
  • 原文地址:https://www.cnblogs.com/zfang/p/2201780.html
Copyright © 2011-2022 走看看