簡體   English   中英

HTML 5、內聯 SVG 和 SVG DOM 的命名空間感知

[英]HTML 5, inline SVG, and namespace awareness for SVG DOM

以下問題讓我感到困惑。 我知道他們是相關的,但是...

  1. 是否支持 HTML 5 命名空間(用於包含 SVG/其他 XML 方言的標簽)?
  2. 如果不是,那這個怎么辦——

    我已經閱讀了這個鏈接,但我很困惑......因為 Mozilla 說“要動態修改內聯 SVG,腳本需要以這種方式完成” - 所以最后,我怎樣才能動態修改內聯 SVG(如果 HTML 5 不是命名空間感知)?

  3. 或者頁面需要作為 (X)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/xhtmlhttp://www.w3.org/2000/svg命名空間,具體取決於它們在 HTML 中出現的上下文代碼。

HTML 解析器只知道HTML elementsSVG elementsMathML elements不知道其他元素。 沒有使用來自其他名稱空間的元素的選項,無論是隱式的還是顯式的。 也就是說, xmlns屬性沒有任何作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM