2011年11月21日 星期一

一些上流的CSS3圖片樣式

直接在圖片元素上直接應用CSS3 inset box-shadow border-radius時,流覽器並不能完美的渲染它們。不過,如果把這個圖片用作背景圖,你就可以可以給它添加任何樣式了,流覽器也會很好地渲染。Darcy Clarke和我做了一個簡單的教程,講解如何使用jQuery來動態地製作完美的圓角圖片。今天我將重溫這個主題然後向你展示使用background-image的方法可以實現多少效果。我將向你展示如何使用box-shadowborder-radius transition 來創作不同的圖片風格。
先看下demo

問題 ( demo)

看一下demo,請注意在第一行的圖片中使用了border-radiusinset box-shadowFirefox會直接在圖片元素上渲染border-radius,但不會渲染inset box-shadowchrome/safari則兩者都不渲染。

解決方案

要讓 border-radius inset box-shadow 正常工作,解決方案就是將實際圖片變作background-image.

動態方法

要想動態實現,可以簡單的使用jQuery為每個圖片元素外麵包一個背景圖片。下面的jQuery代碼會將所有圖片外麵包一個span標籤然後將圖片用作其背景圖片(jQuery代碼由Darcy Clarke編寫)
1
2
3
4
5
6
7
8
9
10
11
12
13
<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>

輸出

上面的腳本將會輸出下面的HTML代碼:
1
2
3
<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>

圓形圖片( demo)

現在,圖片被用作背景圖了,你可以給它添加任意你想要的樣式上去。下面是一個簡單的使用border-radius實現的圓形圖片。如果你對CSS3不太瞭解,可以閱讀下Basics of CSS3,也可以搜索一下前端觀察

CSS

1
2
3
4
5
.circle .image-wrap {
      -webkit-border-radius: 50em;
      -moz-border-radius: 50em;
      border-radius: 50em;
}

卡片風格( demo)

下面是一個像卡片的圖片風格,用了多個inset box-shadow

CSS

1
2
3
4
5
6
7
8
9
.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;
}

浮雕風格 ( demo)

通過一點兒改變,我可以將卡片風格轉換為浮雕。。。

CSS

1
2
3
4
5
6
7
8
9
.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;
}

軟浮雕風格 ( demo)

和浮雕風格真的很像,我只是加了1px的虛化~~

CSS

1
2
3
4
5
6
7
8
9
.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;
}

剪貼畫風格( demo)

同樣只是inset box-shadow,我可以讓它看起來像剪貼畫。

CSS

1
2
3
4
5
6
7
8
9
.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;
}

變形和發光 ( demo)

這個例子中,我為圖片外容器增加了變形。mouseover的時候,它將從圓角形狀變為圓形,然後增加了發光效果。發光效果通過多重box-shadow實現。

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.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;
}

發光遮罩 ( demo)

發光漸變遮罩是通過:after偽元素實現的。。。

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
.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%);
}

倒影 ( demo)

這個例子中,我將遮罩漸變移動到底部,於是它就成了倒影。。。

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.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;
}

光澤和倒影( demo)

這個例子中,我同時使用了:before:after偽元素來實現帶倒影的光澤效果。

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
.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%);
}

膠帶風格( demo)

這裡使用了:after偽元素來在圖片頂部實現了膠帶風格的漸變。

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.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);
}

變形和著色 ( demo)

在下面的這個例子中,我用了 :after元素來在mouseover的時候添加發光漸變。

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
.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);
}

羽化邊緣的圓形(demo)

發散漸變也可以用作遮罩層來實現圓形羽化效果。

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.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-radiusbox-shadow:before:after偽元素的流覽器上,比如 Chrome/Safari/Firefox等,而在一些落後的瀏覽器比如IE9(包括IE9)則不能完全支持——IE6/7/8沒有任何表現,IE9會 有普通的圓角。
文章來自:: 前端觀察
文章提供:: BAYSTARS DESIGN網頁設計公司

2011年11月20日 星期日

回應式網頁設計

