[英]HTML 5, inline SVG, and namespace awareness for SVG DOM
以下問題讓我感到困惑。 我知道他們是相關的,但是...
我已經閱讀了這個舊鏈接,但我很困惑......因為 Mozilla 說“要動態修改內聯 SVG,腳本需要以這種方式完成” - 所以最后,我怎樣才能動態修改內聯 SVG(如果 HTML 5 不是命名空間感知)?
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>hello-SVG</title> </head> <body> <svg width="200" height="200"> <rect x="0" y="0" width="100" height="100" fill="blue"></rect> </svg> </body> </html>
上面的代碼是在 HTML 5 中渲染rect
(使用 SVG)的正確方法。現在,要使用 JavaScript 修改 SVG,Mozilla 建議使用此API。 我的問題是,如果 HTML 5 不支持命名空間,那么這樣做有什么意義? 對於這種情況,瀏覽器會自動切換到 (X)HTML 5 嗎?
我在 SO 上閱讀了此評論,我發現它最接近我正在尋找的答案 -
我猜 HTML 5 SVG 的情況基本上是“沒有命名空間的 SVG 在解析期間添加了命名空間(但之后就像之前的 (X)HTML)”。
HTML5 定義了 HTML、XHTML 和 DOM。
DOM 是命名空間感知的。 當您使用 DOM 方法時,您必須考慮每個元素所在的命名空間,但默認為 HTML ( http://www.w3.org/1999/xhtml
) 命名空間。
HTML 和 XHTML 是通過解析轉換為 DOM 的序列化。
XHTML 是名稱空間感知的,XHTML 文檔根據 XML 規則應用名稱空間,因此所有名稱空間必須顯式分配給每個元素。 使用 XML 解析器將 XHTML 轉換為 DOM。
HTML 也是命名空間感知的,但命名空間是隱式分配的。 使用 HTML 解析器將 HTML 轉換為 DOM,該解析器知道哪些元素位於哪個命名空間中。 也就是說,它知道<div>
進入http://www.w3.org/1999/xhtml
命名空間,而<svg>
進入http://www.w3.org/2000/svg
命名空間。 <script>
之類的元素可以進入http://www.w3.org/1999/xhtml
或http://www.w3.org/2000/svg
命名空間,具體取決於它們在 HTML 中出現的上下文代碼。
HTML 解析器只知道HTML elements
、 SVG elements
和MathML elements
,不知道其他元素。 沒有使用來自其他名稱空間的元素的選項,無論是隱式的還是顯式的。 也就是說, xmlns
屬性沒有任何作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.