顯示具有 HTML 標籤的文章。 顯示所有文章
顯示具有 HTML 標籤的文章。 顯示所有文章

2019年1月21日 星期一

[Back To Basic] HTML5 - Web Workers

Web Workers

是在背景運行的javascript,不會影響頁面的效能。

Web Workers中的javascript是和頁面中的javscript分離的,所以可以獨立在背景運行;相對於這個概念而言,普通的javascript在執行或運算時,是需要等待,直到處理完成後才能進行下一個操作的。

Step1. 確認瀏覽器是否支援Web Worker

Step2. 建立要用Web Worker機制執行的javascript

Step3. 建立Web Worker

Step4. 其他:停止、清除

附註:
因為web worker要執行的js檔案,是外部的檔案,所以以下的object不能操作

  • window
  • document
  • parent

[Back To Basic] HTML5 - Web Storage

Web Storage

目的: 將一些使用者(user)的資料暫存在瀏覽器(client-side)中(取代cookie機制)。

特性

  • 將資料暫存於瀏覽器(client-side)中
  • 相較於cookie更為安全
  • 相較於cookie有更大的儲存空間(至少 5mb)
  • 處理資料的過程不會影響網站的效能
  • 儲存的資訊永遠不會回傳server
  • 依照域名(Domain)和協定(Protocol)來做為儲存單位,亦即同一來源的頁面可以共享同一份資料

WebStorage類型

  1. LocalStorage(window.localStorage) - 儲存"沒有"有效期限的資料
  2. SessionStorage(window.sessionStorage) - 瀏覽器頁籤一關閉,資料就消失

使用前確認

請確認瀏覽器是否支援此功能,請加入以下程式碼:
if (typeof(Storage) !== "undefined") {
  // Code for localStorage/sessionStorage.
} else {
  // Web Storage support..
}

localStorage

  • 存值
    • localStorage.setItem("userName", "Shawn");
    • localStorage.userName = "Shawn";
  • 取值
    • var name = localStorage.getItem("userName");
    • var name = localStorage.userName;
  • 清除值
    • localStorage.removeItem("userName");
附註: 值都是string的型別,如果是其他型別,請記得轉型後再做邏輯處理。

sessionStorage

使用方式與localStorage類似,只有資料的生命週期不同而已
  • 存值
    • sessionStorage.setItem("userName", "Shawn");
    • sessionStorage.userName = "Shawn";
  • 取值
    • var name = sessionStorage.getItem("userName");
    • var name = sessionStorage.userName;
  • 清除值
    • sessionStorage.removeItem("userName");

2019年1月20日 星期日

[Back To Basic] HTML5 - 拖放功能(drag and drop)

任何的元素(elements)皆可以拖拉。

Step1 讓元素可被拖動

加入屬性(attributes): draggable="true"
e.g.
<div draggable="true"></div>

Step2 定義"拖"(drag)事件

哪個元素(elements)可以被拖動(drag),定義被拖動時會發生什麼樣的事情,加入以下程式碼:

<img id="draggableImage" src="fox.jpg" alt="The fox" draggable="true" ondragstart="drag(event)">
function drag(event) {
  // 將id暫存起來
  event.dataTransfer.setData('draggable-item-id', event.target.id);
}

Step3 定義可以被"放"(drop)的元素或位置

    Step3-1 event.preventDefault()

    預設所有的元素(elements)不能被放在其他的元素(elements)中,為了要允許允許"放"(drop)這件事情,必須把預設的處理事件停止掉,加入以下程式碼:

<div ondragover="allowDrop(event)"></div>
function allowDrop(event) {
  event.preventDefault()
}
    

Step3-2 定義"放"(drop)事件

哪個元素(elements)可以被放置(drop),加入以下程式碼:

<div ondrop="drop(event)"></div>

function drop(event) {
  // 藉由id取出element後附加上去
  var id = event.dataTransfer.getData("draggable-item-id");
  event.target.appendChild(document.getElementById(id));
}


[Back To Basic] HTML5 - 定位(geolocation)

用於找到使用者的位置(需使用者同意)

source code

錯誤處理、例外處理

source code

顯示地圖

範例是用google map,記得將key填入,關鍵字: google map api。
source code

延伸服務

在取到位置之後可以使用延伸的服務,
  • 取得最新的位置
  • 顯示附近的地標資訊
  • 導航
  • ...

