【问题标题】:CSS hover transition with opacity不透明度的 CSS 悬停过渡
【发布时间】:2019-01-03 17:25:04
【问题描述】:

我有一个带有纯背景的 div,它在悬停时变成图像。我想要一个过渡,使淡入淡出效果不是即时的,但我似乎无法完成这项工作。如果我添加 opacity: 0.5 到 .split.left:hover ,我可以让它工作,但文本颜色也会受到影响。如果只是悬停时改变的背景,我会更喜欢。

我想知道这是因为我使用的是 Safari 浏览器还是我只是执行错误?

.split.left {
  left: 0;
  background: linear-gradient( rgba(255, 255, 255, 1.0), rgba(255, 255, 255, 1.0));
  transition: opacity .25s ease-in-out;
  -moz-transition: opacity .25s ease-in-out;
  -webkit-transition: opacity .25s ease-in-out;
  border-right: 1px solid #f3f3f3;
}

.split.left:hover {
  left: 0;
  background: linear-gradient( rgba(34, 47, 61, 0.5), rgba(34, 47, 61, 0.5)), url('../images/img/split-left2.jpg') center center no-repeat;
}
<section class="split-menu">
  <div class="split-container">
    <div class="split left">
      <h1>Lorem Ipsum</h1>
      <div class="split-menu-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Enim neque voluptatibus, modi rerum dolor temporibus architecto sapiente ipsam, ea quae ducimus officiis aliquid odio perspiciatis nisi vitae ad tenetur iste quas suscipit! Aut, nisi corrupti
        ducimus magni cumque, illum provident, esse obcaecati illo doloremque, sunt necessitatibus. Laborum pariatur neque sequi natus, ducimus nisi obcaecati necessitatibus magnam perferendis! Ex alias adipisci dolorum nostrum vel reprehenderit accusamus
        eum earum consequatur optio illum consectetur itaque, aut minus doloremque ducimus ad perferendis, inventore magnam rerum quaerat recusandae aspernatur harum. Porro debitis, reiciendis facere voluptas eveniet explicabo libero autem pariatur doloremque
        tempora quasi modi quis.</div>
      <a href="#" class="split-button">Read More</a>
    </div>
    <div class="split right">
      <h1>Lorem Ipsum</h1>
      <div class="split-menu-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatibus nihil officia a accusamus nulla voluptas mollitia nostrum nesciunt, ducimus quam saepe vitae dolore at consequatur deleniti architecto itaque nobis temporibus adipisci hic. Harum
        blanditiis necessitatibus dolore dolorem eius inventore, voluptatibus minima adipisci nesciunt fuga ipsum esse, quasi reiciendis tempora. Similique doloremque odio, eligendi facilis, tenetur, nobis velit quod quasi, sit mollitia aliquam deleniti
        ipsum quo illo! Impedit minima tenetur eveniet earum vitae dicta ut odio eius eos, temporibus sint dignissimos quia, molestias, voluptatum. Repellat cum quaerat perspiciatis, a dolores aliquid autem vitae sit, minima quod odit nostrum maxime in
        ad.</div>
      <a href="#" class="split-button">Read More</a>
    </div>
  </div>
</section>

【问题讨论】:

  • 能否也添加必要的html代码?
  • 我现在添加了一些 HTML 和额外的 cmets。
  • 这类问题不太可能与浏览器有关。但是,如果您想在其他浏览器上进行测试,Browserling 是您的朋友。
  • 请更新您的问题以更清楚地说明您想要实现的目标,因为这会导致回答者感到困惑。您希望图像出现延迟,还是过渡淡入?

标签: html css css-transitions


【解决方案1】:

您可以使用转换延迟,但您可能需要将background 分别分解为图像和颜色。

.split.left {
  left: 0;
 
  transition: 0s background-color;
  -moz-transition: 0s background-color;
  -webkit-transition: 0s background-color;
  border-right: 1px solid #f3f3f3;
    
}

