DEMOs

导航页

mix-blend-mode

元素和其下方元素的合成效果,mix即所有元素成份都将受到影响

background-blend-mode

元素各背景图片和颜色的合成效果

#mix-blend-mode {
  --blend-color: rgb(255, 0, 0);
  --blend-color-diff: rgb(0, 255, 255);

  position: relative;
  width: torem(200px);
  height: torem(85px);
  background-color: color(white);
  border: 1px solid color(red);
  margin: torem(5px) 0;
  overflow: hidden;

  .bg {
    width: 100%;
    height: 100%;
    background-color: var(--blend-color);
    animation: loading 10s linear infinite;
  }

  .text {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    color: var(--blend-color);

    &::after {
      content: '0%';
      position: absolute;
      top: 0;
      right: 0;
      width: 100%;
      height: 100%;
      color: var(--blend-color-diff);
      font-size: torem(50px);
      line-height: torem(85px);
      text-align: center;
      animation: percentage 10s linear infinite;
      mix-blend-mode: difference;
    }
  }
}

#background-blend-mode {
  --blend-background-blend-mode: screen;

  width: torem(300px);
  height: torem(300px);
  background-image: url('../images/br.png'), url('../images/tr.png');
  background-size: cover;
  background-blend-mode: var(--blend-background-blend-mode);
  margin: torem(5px) 0;
}

@keyframes loading {
  0% {
    transform: translate3d(-100%, 0, 0);
  }

  100% {
    transform: translate3d(0, 0, 0);
  }
}

@keyframes percentage {
  @for $i from 1 through 100 {
    $value: $i + '%';

    #{$value} {
      content: $value;
    }
  }
}
import { Group } from 'zp-ui';

const blendObserver = () => {
  const t = document.querySelector('#background-blend-mode');

  return {
    update({ value }) {
      t.style.setProperty('--blend-background-blend-mode', value);
    },
  };
};

const handler = blend => ({ target }) => {
  const { value } = target;

  blend.setState({ value });
};

document.addEventListener('DOMContentLoaded', () => {
  const blend = new Group('blend');
  blend.attach(blendObserver());

  const t = document.querySelector('#background-blend-mode-select');
  t.addEventListener('change', handler(blend), false);
}, false);