常用的api

  • getCurrentPosition - 取得目前位置相關資訊
  • watchPosition - 持續監視位置
  • clearWatch - 停止watchPosition


2019年1月18日 星期五

[Back To Basic] HTML5 - canvas vs SVG

SVG

  • 2D
  • 基於XML描述(每個元素[elements]都有DOM)
  • 位置改變時不須重劃,瀏覽器會自動重新計算並渲染
  • 適合有大區塊的應用(e.g. google map)
  • 支持javascript事件處理
  • 不適合遊戲應用
canvas
  • 2D
  • javascript
  • 位置改變時必須重劃
  • 不支持javascript事件處理
  • 可以存成.jpg或.png
  • 適合遊戲應用

[Back To Basic] HTML5 - SVG / Scalable Vector Graphics(可伸縮向量圖形)

<svg></svg>

  • 是一個容器的概念
  • 是w3c推薦的圖形作法

[Back To Basic] HTML5 - 畫布(canvas)

<canvas></canvas>

canvas是用來繪製圖形的元素,特性如下
  • 藉由javascript來作畫
  • 本身只是一個容器(畫布)的概念
  • 一個沒有邊界和內容的矩形
  • 最少指定三個屬性
    • id(讓javascript找到並操作)
    • 寬度
    • 高度
 附註: width和height需用HTML的屬性,不可用css指定,會跑版,原因不明。


[Back To Basic] HTML5 - 瀏覽器支援(Browser Support)

舊瀏覽器

舊瀏覽器看到未知的元素(elements),會自動解釋為inline的元素。
所以新的元素(elements)建議補上 display: block;
e.g.
header, section, footer, aside, nav, main, article, figure {
  display: block; 
}

自訂元素(elements)

IE8以前的處理方式

IE8以前不可以對未知的element設定樣式,因此必須透過HTML5Shiv來解決這個問題。

[Back To Basic] HTML5 - HTML5簡介(Intro)

HTML5有什麼新東西?

  • 語義元素(semantic elements)
    • 顧名思義從element的名稱就可以知道這個區塊的意義
    • e.g. <article></article>
  • 表單元素(form elements)的新屬性(attributes)
    • e.g. type="number"
  • 圖形元素(graphic elements)
    • SVG
    • Canvas
  • 多媒體元素(multimedia elements)
    • e.g. <audio>、<video>
  • 新的API
    • 地理位置(geolocation)
    • 拖放功能(drag and drop)
    • local storage(取代cookie)
    • application cache
    • web workers
    • SSE

背後推行的兩個組織

  • W3C
核心理念: 制定出明確的HTML5和XHTML規範
背後支持的廠商: Microsoft
  • whatwg
核心理念: 以現存的HTML不斷的增加功能(只增不減),亦即,不會有未來的版本出現
背後支持的廠商: Opera、Mozilla、Chrome、Safari

2019年1月7日 星期一

[Back To Basic] HTML5 - Input 屬性(Attributes)


  • value
預設值
  • readonly
唯讀(值無法改變)
  • disabled
不可使用(表單送出時,這個輸入框的值也不會被送出)
  • size
輸入框長度(n個字元)
  • maxlength
最大可輸入的長度
    • 沒有預設的回饋,如果要做一些警告訊息的話,必須自己寫一些code
    • 最安全的方式還是由server接收時確認

HTML5新增的屬性(Attributes)

  • autocomplete
    • form和input皆可使用
    • 提示使用者輸入過的文字
  • novalidate
    • form的屬性
    • 在submit的時候不用驗證表單內的所有輸入框
  • autofocus
    • 顧名思義,就是在頁面載入後自動鎖定這個輸入框
  • form
    • 指定input所屬的form
  • formaction
    • 可使用在type="submit"或type="image"的情境
    • 將指定的控制項送到指定的連結(url)
  • formenctype
    • 可使用在type="submit"或type="image"的情境
    • 指定表單資料的加密方式(只有在form的method="post"才可使用)
  • formmethod
    • 可使用在type="submit"或type="image"的情境
    • 指定http method的動詞
  • formnovalidate
    • 可使用在type="submit"的情境
    • 可指定此控制項送出時,不驗證表單
  • formtarget
    • 可使用在type="submit"或type="image"的情境
    • 可指定送出後,如何顯示response
  • height 和 width
    • 可指定type="image"時圖片的寬高
    • 使用圖片時一定要指定寬高,不然render的期間會因畫面閃爍造成使用者體驗不佳
  • list
    • 可參考<datalist>預先定義好的選項
  • min 和 max
    • 指定數值類型控制項的上下限
    • 可使用的type有number, range, date, datetime-local, month, time, week
  • multiple
    • 可使用在type=email,或file
    • 允許單一控制項擁有一個以上的值
  • pattern
    • 可以設定正則表達式在控制項上
    • 可使用在type=text, search, url, tel, email, password
    • 記得用提示幫助使用者了解這個控制向的規則
  • placeholder
    • 可在輸入值之前顯示提示訊息在控制向上
    • 可使用在type=text, search, url, tel, email, password
  • required
    • 必填
    • 可使用在type= text, search, url, tel, email, password, date pickers, number, checkbox, radio, file
  • step
    • 可指定可輸入數值的間隔
    • 可使用在type= number, range, date, datetime-local, month, time, week
    • 可以配合min和max使用