.split.left:hover {
  left: 0;
  background-color: rgba(34, 47, 61, 0.5);
  background-image: url('../images/img/split-left2.jpg') center center no-repeat;
   transition-delay: 1s;
   
  }
<section class="split-menu">
  <div class="split-container">
    <div class="split left">
      <h1>Lorem Ipsum</h1>
      <div class="split-menu-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Enim neque voluptatibus, modi rerum dolor temporibus architecto sapiente ipsam, ea quae ducimus officiis aliquid odio perspiciatis nisi vitae ad tenetur iste quas suscipit! Aut, nisi corrupti
        ducimus magni cumque, illum provident, esse obcaecati illo doloremque, sunt necessitatibus. Laborum pariatur neque sequi natus, ducimus nisi obcaecati necessitatibus magnam perferendis! Ex alias adipisci dolorum nostrum vel reprehenderit accusamus
        eum earum consequatur optio illum consectetur itaque, aut minus doloremque ducimus ad perferendis, inventore magnam rerum quaerat recusandae aspernatur harum. Porro debitis, reiciendis facere voluptas eveniet explicabo libero autem pariatur doloremque
        tempora quasi modi quis.</div>
      <a href="#" class="split-button">Read More</a>
    </div>
    <div class="split right">
      <h1>Lorem Ipsum</h1>
      <div class="split-menu-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatibus nihil officia a accusamus nulla voluptas mollitia nostrum nesciunt, ducimus quam saepe vitae dolore at consequatur deleniti architecto itaque nobis temporibus adipisci hic. Harum
        blanditiis necessitatibus dolore dolorem eius inventore, voluptatibus minima adipisci nesciunt fuga ipsum esse, quasi reiciendis tempora. Similique doloremque odio, eligendi facilis, tenetur, nobis velit quod quasi, sit mollitia aliquam deleniti
        ipsum quo illo! Impedit minima tenetur eveniet earum vitae dicta ut odio eius eos, temporibus sint dignissimos quia, molestias, voluptatum. Repellat cum quaerat perspiciatis, a dolores aliquid autem vitae sit, minima quod odit nostrum maxime in
        ad.</div>
      <a href="#" class="split-button">Read More</a>
    </div>
  </div>
</section>

希望对你有帮助

【讨论】:

  • 我认为您也误解了 OP 的意图。我很确定他们希望图像淡入,但他们并不意味着过渡延迟。
  • 你是对的!触发我使用转换延迟的方法是单词instant。谢谢
【解决方案2】:

我通过here为你创建了一个工作小提琴。

我使用position: absolute 将图像作为自己的 div,然后在position: relative 中创建了它的容器和文本。

.split.left {
  position: relative;
  border-right: 1px solid #f3f3f3;
}

.split.left .image {
  opacity: 0;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: linear-gradient( rgba(34, 47, 61, 0.5), rgba(34, 47, 61, 0.5)), url('https://www.gettyimages.ie/gi-resources/images/Homepage/Hero/UK/CMS_Creative_164657191_Kingfisher.jpg') center center no-repeat;
  transition: opacity .25s ease-in-out;
  -moz-transition: opacity .25s ease-in-out;
  -webkit-transition: opacity .25s ease-in-out;
}

.split.left:hover .image {
  opacity: 1;
}