這個話題最近很火爆,我也一直在關注,回應式網頁設計和移動互聯網密切相關,並因移動終端的豐富和普及而興盛,並且是一個頗具爭議的話題,我今天將和大家探討下。
上周寫了個簡單的ppt在組內大概介紹了下,感興趣的話可以先看下這個PPT

行動互聯網的現狀和未來

在說到這個話題前,我們先看下網頁設計和前端開發的現狀:
  1. 全球有超過53億手機用戶(包括傳統手機)
  2. 國內3G用戶超過1億
  3. iPhone4手機在2010年出貨量超過3000萬部;
  4. iPhone 4S上市前3天賣掉400萬部;
  5. Android手機每天啟動超過50萬部;
  6. iPad出貨量已經超過2.5億部;
  7. 預計到2015年,移動互聯網的資料流程量將超越桌面端的流量。
  8. 。。。
嗯,大家也許已經開始注意到,自己和身邊的朋友也都越來越多的用上了iPhone或者android手機或平板——一兩年前我們預料的移動互聯網時代即將來臨,現在已然實現了——我們正處在移動互聯網快速發展的時代——已經不再是起步階段了。

那麼,什麼是回應式網頁設計?

回應式網頁設計是Ethan Marcotte在去年5月份提出的一個概念,簡而言之,就是一個網站能夠相容多個終端——而不是為每個終端做一個特定的版本。這個概念可以說是是為移動互聯網而生的!
或 許大家之前會注意到,有很多知名網站都推出了iPhone或針對智慧手機的專門網站,比如3g.qq.com、m.taobao.com、 ipad.xxx.com等等。。。甚至前端觀察之前也嘗試過用wordpress外掛程式實現m.qianduan.net的移動網站。
那麼問題就來了——我們要為每一個設備做一個單獨的網站嗎?來讓網站在每個設備中得到相應的視覺風格和操作體驗?
這樣勢必就要增加很多的工作量,而且很多還是重複的。
我們在做頁面的時候,一般很強調模組化的概念,我們要求一個合格的模組要能夠“可擴展、無侵染”,它要能夠用在任何地方都能夠正常的顯示。回應式網頁設計與此類似——網站在任何設備中都能夠正常適配,而不用為每個設備單獨做個子網站!
但是,產品經理和設計師可能還是會要求網站在各個流覽器裡面表現要一模一樣,甚至要圖元還原——WTF!不同的流覽器本身的功能、行為和處理方式都不一樣,為什麼要表現完全一樣?!
let the browser flow…

怎麼做?

其實回應式網頁的實現很簡單,都是大家熟悉的技術。

media query(媒體查詢)

因為現在主流的智慧終端機都是基於iOS和Android的,而它們自帶的流覽器都是基於webkit內核,所以我們可以完全使用viewport屬性和media query技術實現網站的回應性:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
後面的initial-scale表示初始縮放,maximum-scale表示最大縮放比例,1意味著不能進行縮放。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* for 240 px width screen */
@media only screen and (max-device-width:240px){
    selector{
    }
}

/* for 360px width screen */
@media only screen and (min-device-width:241px) and (max-device-width:360px){
    selector{
    }
}

/* for 480 px width screen */
@media only screen (min-device-width:361px)and (max-device-width:480px){
    selector{
    }
}
當然依靠螢幕寬度來進行適配是最簡單的方法,media query有很多參數可以使用比如orientation、aspect-ratio等,不太瞭解的可以查看這篇詳細的介紹
其實,media query是回應式網頁設計中被用到最多的技術。

fluid grid(流體網格)

很 多專案都在使用網格技術(或者叫柵格),前幾年960.gs很流行,但是隨著螢幕解析度的普遍提升,它已經不太適合當前需求了,於是最近幾年 fluid grid開始逐漸多了起來,這種技術其實也很簡單,只是將格柵的單位由px變成%,用百分比來控制頁面每列的寬度,從而實現寬度的自我調整。
使用流體網格的網站能夠根據螢幕寬度自動調整頁面中每列的寬度,從而保證頁面的完整展現和基本功能。這也是一種不錯的方法。

