[前端][CSS] 纯css实现纵向滚动固定表头与横向内容滚动

html-css012

[前端][CSS] 纯css实现纵向滚动固定表头与横向内容滚动,第1张

这次要实现的目标是类似这种,纵向滚动时表头固定,横向滚动时,表头跟着滚动

最基础的思路就是表头和内容是用两个表格来显示(图来自 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 的 writing-mode 属性和 float 属性。

设置 writing-mode 值为 vertical-lr , 可以使所有子元素纵向排列。

此时发现里面的子元素仍旧是横向排列,但文字变纵向了

再加上 float: left 让元素左排。

此时,元素已经变成纵向排列了,但由于未限制高度,元素将无限向下排列。同时子元素的文字排列方式也变成了纵向。

在给列表加一个高度。并重新设置子元素 writing-mode 属性便可解决

此时效果已经完成,但还有一个奇怪的问题

在添加到某个位置元素直接会跳到这列最后一个,不知这个问题为何会产生,但是在给子元素添加一个宽度后,bug 便神奇的好了。。

总结: writing-mode 是一个很长久的 css 属性了,新的值 vertical-lr 在大部分现代浏览器都已支持,在古老的 ie9 以下,也可用 lr 代替,所以这种实现方式是可兼容的。只是注意某些浏览器需要 --webkit- 或 --ms- 前缀。

writing-mode 属性 --MDN

下面是图片不失真但不保证是否完全铺满(留有空隙或者超出屏幕)的css代码:

1、横向铺满,纵向留有空隙或超出屏幕:

body {background:url(图片路径) no-repeat centerbackground-size:100% auto}

2、纵向铺满,横向留有空隙或超出屏幕:

body {background:url(图片路径) no-repeat centerbackground-size:auto 100%}

补充说明:background-size属于css3,只有支持css3的浏览器才有效。

电脑(Computer)是一种利用电子学原理根据一系列指令来对数据进行处理的机器。电脑可以分为两部分:软件系统和硬件系统。第一台电脑是1946年2月15日在美国宾夕法尼亚大学诞生的ENIAC通用电子计算机。

人们把没有安装任何软件的计算机称为裸机。随着科技的发展,现在新出现一些新型计算机有:生物计算机、光子计算机、量子计算机等。