本項目僅供參考,須要瀏覽器css
支持display:flex
,position:sticky
等特性javascript
table
從功能上來說,行列的數據更適合使用table
,因此當您的需求中沒有固定表頭,固定列時,請直接使用table
,模擬table
更多的是解決固定表頭,固定列等事情。
table
有哪些問題當數據量多時,咱們指望表頭或表尾固定,只滾動中間區域,可是<tbody>
不能作爲滾動容器。若是咱們強制改變<tbody>
的display
使它能夠滾動,而後<thead>
中的列和<tbody>
中的列就對不齊了。css
而後咱們可能就要上javascript
而後各類同步列的寬度了,而後你會發現解決1
個問題會引入3
個問題,到最後列可能還會有些許的誤差並無對齊。html
這個網上的案例有一些,感興趣的話能夠搜搜看java
咱們知道css3
中position
新增了sticky
,若是瀏覽器支持,直接在<thead>
上使用position:sticky
就完成了表頭固定,多好?css3
chrome
曾經支持過<thead>
上設置position:sticky
,可是後來不知爲什麼又去掉了,而後目前沒有瀏覽器支持<thead>
上設置position:sticky
,這都什麼鬼?具體能夠看下caniuse
。https://caniuse.com/#search=s...git
table
作固定表頭,固定列功能網上常見的作法是使用4
個表格來完成相應的功能,以ant.design
爲表明,能夠看下它的效果和實現:https://ant.design/components... github
這種作法實現起來麻煩,計算的量也很多,在表頭固定、首列固定、尾列固定、表尾固定這些需求同時存在的狀況下,列對齊須要計算,而後同步。行高須要計算,而後同步,聽說ant.design
是以中間行爲最大高度,而後去同步首列中的行和尾列的行。chrome
作到最後依然可能對不齊,我在ant.design
中的表格組件上常常能見到對不齊的bug
瀏覽器
作完各類計算後,若是要實現鼠標移上行變色,你會發現css
中的hover
僞類無法使用,由於表格是分離的,這時候就又須要綁定javascript
事件進行模擬實現,這個簡直了...flex
div
模擬表格該方法仍然須要計算,但計算量少了不少,只須要列寬計算
由於行沒有被拆分,因此行高不須要計算對齊,同時可使用css
中的hover
僞類實現鼠標移入變色
示例可查看 https://xinglie.github.io/mag...
項目地址 https://github.com/xinglie/ma...