CSS字母間距(letter-spacing)和字符串全長的關係
問題來源
這是一個用canvas手動實現的富文本編輯的模塊,發現了字符串寬度大於元素width導致了異常的顯示。
分析過程
然而,所有的文字屬性皆從一個用CSS版本的Demo模版中獲取到的,同樣的屬性在CSS中正常顯示,所以排除初始值不合理。
定位到核心代碼,:
字符串全長=n個字符寬度+(n-1)個letterSpacing+其他
通過精確計算,發現在CSS裏:
文字長度=n個字符寬度+ n個letterSpacing+其他
因爲字符串“OK”的letterSpacing=-0.4,因爲少累加一個,所以導致寬度偏長。
解決方案
方法一:
將寬度累加器let textGraphicsWidth = 0
換成let textGraphicsWidth = textGraphicsStyle.letterSpacing
,相當於補上一個letterSpacing
方法二:
重構累加函數的代碼,讓每個charWidth = charWidth + letterSpacing
技巧總結
chrome瀏覽器中,在識別單個字符在瀏覽器中的尺寸時,還原100%縮放,瀏覽器開發者模式審查元素到指定字符串,直接將鼠標光標放到對應文字處即可看到對應文字尺寸
如果需要看單個文字尺寸,雙擊修改即可