由于之前做了许多调整表格宽度的工作,但是一直会有小问题出现,并一度没有做出很好的解释,现在将问题还原,并给出解释。
问题一:对table设置了总宽度,每一列也设置了具体的宽度,那如果每一列设置的总宽度之和和table的宽度不一样,会怎么样呢?
为了避免这个计算问题,之前我会空出一列不设置宽度,把这个问题留给浏览器去计算。但是,不管如何去避免问题发生,但问题确实还是发生了。问题二:从表意的角度来看,就宽度而言,分别给th和td设置不同的宽度,最后宽度由谁来定呢?
终极问题:表格的宽度到底咋定的?
还原问题的场景,我的业务很简单,给我一组数据(tr),设置每一列的宽度,保证数据不出现换行。
现在做出解答:
- 一:
1.1如果宽度不一样,这分很多种情况,但总体思路是,浏览器会尽量按程序员设置的宽度去渲染,发现宽度不够用了(问题来了),就会去看其他列有没有空余的宽度可以用,如果有,不好意思我要借一点,那到底借多少呢?。
1.2到底借多少?这个问题得交给开发浏览器得程序员去考虑。但是一个可能的解释是,如何td太大了,超过了table,那么我只能按比例进行分配了。- 二:假设表格的宽度是动态确定的,那么就是由最后一行的宽度来确定,从我的经验来看,假设成立。
- 三:到底咋分配,要考虑的情况比较多,上面两个问题只是一些业务上的例子。比如:没有设置默认宽度,宽度是由表格的内容来定吗?部分设置了宽度,部分没有设置宽度,我们会认为会优先考虑的设置宽度的列,那没有设置宽度的列宽度如何定?
3.1用数学的角度去理解table渲染。
这个数学问题是这样,已知table的宽度w,列数l,列数宽度数组col[],其中col[i]取值范围为实数R,或未知。求实际col[]。
那么作为一个渲染器工程师,如何去处理这个问题呢?