zoukankan      html  css  js  c++  java
  • 使用纯 CSS 设计3D按钮

    CSS 伪类(pseudoclass)能够让你为链接的每个状态(链接<link>、已访问<visited>、悬停<hover>、激活<active>)建立独立的样式。
    创建斜面边缘效果
    要使一个按钮具有3D斜面边缘效果,需要模拟一个光源,以在一个凸起按钮的边缘创建加亮区和阴影区。如果光源在上面稍微偏向按钮的左边,那么按钮的顶部和左侧就会比按钮

    表面更亮,而底部和右侧就会比按钮表面更暗。
    所以,创建三维效果的秘密是使用 CSS 边界模拟按钮的侧面,并为每个边界的使用稍微不同的颜色,具体的颜色方案要根据它所表示的是光亮的一侧还是阴暗的一侧而定。为了看

    上去更加真实,边界应该具有斜接角,CSS 边界能够很好地满足这一需要。
    方法1:使用inset/outset(嵌入线/浮出线)边界.
    有一个 CSS 边界属性能够自动产生合理的斜面边缘模拟效果。你只须为按钮样式的 border-style 属性指定为 inset 或者 outset即可。浏览器会以稍微不同的背景色阴影来处理

    元素边界的表现细节,从而得到期望的效果。outset属性模拟凸起按钮的阴影边缘,inset 属性通过反转阴影来模拟按钮被按下的情景。
    展示了实际的 inset/outset 边界效果。这个例子是由一些非常简单的代码产生的。XHTML 非常简单,只包含一些按钮标签(label)和链接。
    <body>
    <div id="buttonA">
        <ul>
            <li><a href="link1.html">Button 1</a></li>
            <li><a href="link2.html">Button 2</a></li>
            <li><a href="link3.html">Button 3</a></li>
        </ul>
    </div>
    </body>
    CSS 样式使这种方法与设计普通的平面按钮的样式非常相似。唯一多出来的地方是这里将 border-style: outset和 border-style: inset规则同 border-width设置组合使用,后

    者将边界宽度设置的足够大以使其可见。
    body {
        margin: 0px;
        padding: 0px;
    }
    div#buttonA {
        margin-left: 50px;
    }
    div#buttonAul {
        margin: 0px;
        padding: 0px;
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 12px;
        line-height: 30px;
    }
    div#buttonAli {
        list-style-type: none;
        height: 30px;
        125px;
        margin: 20px;
        text-align:center;
    }
    div#buttonAli a {
        height: 100%;
        100%;
        display: block;
        text-decoration: none;
        border- 6px;
    }
    div#buttonAlia:link {
        color: #000000;
        font-weight: bold;
        background-color: #CCCCCC;
        border-style: outset;
    }
    div#buttonAlia:visited {
        color: #000000;
        font-weight: normal;
        background-color: #CCCCCC;
        border-style: outset;
    }
    div#buttonAlia:hover {
        font-weight: bold;
        color: #FFFFFF;
        background-color: #999999;
        border-style: outset;
    }
    div#buttonAlia:active {
        font-weight: bold;
        color: #FFFFFF;
        background-color: #666666;
        border-style: inset;
    }
    //光之翼 QQ:272912705 www.hi.baidu.com/jcomet
    div#buttonAul规则设置常规文本的尺寸和间距,div#buttonAli规则去除列表项的默认项目符号(list-style-type: none)并设置按钮框的尺寸。div#buttonAli a规则使整个按

    钮可点击(height: 100%; 100%; display: block;),它还是设置边界宽度的一个很方便的地方。
    样式的其余部分控制不同按钮状态的外观变化。所有伪类(:link、:visited、:hover、:active)都有一个 color、font-weight、background-color 和 border-style 规则。除

    div#buttonAlia:active规则之外,所有样式都使用 border-style: outset规则,div#buttonAlia:active使用 border-style:inset规则。这样就使按钮状态有一个凸起的外观—

    —当然要将按钮被点击时的情况除外,在按钮被点击时它呈现被按下的状态。
    不同的浏览器呈现 inset 和 outset 边界的方式有很大的不同。Internet Explorer 创建更加精细的效果,在每个边界的内边缘有一个加亮区,在外边缘有一个阴影区。而另一方

    面,Netscape 则以固定的颜色呈现每个边界,这样就产生一个比较有突边的,不怎么圆滑的外观效果。
    方法2:控制单个侧面
    使用 inset/outset 边界样式是模拟3D效果的一种简单快捷的方法。然而,这不是唯一的方法。如果你不喜欢标准的效果,或者你为浏览器在表现方式上的差别而困扰,那么你可

    以自己控制边界的颜色来产生你想要的效果。
    除了使用能border-style 的 inset/outset 属性以及让浏览器处理每个边界的实际颜色之外,你还可以使用自己的样式规则为每个边界单独设置颜色。
    Figure B shows the results of using a style sheet that specifies the colors of each button side individually. The markup is the same as in Figure A. Here's

    the CSS code:
    图 B展示了使用这种方法得出的3D按钮效果,这里样式表单独指定每个按钮侧面的颜色。图 B 所用标记与图 A 中的一样,下面是 CSS 代码:
    body {
        margin: 0px;
        padding: 0px;
    }
    div#buttonA {
        margin-left: 50px;
    }
    div#buttonAul {
        margin: 0px;
        padding: 0px;
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 12px;
        line-height: 30px;
    }
    div#buttonAli {
        list-style-type: none;
        height: 30px;
        125px;
        margin: 10px;
        text-align:center;
    }
    div#buttonAli a {
        text-decoration: none;
        height: 100%;
        100%;
        display: block;
        background-color: #999999;
        border-style: solid;
        border-bottom-color: #333333;
        border-right-color: #555555;
        border-left-color: #BBBBBB;
        border-top-color: #DDDDDD;
    }
    div#buttonAlia:link {
        color: #000000;
        font-weight: bold;
        background-color: #999999;
        border-style: solid;
        border-bottom-color: #333333;
        border-right-color: #555555;
        border-left-color: #BBBBBB;
        border-top-color: #DDDDDD;
    }

    div#buttonAlia:visited {
        color: #000000;
        font-weight: normal;
        background-color: #999999;
        border-style: solid;
        border-bottom-color: #333333;
        border-right-color: #555555;
        border-left-color: #BBBBBB;
        border-top-color: #DDDDDD;
    }
    div#buttonAlia:hover {
        font-weight: bold;
        color: #FFFFFF;
        background-color: #777777;
        border-style: solid;
        border-bottom-color: #333333;
        border-right-color: #555555;
        border-left-color: #BBBBBB;
        border-top-color: #DDDDDD;
    }
    div#buttonAlia:active {
        font-weight: bold;
        color: #FFFFFF;
        background-color: #666666;
        border-style: solid;
        border-top-color: #333333;
        border-left-color: #555555;
        border-right-color: #BBBBBB;
        border-bottom-color: #DDDDDD;
    }
    尽管这块代码明显要比前一个例子中的 CSS 代码要长,但并不是两者间的主要区别。它们的主要区别在于这里使用了一个 border-style: solid规则替换了原来的 border-style:

    outset (或 border-style: inset) 规则,后接几个规则单独设置每个边界的颜色(border-top-color: #DDDDDD等)。
    使用这一方法,你可以完全控制按钮侧面的颜色。也就是说完全由你决定选择合适的颜色来获得你所要的效果——而且,你还要记住交换颜色以使按钮在处于 :active 状态时产生

    被按下的效果。控制这些细节的优点是你可以设置独立的侧面和顶部加亮区的颜色,而且最后的结果在所有浏览器表现更加一致。

  • 相关阅读:
    python爬虫开发与项目实践-学习笔记(一)
    python之TypeError
    学习笔记-python
    python学习之Unable to locate element
    Chrome浏览器之 webdriver(Chrome version must be >= 63.0.3239.0)
    POJ 1830 开关问题 高斯消元
    HDU 4135 Co-prime 容斥原理
    HDU 1796 How many integers can you find 容斥原理
    卡特兰数,组合数,斯特林数,逆元模板
    HDU 6134 Killer Names 数学 斯特林数
  • 原文地址:https://www.cnblogs.com/jcomet/p/1242338.html
Copyright © 2011-2022 走看看