2019年1月5日 星期六

[Back To Basic] HTML5 - Input Types

Input的屬性(attributes) - type

  • text
單行文字
  • password
密碼
  • submit
送出表單資料的按鈕
附註: 如果"value"(按鈕上的文字)沒有給定,會有預設值
  • reset
重設表單資料的按鈕,會將表單的值恢復到預設值
  • radio
單選,同一群組的"name"要一致,每個選項的"value"要給定
  • checkbox
可不選或多選,同一群組的"name"要一致,每個選項的"value"要給定
  • button
按鈕

HTML5提供的type

附註: 如果舊的瀏覽器無法顯示,則顯示text
  • color
顏色選擇器
  • date
日期選擇,可搭配最大最小值設定
    • max e.g. max="1979-12-31"
    • min e.g.  min="2000-01-02"
  • datetime-local
日期+時間選擇(無時區)
  • email
e-mail,有些瀏覽器會自動驗證
  • file
檔案選取、附加
  • month
日期選擇(年月)
  • number,可搭配最大最小值設定
數值
    • max e.g. max="5"
    • min e.g.  min="1"
  • range,可搭配最大最小值設定
範圍,e.g. slider bar
    • max e.g. max="5"
    • min e.g.  min="1"
  • search
搜尋欄位的功能跟單行文字(text)類似
  • tel(目前只有safari支援)
電話號碼
  • time
時間選擇(無時區)
  • url
一般的url網址,有些瀏覽器會自動驗證
  • week
可以選擇某年某周
source code

2019年1月2日 星期三

[Back To Basic] HTML5 - Form Elements

<input>

屬性(attributes) - type

可以讓input用不同的方式顯示,預設是"text"

元素(elements) - <select>和<option>

兩個元素相互搭配可以定義出一個下拉清單
  • <option>屬性(attributes) - selected
<option>是可以被選擇的選項,在有多個選項時,預設第一個選項會被選取。
也可用selected指定選取特定的選項。
  • <select>屬性(attributes) - size 
可以設定同時可以看到的選項數量
  • <select>屬性(attributes) - multiple
可以讓下拉選單"多選"

元素(elements) - <textarea>

可以設定多行的<input>
*.寬和高可以用HTML或CSS設定
  • HTML - 屬性(attributes) - rows&cols
rows: 高度
cols:寬度
  • CSS - width&height
rows <=> width
cols <=>height

元素(elements) - <button>

可以點擊的按鈕;type永遠要設為 type="button",不同的瀏覽器可能會使用不同的預設type

瀏覽器不會顯示未知的元素(elements),所以使用瀏覽器看不懂的元素並不會造成網頁毀損

HTML新元素(elements) - <datalist>

  • <datalist>可以預先定義一組選項,再用下面這個規則設定input和datalist的關聯。
  • <input>屬性(attributes) - list要等於<datalist>屬性(attributes) - id。

HTML新元素(elements) - <output>

可以做為計算的結果
  • 給定output name屬性: <output name="x"></output>
  • 藉由<form>屬性(attributes) - oninput 來將結果呈現在output
  • 演算法寫在oninput上

2019年1月1日 星期二

[Back To Basic] HTML5 - Form

<form></form>

一張表單,目的是蒐集使用者輸入的資料。提供的輸入元件有很多,像是文字輸入框(text field)、核取方塊(checkbox)、單選按鈕(radio button)、送出按鈕(submit),等等。
*. 這個標籤不會顯示,但是有實際功能。

<input>