h1,
.split-menu-text,
a.split-button {
  position: relative;
  z-index: 1;
}
<section class="split-menu">
  <div class="split-container">
    <div class="split left">
      <h1>Lorem Ipsum</h1>
      <div class="split-menu-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Enim neque voluptatibus, modi rerum dolor temporibus architecto sapiente ipsam, ea quae ducimus officiis aliquid odio perspiciatis nisi vitae ad tenetur iste quas suscipit! Aut, nisi corrupti
        ducimus magni cumque, illum provident, esse obcaecati illo doloremque, sunt necessitatibus. Laborum pariatur neque sequi natus, ducimus nisi obcaecati necessitatibus magnam perferendis! Ex alias adipisci dolorum nostrum vel reprehenderit accusamus
        eum earum consequatur optio illum consectetur itaque, aut minus doloremque ducimus ad perferendis, inventore magnam rerum quaerat recusandae aspernatur harum. Porro debitis, reiciendis facere voluptas eveniet explicabo libero autem pariatur doloremque
        tempora quasi modi quis.</div>
      <a href="#" class="split-button">Read More</a>
      <div class="image"></div>
    </div>
    <div class="split right">
      <h1>Lorem Ipsum</h1>
      <div class="split-menu-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatibus nihil officia a accusamus nulla voluptas mollitia nostrum nesciunt, ducimus quam saepe vitae dolore at consequatur deleniti architecto itaque nobis temporibus adipisci hic. Harum
        blanditiis necessitatibus dolore dolorem eius inventore, voluptatibus minima adipisci nesciunt fuga ipsum esse, quasi reiciendis tempora. Similique doloremque odio, eligendi facilis, tenetur, nobis velit quod quasi, sit mollitia aliquam deleniti
        ipsum quo illo! Impedit minima tenetur eveniet earum vitae dicta ut odio eius eos, temporibus sint dignissimos quia, molestias, voluptatum. Repellat cum quaerat perspiciatis, a dolores aliquid autem vitae sit, minima quod odit nostrum maxime in
        ad.</div>
      <a href="#" class="split-button">Read More</a>
    </div>
  </div>
</section>

