進階技術(二)

dynamic html (Dhtml)

在Dhtml中, 將所有的html元素都使用一個一個的JS物件來進行表示, 使用物件來表示元素本身, 使用物件之間的包含關係來表示元素之間的層級關係.

使用一個文件結構樹 DOM 來表示整個html文件.

物件上可以設計屬性和方法, 通過操作物件上的屬性或方法, 可以間接的操作頁面中的元素.

利用這種方式將html、CSS、JavaScript整合在了一起,形成了現在的Dhtml技術.

Dhtml可以分為兩部分內容: BOM和DOM

改變 HTML 樣式

        document.getElementById(id).style.property=新樣式
例如:
<h1 id="id1">我的標題</h1>
<button type="button" onclick="document.getElementById('id1').style.color='red' ">
點我!</button>

看效果

濾光鏡(filter)

filter CSS屬性將模糊或顏色偏移等圖形效果應用於元件。濾鏡通常用於調整圖像,背景和邊框的渲染。

Blur

創建高速度移動效果,即模糊效果.
img {	// 較大的值會產生更多的模糊。
  filter: blur(5px);
}

例一:透明懸停
例二:背景模糊
pineapple.jpg

明度brightness

調整圖像的亮度。

0% 將使圖像全黑。
100% (1) 是預設值,代表原始圖像。
超過 100% 的值將提供更明亮的結果。

pineapple.jpg
img { filter: brightness(200%);}

例:更明亮的圖像

contrast

調整圖像的對比度。

0% 將使圖像全黑。
100% (1) 是預設值,代表原始圖像。
超過 100% 的值將提供對比度更高的結果。

pineapple.jpg
img {
  filter: contrast(200%);
}

例:更明亮的圖像

drop-shadow

對圖像應用投影效果。
filter: drop-shadow(h-shadow v-shadow blur spread color)
pineapple.jpg 可能的值: 創建紅色陰影的示例,水平和垂直均為 8px,模糊效果為 10px:
filter: drop-shadow(8px 8px 10px red);

提示:此濾鏡類似於 box-shadow 屬性
陰影效果

grayscale(%)

將圖像轉換為灰度。
filter: grayscale(50%);

0% (0) 是預設值,代表原始圖像。
100% 將使圖像完全變灰(用於黑白圖像)。

注意:不允許使用負值。

pineapple.jpg

例:圖像變灰色

色調旋轉 hue-rotate

在圖像上應用色調旋轉。
該值定義將調整圖像樣本的色環周圍的度數。

0deg 是預設值,代表原始圖像。

注意:最大值為 360 度。

pineapple.jpg
filter: hue-rotate(90%);

例:色調旋轉

invert

反色:反轉圖像中的樣本。

0% (0) 是預設值,代表原始圖像。
100% 將使圖像完全倒置。

注意:不允許使用負值。

pineapple.jpg
filter: invert(100%);

例:反轉圖像

opacity

設置圖像的不透明度級別。 其中:

0% 是完全透明的。
100% (1) 是預設值,代表原始圖像(無透明度)。

注意:不允許使用負值。
提示:此濾器類似於不透明度屬性。

pineapple.jpg
filter: opacity(30%);

例:不透明度

透明懸停效果(Transparent Hover Effect)

opacity 屬性通常與 :hover 選擇器一起使用來更改鼠標懸停時的不透明度:
Forest Mountains Italy
img:hover {
  opacity: 0.5;
}

當用戶將鼠標懸停在圖像上時圖像透明。 這個 CSS 是 opacity:0.5;。
當鼠標指針離開圖像時,圖像將再次不透明。

透明懸停

彩度 saturate

使圖像飽和。

0% (0) 將使圖像完全不飽和。
100% 是預設值,代表原始圖像。
超過 100% 的值提供超飽和結果。

注意:不允許使用負值。

pineapple.jpg
filter: saturate(800%);

例:圖像飽和

sepia(%)

將圖像轉換為棕褐色。

0% (0) 是預設值,代表原始圖像。
100% 將使圖像完全棕褐色。

注意:不允許使用負值。

filter: sepia(90%);
  
pineapple.jpg

例:棕褐色圖像

例:各種濾鏡

url()

url() 函數獲取指定 SVG(Scalable Vector Graphics) 濾鏡的 XML 文件的位置,並且可能包含特定濾鏡元素的錨點。

例子:

