html CSS投影错误地应用到< img>容器的某些地方,而不是< img>元素

0dxa2lsx  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(117)

已解决!请参见下面的答案。
我正在建立一个有多个<section>元素的网站,在大多数<section>元素中,我可以正确地将CSS filter: drop-shadow规则应用到给定的<img>元素,方法是在HTML中给它一个id,然后在CSS中指定id,并给它一个类似filter: drop-shadow(0px 0px 5px black);的规则。
然而,在页面上的一个<section>中,当我使用上面的方法对该部分中的图像应用下拉阴影时,下拉阴影应用于包含<div>元素的单个元素,而不是<img>元素本身。
相关部分的HTML为:

<section class="skills" id="skills">
      <h2 class="skill-header">Skills</h2>

      <div class="skills-wrapper">
        <div class="icon-wrapper">
          <img
            src="./assets/memojis/Me-Memoji-wondering-flipped.png"
            alt="Me wondering memoji"
            loading="lazy"
            class="icon icon-card skills-memoji"/>
        </div>
        <div class="icon-wrapper">
          <img
            src="./assets/icons/icons8-html-5.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          />
        </div>
        <div class="icon-wrapper">
          <img
            src="assets/icons/icons8-css3.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          />
        </div>
      </div>
      <div class="skills-wrapper">
        <div class="icon-wrapper">
          <img
            src="assets/icons/icons8-javascript.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          />
        </div>
        <div class="icon-wrapper">
          <img
            src="assets/icons/icons8-bootstrap.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          />
        </div>
        <div class="icon-wrapper">
          <img
            src="./assets/memojis/Me-Memoji-thumbs-upping.png"
            alt="Me giving a thumbs up"
            loading="lazy"
            class="icon icon-card skills-memoji"
          />
        </div>
      </div>
    </section>

CSS是:

* {
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  background-color: var(--color-background);
  /* background-image: url("./background.svg"); */
  background-repeat: no-repeat;
  background-size: cover;
  color: var(--color-text);
  text-shadow: var(--text-shadow);
}

.skills {
  align-items: center;
  margin: var(--margin-section-standard);
  max-width: var(--section-max-width);
  width: var(--section-width);
  background-color: var(--color-section);
  border-radius: var(--border-radius-right-trapezoid-large);
  padding: var(--padding-section-standard);
  border: var(--border);
  box-shadow: var(--box-shadow);
  scroll-margin-block-start: var(--scroll-margin-block-start);
}

.skills h2 {
  margin-bottom: var(--bottom-margin-1);
  text-align: center;
}

.skills div {
  line-height: var(--line-height);
  padding: 0.4rem;
  text-align: center;
}

.skills .skills-wrapper {
  width: 100%;
}

.icon-wrapper {
  display: inline-grid;
  width: 20%;
  justify-content: center;
  margin: 1rem;
}

.icon {
  filter: var(--drop-shadow-image);
}

.icon-card {
  background-color: var(--color-background);
  border-radius: var(--border-radius-right-trapezoid-small);
  box-shadow: var(--box-shadow);
  padding: 1rem;
  /* margin: 10px; */
  width: 12rem;
  border: var(--border);
}

.skills-memoji {
  /* filter: var(--drop-shadow-image); */
}

当我取消注解.skills-memoji规则集中的filter规则以使其活动时,下拉阴影被应用于类.icon-wrapper的包含元素。我正在尝试弄清楚如何将下拉阴影应用于HTML中的实际<img>元素,如CSS中类.skills-memoji所指定的。

yrwegjxp

yrwegjxp1#

解决了!我在.icon-card类上设置了背景色和边框样式,它与我试图获取过滤器的.skills-memoji类处于同一层次:drop-shadow()设置为on。我猜这会导致浏览器计算出分类为.skills-memoji的元素有背景色规范和边框规范,导致图像被视为具有不透明的背景(加上边框),从而导致浏览器呈现过滤器:drop-shadow()在.skills-memoji的背景边缘而不是直接在元素上。
我将背景色和边框规范移到了包含每个div classed. icon-card的div classed .icon-wrapper中,一旦我做了这个更改,这两个元素就按照我之前的预期呈现了。

相关问题