flex box

flex box是css3中的新技術,它很強大,可以實現很多我們之前無法想像的自我調整佈局。
有時我們希望網站能夠以webapp的外觀呈現給手機用戶,flexbox是個不二的選擇。
比如,要實現這樣的簡單結構:
它很像一個app的結構,頭部和底部固定,中間高度自我調整,用flexbox可以簡單實現:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
.flex_wrap{
      height:100%;
      display: box;  
      display: -moz-box;  
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -moz-box-orient: vertical;
      box-orient: vertical;
}
.flex_bd{
      box-flex: 1;
      -moz-box-flex: 1; 
      -webkit-box-flex:1;
      background:#E7E7E7;
      overflow-y:auto;
}
.flex_hd{
      background:#16364C;
      height:30px;
      line-height:30px;
      text-align:center;
      color:#FFF;
      font-weight:700;
      font-family:14px;
}
.flex_ft{
      background:green;
      height:30px;
      line-height:30px;
      text-align:right;
}
HTML代碼:
1
2
3
4
5
6
7
8
9
10
11
12
<div>
      <div>高雄網頁設計div>
      <div>
            <p>這裡是主內容區p>
            <p>這裡是主內容區p>
      div>
      <div>
            <a href="http://www.baystars.cc/" title="關於我們">關於我們a>
            <a href="http://www.baystars.cc/" title="版權聲明">版權聲明a>
            <a href="http://www.baystars.cc/" title="網站地圖">網站地圖a>
      div>
div>
雖 然這裡還會有點兒問題,比如主內容區域內容太多會被隱藏掉,因為android webkit和iOS 5之前的mobile safari均不支持overflow:scroll屬性,但是這個問題還是很好解決的,比如在裡面嵌套一個子容器,用js來給定個高度並使用定位來實現 捲軸從而完整展示內容,或者直接使用iscroll等js庫來實現。好消息是,iOS5中safari開始支持overflow:scroll了。

不足之處

如果你關注網站性能之類的話,可能已經發現了一些問題:
  • 載入很多不需要的資源,比如多餘的圖片和樣式內容
  • 頻寬限制
  • 移動終端的記憶體和CPU限制
  • 圖片大小和螢幕大小不匹配
嗯,任何一個方案都不是完美的,但也不會很糟糕。下面我們會提到一些可行的優化方案:

HTML5本機存放區