這是最重要的表單元件。可以藉由"type"屬性(attribute),選擇呈現的元件。
  • <input type="text"> 文字輸入框(text field)
    • 預設寬度為,20個字元
  • <input  type="radio"> 單選按鈕(radio button)
    • 單選
  • <input  type="submit"> 送出按鈕(submit)
    • 將資料送到form-handler

<form>的屬性(attribute)

  • action
    • form-handler的位置,這個頁面通常包含這一些專門做表單資料處理的腳本(script)
    • e.g. <form action="/handle.php">
    • 如果action沒有設定,預設會送到自己這頁
  • target
    • <form target="_blank">,可指定送出的結果開新的瀏覽器頁籤(new tab) / 框架(frame) / 現在的視窗(window)
    • target預設是_self -現在的視窗(window)
  • method
    • 可以指定HTTP method
    • GET
      • 預設值是get
      • 送出的表單資料會顯示在頁面位址,e.g.?input1=aaa&input2=bbb
      • 注意事項
        • 會將表單資料附加在url後方
        • url長度限制大約3000個字元
        • 避免使用get傳輸敏感的資料
        • 使用者想要將表單結果建立成書籤非常有用
        • 主要運用在"不考慮"安全性的資料
    • POST
      • 主要運用在"考慮"安全性的資料
      • 沒有大小限制

<input>的屬性(attribute) - name

每個input一定都要有name這個屬性,才會被正常送出。

將表單資料群組化<fieldset>

用<fieldset></fieldset>將同個群組的<input>包起來,可配合<legend></legend>給群組標題。


2018年12月29日 星期六

[Back To Basic] HTML5 - XHTML


  • XHTML比HTML更嚴謹
  • XHTML = XML + HTML
  • 目的是為了解決,行動裝置上的瀏覽器在解讀HTML的容錯能力沒那麼好,所以希望從開發的時候就強制開發者遵循更嚴謹的規範,彌補容錯能力較差的瀏覽器。
相關規範如下
  • 文件結構類
    • 必須宣告doctype為XHTML,擇一版本即可
    • 必須宣告xmlns
    • 必須有這四個標籤 <html>, <head>, <title>, and <body>
  • HTML元素(elements)規範
    • 必須遵循巢狀原則
    • 必須有結尾
    • 必須為小寫
    • 必須有一個根元素
  • HTML屬性(attributes)規範
    • 必須為小寫
    • 必須用引號括住
    • 必須寫完整,不可用簡寫 e.g.checked => checked ="checked "


2018年12月27日 星期四

[Back To Basic] HTML5 - URL encode

統一資源定位 URL(Uniform Resource Locators)

