1 回答

TA貢獻1797條經驗 獲得超6個贊
問題與viewBox
雖然viewBox
是最快的解決方案,但它有幾個缺點:
viewBox
試圖滿足縱橫比。如果圖表的縱橫比不是 1:1,則會發生這種情況:
圖表本身不適合容器。而是viewBox
保持縱橫比并添加填充。我們可以拉伸preserveAspectRatio=none
:
圖表(和文本)縮放。不保留寬高比會引入另一個問題。如果您使用
height
andwidth
,您可以在 CSS 中將文本定義為特定大小 - 但不能使用viewBox
. 以適合1200*600 頁面的0 0 600 300
viewBox
ed 圖表為例。在這種情況下,所有內容都會縮放,包括文本,如上所示:您無法再設置字體大小。這不會只發生在文本上:其他不能完美拉伸的元素,如圓圈,也會有同樣的問題。
乍一看,viewBox
似乎簡單多了。但是由于上面強調的腳槍,viewBox
在實踐中使用起來變得非常復雜。
手動縮放
height
解決方案是使用和手動調整圖表大小width
,避免上述所有問題。假設我們有一個基于高度和寬度呈現自身的圖表組件。過程變為:
在第一個渲染器上設置
width
和height
適合容器。容器需要自己設置寬度和高度。ResizeObserver
在容器上使用 a ,它會在其大小發生變化時通知我們。調整圖表大小時,獲取新的高度和寬度,并使用它們來呈現圖表。
當手動設置高度和寬度時,我們只調整需要縮放的部分。例如,對于上面的條形圖:
我們可以根據圖表的高度和寬度設置條形的大小。
如果我們有文本,我們可以相對于高度和寬度定位它,但將文本大小固定為,這在 中是不可能的
viewBox
,因為它會縮放所有內容:
結論
viewBox
如果您的圖表包含不受拉伸影響的元素:例如矩形,或者如果您不關心上述問題,則可用作快速解決方案。如果您有無法拉伸的元素(例如文本或圓圈)并且需要文本保持您指定的大小,請使用手動縮放。
如果您不關心寬高比問題,并且可以解決放大或縮小文本的問題,那么viewBox
只要您意識到它的缺陷,這就是正確的選擇。
然而,在實踐中,在絕大多數情況下,手動縮放最終是更好的選擇,因為很少有圖表中只有可拉伸元素的情況。
來源
從響應式 SVG 圖表中獲取的圖像— viewBox 可能不是答案。
添加回答
舉報