對於支持HTML5 appcache /manifest特性的流覽器,我們可以將一些不常改動的靜態資源存儲到本地,比如css檔,css中用到的圖片,以及一些js檔等:
1
2
3
4
5
6
7
8
9
10
CACHE MANIFEST
NETWORK:
/*

CACHE:
img/bg.jpg
img/days.otf
slideshow.js
slideshow.css
classList.js
然後將檔保存為manifest格式,並在HTML標籤中引入即可:
<html manifest="responsive.manifest">
這樣,用戶在第一次訪問的時候會慢一點兒,但是後續訪問會很快,3G網路中也能為使用者節省頻寬。

移動設備優先

一種新的設計流程是,先為移動設備設計介面,然後將PC端作為一個擴展。
這樣做的好處是顯而易見的,移動終端不會載入多餘的資源,也不會因為PC端的樣式而重繪頁面,同時也不會影響PC端的表現。

流體圖片(fluid image)

頁面中的圖片有時會比手機/平板的螢幕(viewport)寬,這樣會將頁面容器撐開,但是移動流覽器又不能scroll,結果圖片被切掉一部分,然後還會有一部分內容被隱藏掉,使用者看不到。
解決這個問題的方法很簡單,將img的最大寬度設置成100%就可以了:
img{max-width:100%}
嗯,這裡的前提是,沒有給img標籤設置寬度和高度,否則顯示會有問題。另外不建議直接設置width=”100%”,因為會把小圖拉大,模糊顯示。
同理,video標籤和iframe標籤的寬度也可以這樣做,而且最好不要使用iframe,寬度是個問題,性能也是一個方面吧。

CSS3 image

這個方法有些驚豔
我 們都知道可以用::before和::after偽元素+content屬性來動態顯示一些內容或者做其它很酷的事情,而且在CSS 2.1中即被支持。不過content屬性在CSS 2.1中只能用於這兩個偽元素中,而在CSS3中,任何元素都可以使用content屬性了,這個方法就是結合css3 的attr屬性和HTML自訂屬性的功能:
<img src="image.jpg" 
      data-src-600px="image-600px.jpg" 
      data-src-800px="image-800px.jpg" alt="">
然後用media query來動態賦值:
1
2
3
4
5
6
7
8
9
10
@media (min-device-width:600px) { 
      img[data-src-600px] {
            content: attr(data-src-600px, url); 
      }
}
@media (min-device-width:800px) {
      img[data-src-800px] {
            content: attr(data-src-800px, url);
      }
}
當然,這種方法也有不足之處,比如PC端寬螢幕需要載入兩個圖片檔,然後我們也要為此準備多張圖片檔等。

pre標籤

有的網站,比如,像前端觀察這樣的技術博客,會用pre來顯示原始程式碼,而流覽器對pre標籤默認設置white-space:pre,這樣,代碼就不會換行,從而撐開子容器,造成內容被隱藏的問題:
右邊的文字被隱藏掉了。
解決方法很簡單:
pre{
      white-space:pre-wrap
      word-wrap: break-word;
     word-break: break-all;/*如果要相容IE,可以加上這句,連續字母斷行的問題傷不起啊。。。。*/
}
當然,不只是pre標籤,關鍵是white-space和word-break屬性的值。
嗯,主要的技術和技巧其實就這些,大家不會陌生。下面是一些比較有用的工具什麼的:

回應式網頁設計工具與資源

國外在回應式網頁設計上已經走的很遠了,已經有很多工具和資源供我們參考和使用:

CSS 框架

實用工具

爭論和總結

回 應式網頁設計被提出以來,爭論就不斷,其實核心問題只有兩個個:太多的資源請求和有限的終端支援之間的矛盾、回應式的網頁設計和移動終端在使用者體 驗和視覺風格上的差異。前者不能容忍在弱小的手機/平板上通過龜速的3G/2G網路來載入一個笨重的PC端頁面,而後者糾結響應式網站不像手機網站。
我的想法是,具體問題具體分析,比如,強內容的網站,完全可以嘗試回應式網站,而重視覺和功能的網站,則可以嘗試建立一個獨立的移動網站。
另外,顯然,回應式網頁設計的大部分技術,是可以用在WebApp開發中的。
文章來自: BAYSTARS DESIGN網頁設計公司

2011年11月17日 星期四

CSS自定義滾動條樣式

相信很多人都遇到過在設計中自定義滾動條樣式的情景,之前我都是努力說服設計師接受瀏覽器自帶的滾動條樣式,但是這樣只能規避還是解決不了問題,最近在項目中遇到了,正好來總結一下。當然,兼容所有瀏覽器的滾動條樣式目前是不存在的。

IE下的滾動條樣式

IE是最早提供滾動條的樣式支持,嗯,好多年了,但是其它瀏覽器一直沒有支持,IE獨孤求敗了。

這些樣式規則很簡單:
‧scrollbar-arrow-color: color; /*三角箭頭的顏色*/
‧scrollbar-face-color: color; /*立體滾動條的顏色(包括箭頭部分的背景色)*/
‧scrollbar-3dlight-color: color; /*立體滾動條亮邊的顏色*/
‧scrollbar-highlight-color: color; /*滾動條的高亮顏色(左陰影?)*/
‧scrollbar-shadow-color: color; /*立體滾動條陰影的顏色*/
‧scrollbar-darkshadow-color: color; /*立體滾動條外陰影的顏色*/
‧scrollbar-track-color: color; /*立體滾動條背景顏色*/
‧scrollbar-base-color:color; /*滾動條的基色*/

大概就這些,你也可以定義cursor來定義滾動條的鼠標手勢。