【讨论】:

    【解决方案3】:

    当使用opacity时,在你的情况下它也会影响.split.left的内容。

    这里的一个选项是为渐变/背景图像使用伪元素,您可以轻松地将其淡入/淡出而不影响其余内容。

    它还可以保持整洁,不需要额外的标记。

    堆栈sn-p

    .split.left {
      position: relative ;
      border-right: 1px solid #f3f3f3;
    }
    .split.left > * {
      position: relative ;              /*  this will avoid using z-index on pseudo  */
    }
    
    .split.left::before {
      content: '';
      opacity: 0;
      transition: opacity 1s linear;
      position: absolute;
      left: 0; top: 0;
      right: 0; bottom: 0;  
      background: linear-gradient(
        rgba(34, 47, 61, 0.1),
        rgba(34, 47, 61, 0.5)),
        url('http://placehold.it/300x100/faa/faa') center center no-repeat;
    }
    
    .split.left:hover::before {
      opacity: 1;
    }
    <section class="split-menu">
        <div class="split-container">
          <div class="split left">
            <h1>Lorem Ipsum</h1>
            <div class="split-menu-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Enim neque voluptatibus, modi rerum dolor temporibus architecto sapiente ipsam, ea quae ducimus officiis aliquid odio perspiciatis nisi vitae ad tenetur iste quas suscipit! Aut, nisi corrupti ducimus magni cumque, illum provident, esse obcaecati illo doloremque, sunt necessitatibus. Laborum pariatur neque sequi natus, ducimus nisi obcaecati necessitatibus magnam perferendis! Ex alias adipisci dolorum nostrum vel reprehenderit accusamus eum earum consequatur optio illum consectetur itaque, aut minus doloremque ducimus ad perferendis, inventore magnam rerum quaerat recusandae aspernatur harum. Porro debitis, reiciendis facere voluptas eveniet explicabo libero autem pariatur doloremque tempora quasi modi quis.</div>
            <a href="#" class="split-button">Read More</a>
          </div>
          <div class="split right">
            <h1>Lorem Ipsum</h1>
            <div class="split-menu-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatibus nihil officia a accusamus nulla voluptas mollitia nostrum nesciunt, ducimus quam saepe vitae dolore at consequatur deleniti architecto itaque nobis temporibus adipisci hic. Harum blanditiis necessitatibus dolore dolorem eius inventore, voluptatibus minima adipisci nesciunt fuga ipsum esse, quasi reiciendis tempora. Similique doloremque odio, eligendi facilis, tenetur, nobis velit quod quasi, sit mollitia aliquam deleniti ipsum quo illo! Impedit minima tenetur eveniet earum vitae dicta ut odio eius eos, temporibus sint dignissimos quia, molestias, voluptatum. Repellat cum quaerat perspiciatis, a dolores aliquid autem vitae sit, minima quod odit nostrum maxime in ad.</div>
            <a href="#" class="split-button">Read More</a>
          </div>
        </div>
      </section>

    在背景显示之前,悬停时会有延迟。

    堆栈sn-p

    .split.left {
      position: relative ;
      border-right: 1px solid #f3f3f3;
    }
    .split.left > * {
      position: relative ;
    }
    
    .split.left::before {
      content: '';
      opacity: 0;
      transition: opacity 1s 0s linear;
      position: absolute;
      left: 0; top: 0;
      right: 0; bottom: 0;  
      background: linear-gradient(
        rgba(34, 47, 61, 0.1),
        rgba(34, 47, 61, 0.5)),
        url('http://placehold.it/300x100/faa/faa') center center no-repeat;
    }
    
    .split.left:hover::before {
      opacity: 1;
      transition: opacity 1s .5s linear;
    }
    <section class="split-menu">
        <div class="split-container">
          <div class="split left">
            <h1>Lorem Ipsum</h1>
            <div class="split-menu-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Enim neque voluptatibus, modi rerum dolor temporibus architecto sapiente ipsam, ea quae ducimus officiis aliquid odio perspiciatis nisi vitae ad tenetur iste quas suscipit! Aut, nisi corrupti ducimus magni cumque, illum provident, esse obcaecati illo doloremque, sunt necessitatibus. Laborum pariatur neque sequi natus, ducimus nisi obcaecati necessitatibus magnam perferendis! Ex alias adipisci dolorum nostrum vel reprehenderit accusamus eum earum consequatur optio illum consectetur itaque, aut minus doloremque ducimus ad perferendis, inventore magnam rerum quaerat recusandae aspernatur harum. Porro debitis, reiciendis facere voluptas eveniet explicabo libero autem pariatur doloremque tempora quasi modi quis.</div>
            <a href="#" class="split-button">Read More</a>
          </div>
          <div class="split right">
            <h1>Lorem Ipsum</h1>
            <div class="split-menu-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatibus nihil officia a accusamus nulla voluptas mollitia nostrum nesciunt, ducimus quam saepe vitae dolore at consequatur deleniti architecto itaque nobis temporibus adipisci hic. Harum blanditiis necessitatibus dolore dolorem eius inventore, voluptatibus minima adipisci nesciunt fuga ipsum esse, quasi reiciendis tempora. Similique doloremque odio, eligendi facilis, tenetur, nobis velit quod quasi, sit mollitia aliquam deleniti ipsum quo illo! Impedit minima tenetur eveniet earum vitae dicta ut odio eius eos, temporibus sint dignissimos quia, molestias, voluptatum. Repellat cum quaerat perspiciatis, a dolores aliquid autem vitae sit, minima quod odit nostrum maxime in ad.</div>
            <a href="#" class="split-button">Read More</a>
          </div>
        </div>
      </section>

    【讨论】:

    • 我认为您在这里误解了 OP 的意图(我不怪您)。我认为他们不希望在过渡之前有延迟,他们只是想要过渡。
    • @JamesDouglas 那么,“...悬停效果不是即时的”是什么意思?
    • 上下文也很重要。 “我想要一个过渡,使悬停效果不是即时的,但我似乎无法做到这一点。”我认为他们希望图像淡入。
    • @JamesDouglas 你可能是对的......谢谢,更新,2 个样本涵盖了这两个选项。
    猜你喜欢
    • 2013-11-15
    • 2015-07-13
    • 2021-07-26
    • 2014-11-15
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    相关资源
    最近更新 更多