filter: url(svg-url#element-id)

initial

初始 將此屬性設置為其預設值。
例:初始

inherit

從其父元素繼承此屬性。
例:繼承

2D 變形(transform)

轉換,移動,比例化,反過來,旋轉,和拉伸元件。
transform 有下列方法:

translate() 方法

div#div2
{
	transform:translate(50px,100px);
}
移動

rotate() 方法

  transform:rotate(30 deg);
<img style="transform:rotate(30deg);"
  src="../css/filters/pineapple.jpg">

旋轉

pineapple.jpg

scale() 方法

<div style="transform: scale(1.4, 0.7);">
div 元件的寬度是原始大小的1.4倍,
         高度是原始大小的0.7倍。
</div>
pineapple.jpg

改變大小

scale() 方法也可做圖文翻轉:

<div style="transform: scale(-1);"></div>
pineapple.jpg
      <table>
         <tr>
            <td style = "transform: scaleX(-1);transform: scaleX(-1);">Text</td>"
            <td>Text
         </tr>
         <tr>
            <td style = "transform: scale(-1,-1);">Text</td>
            <td style = "transform: scaleY(-1);">Text</td>
         </tr>
      </table>
Flip

skew() 方法

該元件會根據橫向(X軸)和垂直(Y軸)線參數給定角度:
<div style="transform: skew(30deg, 20deg);">
</div>

傾斜

pineapple.jpg

matrix() 方法

matrix 方法有六個參數,包含旋轉,縮放,移動(平移)和傾斜功能: transform : matrix( 1, 0, 0, 1, 0, 0 ) 初始的值(參數為數字,不需要單位)。
  matrix(scaleX(),scaleY(),skewX(),skewY(),translateX(),translateY())
例如
<div style="transform:matrix(0.866,0.5,-0.5,0.866,0,0);">
</div>
matrix

變形原點(transform-origin)

在進行變形時,預設的變形原點都是物件或DOM元素的中心點。用變形原點(transform-origin)可以改變變型的基準點, 例如作旋轉變形時可以依照不同的原點位置來進行旋轉。改變原點對於旋轉與縮放會比較明顯看得出不同。
.box3 {
  transform-origin: 120px 130px;
  transition: 2s ease-in-out;
}

.box3:hover {
  transform: rotate(700deg);
}
pineapple.jpg

變形原點(transform-origin)可以用正負數值來代表對原來原點的偏移量(X軸偏移量與Y軸偏移量),或是用top/center/bottom(top = 0%, bottom=100%)、left/center/right(left = 0%, right = 100%)等組合來直接定義新的位置。

3D 變形(transform)

通過 CSS 變換屬性,您可以使用以下 3D 變換方法:
.box5:hover {
  transition: 2s ease-in-out;
  transform: rotateX(60deg);
}
pineapple.jpg

perspective 屬性

perspective(透視)在 3D 設計中是一個重要的屬性,它代表了Z軸為0(z=0)到觀看者的距離(也可以稱為深度), 以這個觀測距離來決定物件的大小(遠近)情況,當超過這個觀測距離,DOM元件(物件)將會不可見。 根據這份資料的說明, perspective設定為300px或更少時,會有強烈的失真,500px到1000px的失真較為中等,2000px以上的失真就很輕微。

一般來說,我們會在要進行3D變形的外層容器元件來定義 perspective,這樣包含在其內的子元件(物件)都可以按照這個深度來進行變形。

perspective的設定方式有兩種,一種是直接定義perspective屬性:
perspective: 500px;

另一種是定義在transform中,以類似函式的方式來定義數值:

transform: perspective(250px);
pineapple.jpg

CSS radial-gradient() 函數

CSS 梯度可以在兩種或多種指定顏色之間顯示平滑過渡。
CSS 界定了三種類型的梯度:
  1. Linear Gradients (goes down/up/left/right/diagonally)
  2. Radial Gradients (由圖片的中心定義)
    background-image: radial-gradient(shape size at position, start-color, ..., last-color);
    

  3. Conic Gradients (rotated around a center point)

使用 CSS border-radius 屬性,可以創建圓形。 添加一些徑向梯度(radial-gradient),看起來像圓球。
<style>
.circle {
  display: block;
  background: black;
  border-radius: 100%;
  height: 300px;
  width: 300px;
  margin: 0;
  background: radial-gradient
        (circle at 100px 100px, #5cabff, #000);
}
</style>
<figure class="circle"></figure>
徑向梯度(radial-gradient)屬性需要一些參數。 第一個是漸變開始的中心位置。 這遵循 *position* 處的 *shape* 形式。 在這種情況下,它是一個圓, 其中心位置距左側 100 像素,距頂部 100 像素。

例題: 圓球
參考資料:創建圓球

clip-path

clip-path 屬性可將元件剪裁為基本形狀或 SVG 源。

下例將圖片剪裁為圓形:

<style>
img {
  clip-path: circle(50%);
}
</style>
<img src="../css/filters/pineapple.jpg"
			width="140" height="140">

下例將圖片剪裁為橢圓形:

<style>
img {
  clip-path: ellipse(50% 45% at 50% 50%);
}
</style>
<img src="../css/gif/img_5terre.jpg"
			width="150" height="100">

下例內置矩形 inset( 上右下左的邊距 round 上右下左圓角 ):

<style>
 .inset{
    width:100px;
    height:100px;
    background:#99f;
    clip-path:inset(10px 20px 30px 10px
                       round 20px 5px 50px 0);
  }</style>
<img class="inset" src="../css/gif/img_5terre.jpg"
			width="150" height="150">
Clip Path 參考資料

動畫(animations)

參考資料