「代码技巧」清除固定元素,显示隐藏内容。

146 阅读2分钟

image.png

CSS 是前端开发中重要的一部分,它可以让我们定义样式来美化网页并增加交互性。然而,有时候 CSS 样式可能会导致一些不必要的问题:

  1. 例如固定定位和粘性定位元素在页面滚动时可能会导致遮盖和混乱
  2. 显示屏横长竖短,本来不大的显示屏长时间被占用了一部分。

此外,某些情况下,HTML 和其他元素的 overflow 属性被设置为隐藏,这可能会影响到页面的展示和用户体验。

本文将介绍一种方法来移除固定定位和粘性定位元素,并强制取消 HTML 和所有元素的 overflow 属性隐藏。

我们将使用 JavaScript 来实现这个功能,下面是具体的代码实现:

(function () {

    // 移除固定定位和粘性定位元素
    document.querySelectorAll('body *').forEach(function(node) {
        if (['fixed', 'sticky'].includes(getComputedStyle(node).position))  {
            node.parentNode.removeChild(node);
        }
    });

    // 取消 HTML 和所有元素的 overflow 属性隐藏
    document.querySelectorAll('html *').forEach(function(node) {
        const s = getComputedStyle(node);
        if ('hidden' === s['overflow']) { node.style['overflow'] = 'visible'; }
        if ('hidden' === s['overflow-x']) { node.style['overflow-x'] = 'visible'; }
        if ('hidden' === s['overflow-y']) { node.style['overflow-y'] = 'visible'; }
    });

    const htmlNode = document.querySelector('html');
    htmlNode.style['overflow'] = 'visible';
    htmlNode.style['overflow-x'] = 'visible';
    htmlNode.style['overflow-y'] = 'visible';

})();

代码解释:

首先,我们使用 querySelectorAll() 方法来获取 body 中的所有元素,并使用 forEach() 方法来遍历它们。然后,我们检查每个元素的 position 属性是否为固定定位或粘性定位。如果是,我们将其从 DOM 中移除。

接下来,我们再次使用 querySelectorAll() 方法来获取 html 中的所有元素,并使用 forEach() 方法来遍历它们。然后,我们检查每个元素的 overflow 属性是否为隐藏。如果是,我们将其修改为可见。

最后,我们获取 html 元素,并将其 overflowoverflow-xoverflow-y 属性设置为可见。

注意📢:设置 overflow 的值并不能改变加了 importantoverflow-xoverflow-y,所以需要单独设置。

在这里,我们使用了 IIFE 来封装代码,以便在页面加载时立即执行。

上面代码比较暴力,它的缺点就是:这可能会删除导航,但如果您需要它,只需点击刷新即可,所以上面代码不适合作为浏览器插件,而更应该作为小书签程序,添加流程如下:

demo.gif

如果你想了解这个技术可以参考这篇文章——网页收藏夹小技巧:bookmarklet 一个你不知道的技术

文章灵感来源:kill-sticky-headers