藉由URL瀏覽器可以向伺服器請求頁面,HRL可以是
  • 一個名稱(e.g. https://www.google.com/)
  • IP(e.g. 8.8.8.8)
URL規則: scheme://prefix.domain:port/path/filename
  • scheme: 定義網頁服務的類型(通常是http 或 https)
  • prefix: 網域的前綴(http預設是www)
  • domain: 網域名稱
  • port: port號(預設是80)

常見的scheme

  • http: 超文本傳輸協定(最常見、無加密)
  • https: 安全超文本傳輸協定(安全網頁、有加密)
  • ftp: 檔案傳輸協定(下載或上傳檔案)
  • file: 自己主機的檔案

URL編碼

URL在網路上只能使用ASCII字符集相互轉送,如果URL使用的字符超出ASCII,這個字元就會被轉換成另外一種方式呈現。
這個轉換的過程就被稱為URL編碼(URL encoding)
e.g. 空白會被轉換成+%20

2018年12月26日 星期三

[Back To Basic] HTML5 - Charset

為了正確顯示網頁,網頁瀏覽器必須知道HTML的檔案是用什麼方式編碼的。

字符編碼(Character Encoding)

ASCII是第一個字符編碼標準(character encoding standard),亦稱為字符集(character set),其定義了128個字母符號來表示數字、大小寫英文、特殊符號。

ANSI是Windows的字符集,支援了256種不同的字符。
ISO-8859-1是HTML4預設的字符集,它也支援256種不同的字符。
HTML5預設的字符集是UTF-8
*.HTML4也支援UTF-8
*.UTF-8 (Unicode) 幾乎涵蓋了全世界所有的字符和符號
在HTML檔案的<head></head>宣告如下:
  • HTML4
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
  • HTML5
<meta charset="UTF-8">

*.如果瀏覽器發現網頁是ISO-8859-1,預設使用ANSI處理,因為ANSI涵蓋ISO-8859-1所有字符,ANSI還額外擁有32個字符
*.css檔案中,設定用UTF-8的方法:加入@charset "UTF-8";
結論: HTML5 用UTF-8就對了。

2018年12月24日 星期一

[Back To Basic] HTML5 - Entities & Symbols

字元實體(Character Entities)

HTML中有許多的保留字元,e.g. < 或 > ,想要顯示這些保留字,就是使用"Entities"的時機。舉例來說,想要顯示小於(<)這個符號時,可以寫成 &lt;&#60; 來表示。
總言之,就是可以用以下兩種方式來表示特定的字元

  • &entity_name; (實體名稱) e.g. 小於: &lt; lt=less than
    • 優點 - 方便記憶(其實我覺得不好記)
    • 缺點- 有些entity_name(實體名稱)瀏覽器可能不支援
    • 大小寫不可以打錯


  • &#entity_number; (實體編號)e.g.小於: &#60;
最常用的特殊字元,一個不斷行的空白: &nbsp;&#160;
小結: 要表達特殊字元,就用entity_number(實體編號)表達。

變音符號

其他語系可能會用一些符號代表,發音的方式。Entities也可以結合"字母"和"變音符號",呈現出發音方法的字母。
e.g. 想顯示  ̀ 加上 a,寫法: a&#768; = a&#768;

source code

特殊符號(Symbols)

特殊符號一覽表

2018年12月23日 星期日

[Back To Basic] HTML5 - Computer Code

Computer Code

這東西沒什麼用。
  • <kbd></kbd> 使用者輸入(keyboard input),純粹改變顯示字型
  • <samp></samp> 程式或系統的輸出(output),純粹改變顯示字型
  • <code></code> 計算的片段,純粹改變顯示字型
  • <pre></pre> 預先格式化的顯示方式,可以顯示寫在程式碼的原樣,e.g.有斷行就是有斷行
  • <var></var> 數學表達式中的'變數"\

[Back To Basic] HTML5 - Responsive

響應式(Responsive)

所謂的響應式網站,意即透過自動縮放、隱藏/顯示,來讓一個網站在各種裝置上的版面、外觀,看起來都是好的。

Viewport

所有的響應式網站,在meta data中都需加入以下這行code,來引導瀏覽器用正確的尺寸和比例來呈現網站。
<meta name="viewport" content="width=device-width, initial-scale=1.0">

響應式圖片

圖片的處理如下:
  1. max-width: 100% 用百分比來控制圖片寬度,用max-width比width的好處 - 圖片可以盡可能地放大,但是如果這張圖片原始檔案"沒那麼大",就以原始檔案的寬度為主。
  2. 這篇文章中有說明的<picture></picture>,可以以螢幕解析度的不同來顯示不同圖片

響應式文字

文字的大小可用vw做為單位,1vw = 1%。所以假設,font-size:1vw,螢幕解析度為1024px,那font-size = 10.24px

Media Queries

用途:依據螢幕解析度不同,可以套用完全不同的樣式

響應式網站的框架

這篇文章中,提到的css framework都有處理響應式的需求

2018年12月21日 星期五

[Back To Basic] HTML5 - Layout

版面配置(Layout)


語意化的HTML5中為了版面配置,提供了幾個常見的標籤。
  • <header></header> 整個頁面的標頭
  • <nav></nav> 導覽列
  • <section></section> 文檔的一個部分
  • <article></article> 文章
  • <aside></aside> 側邊欄或任何在側邊的內容
  • <footer></footer> 頁尾
  • <details></details> 額外的詳細內容
  • <summary></summary> <details>的標題
*. details和summary Edge不支援,sample code
*.div、section、article的分辨可參考這篇文章

五種版面配置的技巧

  • HTML tables(不推薦)
不要用
  • css float
優: 很簡單,記兩個css屬性就好,float, clear
缺: 彈性很差,因為float跟文件內容有很大的關聯性,只要稍微修改就必須調整整體頁面
  • css flexbox
優: 考量各種裝置情境
缺: 不支援ie10之前的版本
  • css framework
  1. bootstrap
  2. w3.css
  3. ...
  • css grid
優: 跟flexbox帶來的好處非常類似,在處理不同螢幕解析度的需求上更為強大
缺: 不支援ie,不支援Edge15之前的版本