百科问答小站 logo
百科问答小站 font logo



用 Canvas 实现虚拟列表的难点在哪里? 第1页

  

user avatar   catchen 网友的相关建议: 
      

排版,尤其是文字排版。现在每一个浏览器的文字排版都是自己实现的,没有统一的算法。一些很基本的排版,例如说在显示不超过两行文字的空间里面显示任意长度的文字,这就是个大问题:

  1. 如何知道文字是否超过一行?不同字体不同语言的字符宽度各不相同,中文字符大多数情况下是等宽的,英文和数字就不是了,标点符号宽度要看上下文。
  2. 超过一行的话具体在哪里换行?英文换行只能发生在单词之间,否则要加连字符;中文换行时,一部分标点符号不能出现在下一行行首,另外一部分标点符号不能出现在上一行行尾。其它语言还有别的要求。
  3. 超过两行的话在哪里加省略号?不同语言的省略号占用不同的宽度,省略号前应该是一个完整的英文单词或中文字符,理想情况下中文最好按词截取而不是按字截取。

当你明白到文字渲染当中一个看似简单的 CSS overflow 属性有多复杂时,你就会想把这些工作扔回给浏览器的布局引擎处理,而不是自己从零写一套。




  

相关话题

  如何不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标? 
  为什么 JS 不能绕过后端代码直接调数据库,有哪些后端处理的逻辑,JS 不能写? 
  前端开发的难点到底在什么地方? 
  以前的 DHTML 如今是不是也算前端? 
  如何看待 TS 团队发起的 「JS 类型标注」提案 Types as Comments? 
  如何看待国内地图行业更新政策商用api每年需支付5w元? 
  JavaScript 中,定义函数时用 var foo = function () {} 和 function foo() 有什么区别? 
  为什么没有介绍谷歌JavaScript V8引擎的书? 
  浏览器解析Html一般是边下载边渲染么?如果是边下载边渲染的话,Html又使用GZIP格式传输,如何能够做到没有完全下载就可以渲染的呢? 
  有哪些短小却令人惊叹的 JavaScript 代码? 

前一个讨论
代码全是调包的,怎么申请专利?
下一个讨论
鱼缸可以做到完全永久不换水吗?





© 2025-03-28 - tinynew.org. All Rights Reserved.
© 2025-03-28 - tinynew.org. 保留所有权利