這裡,很久以前danger做了個基於Flash的可視化工具,簡單但是好用:



選中CSS選項即可自動生成CSS樣式,這裡不再過多的介紹了。嗯,多謝大貓老濕推薦。

webkit的自定義滾動條樣式

yes,這裡才是今天要重點介紹的。

從上一部分的樣式名中就可以看到,IE只能定義相關部分的color等屬性,這樣太不靈活了。

webkit最近實現了對滾動條的支持,先看一個簡單的demo:



不過,webkit不再是用簡單的幾個CSS屬性,而是一坨的CSS偽元素:
‧::-webkit-scrollbar 滾動條整體部分
‧::-webkit-scrollbar-button 滾動條兩端的按鈕
‧::-webkit-scrollbar-track 外層軌道
‧::-webkit-scrollbar-track-piece 內層軌道,滾動條中間部分(除去)
‧::-webkit-scrollbar-thumb (拖動條?滑塊?滾動條裡面可以拖動的那個,腫麼翻譯好呢?)
‧::-webkit-scrollbar-corner 邊角
‧::-webkit-resizer 定義右下角拖動塊的樣式

通過這些偽元素,可以完全的重寫一個網站的滾動條樣式。

當然webkit提供的不止這些,還有很多偽類,可以更豐富滾動條樣式:
‧:horizontal – horizontal偽類應用於水平方向的滾動條
‧:vertical – vertical偽類應用於豎直方向的滾動條
‧:decrement – decrement偽類應用於按鈕和內層軌道(track piece)。它用來指示按鈕或者內層軌道是否會減小視窗的位置(比如,垂直滾動條的上面,水平滾動條的左邊。)
‧:increment – increment偽類和decrement類似,用來指示按鈕或內層軌道是否會增大視窗的位置(比如,垂直滾動條的下面和水平滾動條的右邊。)
‧:start – start偽類也應用於按鈕和滑塊。它用來定義對象是否放到滑塊的前面。
‧:end – 類似於start偽類,標識對象是否放到滑塊的後面。
‧:double-button – 該偽類以用於按鈕和內層軌道。用於判斷一個按鈕是不是放在滾動條同一端的一對按鈕中的一個。對於內層軌道來說,它表示內層軌道是否緊靠一對按鈕。
‧:single-button – 類似於double-button偽類。對按鈕來說,它用於判斷一個按鈕是否自己獨立的在滾動條的一段。對內層軌道來說,它表示內層軌道是否緊靠一個single-button。
‧:no-button – 用於內層軌道,表示內層軌道是否要滾動到滾動條的終端,比如,滾動條兩端沒有按鈕的時候。
‧:corner-present – 用於所有滾動條軌道,指示滾動條圓角是否顯示。
‧:window-inactive – 用於所有的滾動條軌道,指示應用滾動條的某個頁面容器(元素)是否當前被激活。(在webkit最近的版本中,該偽類也可以用於::selection偽元素。webkit團隊有計劃擴展它並推動成為一個標準的偽類)

另外,:enabled、:disabled、:hover 和 :active 等偽類同樣可以用於滾動條中。

關於具體的demo,這裡不再做了,網上已經有很多demo可以參考,比如,webkit官方的這個,具體的線上項目中也有現成的例子,比如,QQ空間的簽到彈出框和豆瓣說的右側詳情欄(某條信息評論多的時候會顯示)。

值 得一提的是,webkit的這個偽類和偽元素的實現很強大,雖然類目有些多,但是我們可以把滾動條當成一個頁面元素來定義,也差不多可以用上一些高級的 CSS3屬性,比如漸變、圓角、RGBa等等,當然有些地方也可以用圖片,然後圖片也可以轉換成Base64,總之,可以盡情發揮了。

參考文章:
Styling Scrollbars
Creating custom scrollbars with CSS; How CSS isn』t great for every task


文章來自WOW
文章提供: BAYSTARS DESIGN網頁設計公司

2011年11月16日 星期三

清除浮動新說

