解决img对大部分CSS样式不支持的问题

主要参考:

http://webdesignerwall.com/demo/css3-image-styles/

http://www.qianduan.net/css3-image-styles.html

详情到上面两个连接看。


主要自己整理一下,顺便把jQuery的代码专为JavaScript,做个备忘。

DEMO:http://jsfiddle.net/QkRKC/embedded/result/


代码:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
    function changeImg(e) {
        var img = e.target,
            imageWarp = document.createElement("span");
        imageWarp.className = "image-wrap " + img.className;
        imageWarp.style.cssText = "position:relative; display:inline-block; background:url(" +  img.src 
            + ") no-repeat center center; width:" + img.width + "px; height:" + img.height + "px;"
        img.insertAdjacentElement("beforebegin", imageWarp);
        imageWarp.appendChild(img);
    }

    document.addEventListener("DOMContentLoaded", function() {
        var imgs = document.querySelectorAll("img"),
        length = imgs.length;
        
        for(var i = 0; i < length; i++) {
            imgs[i].style.opacity = 0;
            imgs[i].onload = changeImg;
        }
    }, false);
</script>
<style>
    body {
        width:480px;
        margin:0 auto;
    }
    div {
        text-align:center;
        margin-bottom:20px
    }

    /* NORMAL */
    .normal img {
        border: solid 5px #000;
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
        -webkit-box-shadow: inset 0 1px 5px rgba(0,0,0,.5);
        -moz-box-shadow: inset 0 1px 5px rgba(0,0,0,.5);
        box-shadow: inset 0 1px 5px rgba(0,0,0,.5);
    }

    /* CIRCLE */
    .circle .image-wrap {
        -webkit-border-radius: 50em;
        -moz-border-radius: 50em;
        border-radius: 50em;
    }

    /* PHOTO */
    .card .image-wrap {
        -webkit-box-shadow: inset 0 0 1px rgba(0,0,0,.8), inset 0 2px 0 rgba(255,255,255,.5), inset 0 -1px 0 rgba(0,0,0,.4);
        -moz-box-shadow: inset 0 0 1px rgba(0,0,0,.8), inset 0 2px 0 rgba(255,255,255,.5), inset 0 -1px 0 rgba(0,0,0,.4);
        box-shadow: inset 0 0 1px rgba(0,0,0,.8), inset 0 2px 0 rgba(255,255,255,.5), inset 0 -1px 0 rgba(0,0,0,.4);
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }

    /* EMBOSSED */
    .embossed .image-wrap {
        -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,.8), inset 0 2px 0 rgba(255,255,255,.5), inset 0 -7px 0 rgba(0,0,0,.6), inset 0 -9px 0 rgba(255,255,255,.3);
        -moz-box-shadow: inset 0 0 2px rgba(0,0,0,.8), inset 0 2px 0 rgba(255,255,255,.5), inset 0 -7px 0 rgba(0,0,0,.6), inset 0 -9px 0 rgba(255,255,255,.3);
        box-shadow: inset 0 0 2px rgba(0,0,0,.8), inset 0 2px 0 rgba(255,255,255,.5), inset 0 -7px 0 rgba(0,0,0,.6), inset 0 -9px 0 rgba(255,255,255,.3);
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }

    /* SOFT EMBOSSED */
    .soft-embossed .image-wrap {
        -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,1), inset 0 2px 1px rgba(255,255,255,.5), inset 0 -9px 2px rgba(0,0,0,.6), inset 0 -12px 2px rgba(255,255,255,.3);
        -moz-box-shadow: inset 0 0 4px rgba(0,0,0,1), inset 0 2px 1px rgba(255,255,255,.5), inset 0 -9px 2px rgba(0,0,0,.6), inset 0 -12px 2px rgba(255,255,255,.3);
        box-shadow: inset 0 0 4px rgba(0,0,0,1), inset 0 2px 1px rgba(255,255,255,.5), inset 0 -9px 2px rgba(0,0,0,.6), inset 0 -12px 2px rgba(255,255,255,.3);
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }

    /* CUTOUT */
    .cutout {
        background: #222;
        padding: 20px 40px 50px;
        color: #fff;
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }
    .cutout .image-wrap {
        -webkit-box-shadow: 0 1px 0 rgba(255,255,255,.2), inset 0 4px 5px rgba(0,0,0,.6), inset 0 1px 0 rgba(0,0,0,.6);
        -moz-box-shadow: 0 1px 0 rgba(255,255,255,.2), inset 0 4px 5px rgba(0,0,0,.6), inset 0 1px 0 rgba(0,0,0,.6);
        box-shadow: 0 1px 0 rgba(255,255,255,.2), inset 0 4px 5px rgba(0,0,0,.6), inset 0 1px 0 rgba(0,0,0,.6);
        -webkit-border-radius: 30em;
        -moz-border-radius: 30em;
        border-radius: 30em;
    }

    /* MORPHING + GLOWING */
    .morphing-glowing {
        background: #222;
        padding: 20px 40px 50px;
        color: #fff;
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }
    .morphing-glowing .image-wrap {
        -webkit-transition: 1s;
        -moz-transition: 1s;
        transition: 1s;
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }
    .morphing-glowing .image-wrap:hover {
        -webkit-box-shadow: 0 0 20px rgba(255,255,255,.6), inset 0 0 20px rgba(255,255,255,1);
        -moz-box-shadow: 0 0 20px rgba(255,255,255,.6), inset 0 0 20px rgba(255,255,255,1);
        box-shadow: 0 0 20px rgba(255,255,255,.6), inset 0 0 20px rgba(255,255,255,1);
        -webkit-border-radius: 60em;
        -moz-border-radius: 60em;
        border-radius: 60em;
    }

    /* GLOSSY */
    .glossy {
        background: #222;
        padding: 20px 40px 50px;
        color: #fff;
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }
    .glossy .image-wrap {
        -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.5);
        -moz-box-shadow: inset 0 -1px 0 rgba(0,0,0,.5);
        box-shadow: inset 0 -1px 0 rgba(0,0,0,.5);
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }
    .glossy .image-wrap:after {
        position: absolute;
        content: ' ';
        width: 100%;
        height: 50%;
        top: 0;
        left: 0;
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
        background: -moz-linear-gradient(top, rgba(255,255,255,0.7) 0%, rgba(255,255,255,.1) 100%);
        background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.7)), color-stop(100%,rgba(255,255,255,.1)));
        background: linear-gradient(top, rgba(255,255,255,0.7) 0%,rgba(255,255,255,.1) 100%);
    }

    /* REFLECTION */
    .reflection .image-wrap {
        -webkit-box-shadow: inset 0 0 1px rgba(0,0,0,.5), inset 0 2px 0 rgba(255,255,255,.5), inset 0 -1px 0 rgba(0,0,0,.5);
        -moz-box-shadow: inset 0 0 1px rgba(0,0,0,.5), inset 0 2px 0 rgba(255,255,255,.5), inset 0 -1px 0 rgba(0,0,0,.5);
        box-shadow: inset 0 0 1px rgba(0,0,0,.5), inset 0 2px 0 rgba(255,255,255,.5), inset 0 -1px 0 rgba(0,0,0,.5);
        -webkit-transition: .5s;
        -moz-transition: .5s;
        transition: .5s;
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }
    .reflection .image-wrap:after {
        position: absolute;
        content: ' ';
        width: 100%;
        height: 30px;
        bottom: -31px;
        left: 0;
        -webkit-border-top-left-radius: 20px;
        -webkit-border-top-right-radius: 20px;
        -moz-border-radius-topleft: 20px;
        -moz-border-radius-topright: 20px;
        border-top-left-radius: 20px;
        border-top-right-radius: 20px;
        background: -moz-linear-gradient(top, rgba(0,0,0,.3) 0%, rgba(255,255,255,0) 100%);
        background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(0,0,0,.3)), color-stop(100%,rgba(255,255,255,0)));
        background: linear-gradient(top, rgba(0,0,0,.3) 0%,rgba(255,255,255,0) 100%);
    }
    .reflection .image-wrap:hover {
        position: relative;
        top: -8px;
    }

    /* GLOSSY + REFLECTION */
    .glossy-reflection {
        background: #000;
        padding: 20px 40px 50px;
        color: #fff;
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }
    .glossy-reflection .image-wrap {
        -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.6);
        -moz-box-shadow: inset 0 -1px 0 rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.6);
        box-shadow: inset 0 -1px 0 rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.6);
        -webkit-transition: 1s;
        -moz-transition: 1s;
        transition: 1s;
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }
    .glossy-reflection .image-wrap:before {
        position: absolute;
        content: ' ';
        width: 100%;
        height: 50%;
        top: 0;
        left: 0;
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
        background: -moz-linear-gradient(top, rgba(255,255,255,0.7) 0%, rgba(255,255,255,.1) 100%);
        background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.7)), color-stop(100%,rgba(255,255,255,.1)));
        background: linear-gradient(top, rgba(255,255,255,0.7) 0%,rgba(255,255,255,.1) 100%);
    }
    .glossy-reflection .image-wrap:after {
        position: absolute;
        content: ' ';
        width: 100%;
        height: 30px;
        bottom: -31px;
        left: 0;
        -webkit-border-top-left-radius: 20px;
        -webkit-border-top-right-radius: 20px;
        -moz-border-radius-topleft: 20px;
        -moz-border-radius-topright: 20px;
        border-top-left-radius: 20px;
        border-top-right-radius: 20px;
        background: -moz-linear-gradient(top, rgba(230,230,230,.3) 0%, rgba(230,230,230,0) 100%);
        background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(230,230,230,.3)), color-stop(100%,rgba(230,230,230,0)));
        background: linear-gradient(top, rgba(230,230,230,.3) 0%,rgba(230,230,230,0) 100%);
    }

    /* TAPE */
    .tape .image-wrap {
        -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,.7), inset 0 2px 0 rgba(255,255,255,.3), inset 0 -1px 0 rgba(0,0,0,.5), 0 1px 3px rgba(0,0,0,.4);
        -moz-box-shadow: inset 0 0 2px rgba(0,0,0,.7), inset 0 2px 0 rgba(255,255,255,.3), inset 0 -1px 0 rgba(0,0,0,.5), 0 1px 3px rgba(0,0,0,.4);
        box-shadow: inset 0 0 2px rgba(0,0,0,.7), inset 0 2px 0 rgba(255,255,255,.3), inset 0 -1px 0 rgba(0,0,0,.5), 0 1px 3px rgba(0,0,0,.4);
    }
    .tape .image-wrap:after {
        position: absolute;
        content: ' ';
        width: 60px;
        height: 25px;
        top: -10px;
        left: 50%;
        margin-left: -30px;
        border: solid 1px rgba(137,130,48,.2);
        background: -moz-linear-gradient(top, rgba(254,243,127,.6) 0%, rgba(240,224,54,.6) 100%);
        background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(254,243,127,.6)), color-stop(100%,rgba(240,224,54,.6)));
        background: linear-gradient(top, rgba(254,243,127,.6) 0%,rgba(240,224,54,.6) 100%);
        -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.3), 0 1px 0 rgba(0,0,0,.2);
    }

    /* MORPHING & TINTING */
    .morphing-tinting .image-wrap {
        position: relative;
        -webkit-transition: 1s;
        -moz-transition: 1s;
        transition: 1s;
        -webkit-border-radius: 20px;
        -moz-border-radius: 20px;
        border-radius: 20px;
    }
    .morphing-tinting .image-wrap:hover {
        -webkit-border-radius: 30em;
        -moz-border-radius: 30em;
        border-radius: 30em;
    }
    .morphing-tinting .image-wrap:after {
        position: absolute;
        content: ' ';
        width: 100%;
        height: 100%;
        top: 0;
        left: 0;
        -webkit-transition: 1s;
        -moz-transition: 1s;
        transition: 1s;
        -webkit-border-radius: 30em;
        -moz-border-radius: 30em;
        border-radius: 30em;
    }
    .morphing-tinting .image-wrap:hover:after  {
        background: -webkit-gradient(radial, 50% 50%, 40, 50% 50%, 80, from(rgba(0,0,0,0)), to(rgba(0,0,0,1)));
        background: -moz-radial-gradient(50% 50%, circle, rgba(0,0,0,0) 40px, rgba(0,0,0,1) 80px);
    }

    /* FEATHER */
    .feather .image-wrap {
        position: relative;
        -webkit-border-radius: 30em;
        -moz-border-radius: 30em;
        border-radius: 30em;
    }
    .feather .image-wrap:after  {
        position: absolute;
        content: ' ';
        width: 100%;
        height: 100%;
        top: 0;
        left: 0;
        background: -webkit-gradient(radial, 50% 50%, 50, 50% 50%, 70, from(rgba(255,255,255,0)), to(rgba(255,255,255,1)));
        background: -moz-radial-gradient(50% 50%, circle, rgba(255,255,255,0) 50px, rgba(255,255,255,1) 70px);
    }​
</style>
</head>
<body>
    <div class="circle"><h3>circle:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
    <div class="card"><h3>card:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
    <div class="embossed"><h3>embossed:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
    <div class="soft-embossed"><h3>soft-embossed:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
    <div class="cut-out"><h3>cutout:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
    <div class="morphing-glowing"><h3>morphing-glowing:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
    <div class="glossy"><h3>glossy:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
    <div class="reflection"><h3>reflection:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
    <div class="glossy-reflection"><h3>glossy-reflection:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
    <div class="tape"><h3>tape:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
    <div class="morphing-tinting"><h3>morphing-tinting:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
    <div class="feather"><h3>feather:</h3><img class="imgStle1" src="http://lorempixel.com/200/200/"/></div>
</body>
</html>


最后:

因为用了DOMContentLoaded事件,在浏览器支持情况如下。(css样式兼容请自行测试。)

ChromeFirefox (Gecko)Internet ExplorerOperaSafari
0.2+1.0 (1.7 or earlier)+9.0+9.0+3.1+





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值