类 Reddit 主题:应用背景图片并模糊

希望这能帮助到使用 Reddit 风格主题的用户,它为主题卡片添加了背景图片并应用了模糊效果,使网站看起来更简洁。

将此 JS 添加到你的组件中

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer((api) => {
  function applyImageBackgrounds() {
    document
      .querySelectorAll(".custom-topic-layout_image")
      .forEach((wrapper) => {
        const image = wrapper.querySelector("img");

        if (!image) {
          return;
        }

        const imageUrl =
          image.currentSrc ||
          image.getAttribute("src");

        if (!imageUrl) {
          return;
        }

        wrapper.style.setProperty(
          "--post-image-background",
          `url("${imageUrl}")`
        );

        wrapper.classList.add("has-post-image-background");
      });
  }

  api.onPageChange(() => {
    requestAnimationFrame(applyImageBackgrounds);
    setTimeout(applyImageBackgrounds, 250);
    setTimeout(applyImageBackgrounds, 1000);
  });

  const observer = new MutationObserver(() => {
    applyImageBackgrounds();
  });

  observer.observe(document.body, {
    childList: true,
    subtree: true
  });

  applyImageBackgrounds();
});

然后添加此 CSS

.custom-topic-layout_image {
    position: relative;
    overflow: hidden;
    isolation: isolate;
    background: #111;
}

/* Blurred copy of the post image */
.custom-topic-layout_image.has-post-image-background::before {
    content: "";
    position: absolute;
    inset: -30px;
    z-index: -2;

    background-image: var(--post-image-background);
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;

    filter: blur(25px);
    transform: scale(1.18);
    opacity: 0.9;

    pointer-events: none;
}

/* Darkens the blurred background */
.custom-topic-layout_image.has-post-image-background::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;

    background: rgba(0, 0, 0, 0.3);
    pointer-events: none;
}

/* Keep the original image sharp and centred */
.custom-topic-layout_image > img {
    position: relative;
    z-index: 1;

    display: block;
    width: 100%;
    height: 100%;

    object-fit: contain;
}

3 个赞