使用css3 屬性如何豐富圖片樣式(圓角 陰影 漸變)_HTML5教程

      編輯Tag賺U幣

      推薦:HTML5是什么 HTML5是什么意思 HTML5簡介
      隨著Windows8正式版發布的腳步近在咫尺,近來關于Win8、IE10、HTML5的新聞逐漸增多,很多朋友對于Win8系統以及IE10瀏覽器都比較了解,但對于HTML5是什么還真有不少朋友不清楚,很多媒體網站在報道IE10瀏覽器支持最新html5的時候,不少朋友還是一頭霧水,以下小編為大家

      css3中,直接在圖片上使用box-shadow 和 border-radius,瀏覽器并不能很好的渲染。但是如果把圖片作為background-image,添加的樣式瀏覽器可以很好的渲染。我將會介紹如何使用box-shadow, border-radius 和 transition創建不同圖片樣式效果。
      問題
      通過查看demo能注意到,我們為第一行圖片設置了border-radius 和 內嵌box-shadow。firefox渲染了圖片的border-radius,但是沒有渲染內嵌box-shadow。chrome和Safari兩種效果都沒有渲染。

      復制代碼 代碼如下:www.wf0088.com

      .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);
      }

      firefox效果
       
      chrome/safari
       

      變通方案
      為了使border-radius 和 內嵌box-shadow能夠正常工作,我們需要把圖片轉換成background-image的方式。
       
      動態方式
      為了動態完成這一工作,我們需要借助jquery為每一個圖片添加背景圖片的包裝。下面的js代碼為每一個圖片添加了一個span的包裝,span的背景圖片路徑就是圖片的路徑。
      代碼比較簡單,我想就沒有講解的必要了。不清楚了可以直接去查jquery的api。

      復制代碼 代碼如下:www.wf0088.com

      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
      <script type="text/javascript">
      $(document).ready(function(){
      $("img").load(function() {
      $(this).wrap(function(){
      return '<span class="image-wrap ' + $(this).attr('class') + '" style="position:relative; display:inline-block; background:url(' + $(this).attr('src') + ') no-repeat center center; width: ' + $(this).width() + 'px; height: ' + $(this).height() + 'px;" />';
      });
      $(this).css("opacity","0");
      });
      });
      </script>

      輸出
      上面的代碼會輸出如下結果:

      復制代碼 代碼如下:www.wf0088.com

      <span class="image-wrap " style="position:relative; display:inline-block; background:url(image.jpg) no-repeat center center; width: 150px; height: 150px;">
      <img src="image.jpg" style="opacity: 0;">
      </span>

      圓形圖片
      添加我們使用border-radius來實現圓形圖片的效果,效果如下:
       
      css:

      復制代碼 代碼如下:www.wf0088.com

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

      卡片風格
      下面是卡片風格的圖片,使用了多個內嵌box-shadow。
       
      css:

      復制代碼 代碼如下:www.wf0088.com

      .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;
      }

      浮雕風格
      下面是浮雕效果。
       
      css:

      復制代碼 代碼如下:www.wf0088.com

      .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;
      }

      柔性浮雕風格
      相對于浮雕樣式,新樣式添加了1px blur屬性
       
      css:

      復制代碼 代碼如下:www.wf0088.com

      .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;
      }

      摳圖風格
      使用內嵌box-shadow就可以實現摳圖效果。
       
      css:

      復制代碼 代碼如下:www.wf0088.com

      .cut-out .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: 20px;
      -moz-border-radius: 20px;
      border-radius: 20px;
      }

      變形和發光
      在這個例子中我們為圖片包裝添加transition屬性,鼠標滑過的時候,他會從圓角變為圓形。然后我們使用多個box-shadow實現發光效果。
       
      css:

      復制代碼 代碼如下:www.wf0088.com

      .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;
      }

      高光效果
      高光的效果是通過為元素添加 :after 偽類實現的。
       
      css:

      復制代碼 代碼如下:www.wf0088.com

      .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%);
      }

      倒影效果
      在這個例子中,我們將高光效果移到底部就實現倒影效果。
       
      css:

      復制代碼 代碼如下:www.wf0088.com

      .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;
      }

      高光和倒影
      本例我們使用:before 和 :after 將高光和倒影效果組合起來。
       
      css:

      復制代碼 代碼如下:www.wf0088.com

      .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%);
      }

      膠帶風格
      在這個例子中,我們使用:after來實現膠帶的效果。
       
      css:

      復制代碼 代碼如下:www.wf0088.com

      .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);
      }

      變形和著色
      在這個例子中,我們在元素上使用:after,當鼠標進過的時候實現徑向漸變的效果。

      css:

      復制代碼 代碼如下:www.wf0088.com

      .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);
      }

      羽化邊緣圓形
      我們同樣可以使用徑向漸變產生遮罩,實現羽化的效果。
       
      css:

      復制代碼 代碼如下:www.wf0088.com

      .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);
      }

      瀏覽器兼容性
      這種實現方式在大多數支持border-radius, box-shadow, :before and :after特性的瀏覽器中(例如Chrome, Firefox 和 Safari),都能很好的工作。在不支持新特性的瀏覽器中,只會顯示原始圖片。
      創造你自己的實現
      借助:before 和:after偽類能為圖片創造很多種樣式,你可以自己嘗試創建出新的效果。


      分享:HTML4和HTML5之間除了相似以外的10個主要不同
      HTML5是最新的HTML標準,重新開發一個HTML5的網站,要比把一個網站從HTML4遷移到HTML5上容易的多,這是因為這兩個版本之間有很大不同之處

      來源:未知//所屬分類:HTML5教程/更新時間:2013-04-22
      相關HTML5教程