起源:
程序代碼 程序代碼
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
.clearfix { display: inline-table; }
/* Hides from IE-mac \*/
* html .clearfix { height: 1%; }
.clearfix { display: block; }
/* End hide from IE-mac */


說明:
‧*對大多數符合標準的瀏覽器應用第一個聲明塊,目的是創建一個隱形的內容為空的塊來為目標元素清除浮動。
‧*第二條為clearfix應用 inline-table 顯示屬性,僅僅針對IE/Mac。
*利用 * / 對 IE/Mac 隱藏一些規則:
‧* height:1% 用來觸發 IE6 下的haslayout。
‧*重新對 IE/Mac 外的IE應用 block 顯示屬性。
‧*最後一行用於結束針對 IE/Mac 的hack。

由於此方法針對的瀏覽器或成為歷史(尤其是Mac下的IE5 ),或正在靠近標準的路上,這個方法就不再那麼與時俱進了。

拋掉對 IE/Mac 的支持之後,新的清除浮動方法:
程序代碼 程序代碼
/* new clearfix */
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
* html .clearfix             { zoom: 1; } /* IE6 */
*:first-child+html .clearfix { zoom: 1; } /* IE7 */


說明:
IE6 和 IE7 都不支持 :after 這個偽類,因此需要後面兩條來觸發IE6/7的haslayout,以清除浮動。幸運的是IE8支持 :after 偽類。因此只需要針對IE6/7的hack了。

糖伴西紅柿說:
Jeff Starr 在這裡針對IE6/7用了兩條語句來觸發haslayout。我在想作者為什麼不直接用 * 來直接對 IE6/7 同時應用 zoom:1 或者直接就寫成:
程序代碼 程序代碼
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
.clearfix{*zoom:1;}


以目前的淺薄認知來講,以上寫法應該也可以直接達到同樣效果。關於這個地方,在文章的評論裡也有些討論,希望再聽聽大家的高見。

平時都是用 overflow:hidden 來清除浮動的,因為夠簡單粗暴。但是 overflow 有時候也不太適用:

父級元素使用 overflow:hidden 時,如果其子元素定位到部分或全部在父元素之外,父元素就會對超出其外的子元素部分進行裁剪。

對 css3 來說,也會 overflow:hidden 也會對一些屬性產生影響。
例如 box-shadow, 當父元素使用 overflow:hidden 屬性時,box-shadow 會被裁剪。



其他可能被影響的元素如 text-shadow 和 transform。可以參考 Andy Ford 的 demo

對於那些不願意再給標籤添加額外的 clearfix 類來清除浮動的人來說,直接將需要清除浮動的元素添加進清除浮動代碼塊這個組也是一個辦法。
程序代碼 程序代碼
.group:after,
#content:after,
#sidebar:after,
#some .other .thing:after
{
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
zoom:1;
}

這種情況下,html 和 css 文件就像一個蹺蹺板的兩頭。html 代碼倒是整潔了,css 代碼卻出現了一定的繁冗。而且一旦專題頁面過長,或者在項目中使用,用這個清除組的方式反而會不勝其擾。

歸結下來,還是得看個人、項目的權衡選擇.雖然我一直用簡單粗暴的overflow:hidden,但是現在更傾向於使用 clearfix,感覺這種一體化的東西更靠譜,能避免偶爾對 zoom 的遺忘。

成熟的東西穩定性好,但是會比較複雜、厚重;簡單的靈活性好,但是過於零散、隨意,沒有組織性,還沒那麼穩定.權衡決定到底要使用那種方法,有時候反而比問題本身還讓人頭疼.

我 個人的想法是沒有好與壞的區別,只有合適不合適的區別。但是我們一直都受困於所受的教育,什麼問題都有標準答案,非對即錯,非好即壞。經常可見對一些工具 的討論,都是奔著爭出個誰好誰壞而去的,例如 jQuery mootools YUI.相比起到底是好誰壞,我們還是最好趕緊轉變思想,摒棄」一刀切」的思想吧。

