最基础的思路就是表头和内容是用两个表格来显示(图来自 https://zhuanlan.zhihu.com/p/33280304 ),关于怎么保存表头和内容列宽一致链接里这个文章里也有写就不另外说了。
纵向滚动是挺好实现的,我开始是在内容的表格外面套了一个div,之后设置 overflow-y:auto 就实现纵向滚动了。
但横向滚动呢?
首先想到的方案是在最外面的div,outer加上 overflow-x:auto
虽然这样横纵都能滚动了,但是横向滚动的时候纵向滚动条也被滚走了。
然后想到了是用js来同步,可以是可以的,但是还是想挣扎一下。
之后想到了fixed,发现如果表头设置为fixed无论横向滚动还是都会被固定在原地。
最后突然想到一个position的新属性,sticky
设置了 position: sticky ,在屏幕范围(viewport)时该元素的位置并不受到定位影响(设置是top、left等属性无效),当该元素的位置将要移出偏移范围时,定位又会变成fixed,根据设置的left、top等属性成固定位置的效果( https://www.cnblogs.com/s1nker/p/4835079.html )。
所以最后设置了表头
css:
就成功实现了想要的效果了。
不过sticky的兼容性也是要考虑一下的。
告诉你一个非常好用的css样式,特别好用
box-sizing: border-box
即使加了padding或者margin属性都会有奇效哦
另外,你上面的滚动条改为overflow: auto
至于高度百分比问题,需要设置一下:
html,body{height:100%}
而且,你所设置80%高度的标签父级标签也要设一下,我随便写了一个案例,你看看,本来加了padding后实际显示的高度会大于设置的高度,但是加了box-sizing: border-box后,显示的高度还是50%
<style type="text/css">html,body{ height:100% margin:0 padding:0}
</style>
</head>
<body>
<div style=" height:100% background:red">
<div style=" height:600px background:blue">
<div style=" height:50% background:green padding:50px overflow:auto box-sizing: border-box">
<div style="height:1000px background:black color:white">这是内容部分</div>
</div>
</div>
</div>
</body>