最後,關於為什麼要採用一下這種複雜方式來針對IE6/7,而不採用其他稍微簡潔的方式,還希望大家指點下迷津。
程序代碼 程序代碼
* html .clearfix             { zoom: 1; } /* IE6 */
*:first-child+html .clearfix { zoom: 1; } /* IE7 */


Reference:
‧[1].Jeff Starr,The New Clearfix Method, December 6, 2009
‧[2].Andy Ford, Saying Goodbye to the overflow: hidden Clearing Hack, December 10th, 2009

文章來自WOW

文章提供BAYSTARS DESIGN網頁設計公司

2011年11月15日 星期二

2010年最新的100個免費HTML模板

Solitude


預覽 | 直接下載

其他有需要請到這裡下載:CSS Templates

文章來自WOW
文章提供 BAYSTARS DESIGN網頁設計公司

2011年3月22日 星期二

WEB2.0網站介紹::樂柚:專注於興趣的社會化網路

 


樂柚是一個專注於興趣的社會化網路,樂柚專注于服務於使用者的興趣,為用戶的興趣提供更有價值的資訊與互動,將人與人通過興趣連接在一起。簡單來講,樂柚希望通過用戶基於興趣來發展自己的關係圈,並以此來實現基於興趣的社會化。

用戶在註冊之後,用戶可以選擇一些自己感興趣的興趣點,比如iPhone,足球等等,之後樂柚便會給您推薦您選取話題下的內容,你可以查看這個話題下的內容,查看也對這個話題感興趣的使用者,關注也對這些話題感興趣的使用者,發表這個話題的資訊等等。




當我第一次看到樂柚的時候,首先想到的是Hunch.com,基於興趣的社會化網路將是非常有價值的,我也很高興看到樂柚在這個領域來探索和嘗試, 當然目前而言樂柚在對於關係的構建上還是有不少值得去改進的空間,比如hunch直接使用Twitter和Facebook的關係,在國內則可以考慮新浪 微博和人人。基於興趣的社區的關鍵在於基於興趣構建關係和資訊,沒有必要花精力再去構建新的關係,因為真實的關係其實只有一套。另外就是基於興趣的對於人的推薦,只有通過興趣推薦用戶,讓用戶的社交圈得到了拓展,這樣的基於興趣的社交網路才能做得更大!

興趣圖譜在未來一定會是一個趨勢,這個是由網路服務的社會化趨 勢所決定的,過去的互聯網服務更多的是實現了功能和關係,而人在現實生活中,人的需求往往也是由於對於某個領域的興趣,由於這些興趣拓展的社交圈而來獲取 資訊,而現在這種方式也有一些網站或者服務來實現了。當然這種實現的方式(網站的展示方式)是一個值得我們去考慮和思考的點。


文章來自:http://www.baystars.cc/ BAYSTARS DESIGN網頁設計公司

2011年3月8日 星期二

繼Kik之後Beluga來了

3月2日,Facebook已收購消息群發服務Beluga,包括該公司的產品和團隊。在過去幾筆收購中,Facebook的目標主要是被收 購公司的人才。但Facebook對Beluga的收購有所不同。除了Beluga的團隊之外,Facebook也對該公司的技術感興趣。此前已有一些業 內人士對Beluga的技術表示看好,因此Facebook收購該公司是合理的。
Beluga與kik異曲同工
我想Beluga迅速被Facebook看重的原因是其基於通訊錄的群聊網路,本質上這也是Facebook關心的關係網絡。基於通信錄的創新也許仍然不會停止,我們期待更多更有趣的應用出現。
QQ的悲劇
如果有人還記得QQ時代有n多種IM都宣誓過要打敗QQ,最後都無果而終,最核心的是因為遷移一個人的整個好友關係十分困難,成本高昂,但是通訊錄呢?智慧手機時代,人人都可以抓取通訊錄,每個應用都可以一夜之間建立圈子!
好了,預測一周之後beluga的中國版本就會出現,並且QQ一定會打這個保衛戰,關鍵是能守得住嗎?
文章來自:http://www.baystars.cc/ BAYSTARS DESIGN網頁設計公司