首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时使用display: none和display:flex;

同时使用display: none和display:flex;
EN

Stack Overflow用户
提问于 2015-12-18 16:37:08
回答 2查看 23.3K关注 0票数 14

我有一个div,当你将鼠标悬停在它上面时,它的一个子元素-另一个div -应该会使用JQuery淡入淡出。为了获得更好的想法,你可以看看下面的codepen

HTML:

代码语言:javascript
复制
<div id="container">

  <div class="item">
    <img src="https://placehold.it/375x250">
    <div class="description">
      <h3>Description</h3>
    </div>
  </div>

</div>

CSS:

代码语言:javascript
复制
#container {
  width: 100%;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

#container .item {
  width: 375px;
  height: 250px;
  position: relative;
}

#container .item img {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
}

#container .item .description {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  background: rgba(0, 0, 0, 0.8);
  color: #fff;
  display: none;
  display: flex;
  justify-content: center;
  align-items: center;
  font-family: sans-serif;
}

JQuery:

代码语言:javascript
复制
$(function () {

  $('.item').hover(
    function () {
      // mouse over
      $('.description').fadeIn(1000);
    },
    function () {
      // mouse out
      $('.description').fadeOut(1000);
    }
  );

});

在CSS > div部分,我同时使用了display: none ( JQuery需要的,以便最初隐藏.description )和display: flex (用于使内容很好地居中)。但是当这两个属性组合在一起时,最后一个display属性将被读取,而display: none将被忽略。我怎么才能让这个东西工作呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-18 17:00:45

首先,你想从你的CSS中删除display: flex,因为它正在被使用(因为它覆盖了之前的display: none)。

然后在您的JS中,将fadeIn替换为以下cssanimate的组合以实现效果。

代码语言:javascript
复制
$(function() {
    $('.item').hover(
        function() {
            $('.description').css({opacity: 0, display: 'flex'}).animate({
                opacity: 1
            }, 1000);
        },
        function() {
            $('.description').fadeOut(1000);
        });
}); 

这里的css函数在每个效果之前使用,以设置opacity: 0display: flex,之后它将animate opacity: 1

然后在fadeOut上没有什么特别的事情发生,因为它只会淡出display: none

票数 9
EN

Stack Overflow用户

发布于 2015-12-18 17:01:42

你的容器是flex容器,所以里面的flex项不应该有一个初始的display: none。CSS规则将采用最后一个属性定义,因此重复的显示属性将覆盖以前的定义。我和你的codepen玩过了,我已经更新了它。Is this what you're looking for?

代码语言:javascript
复制
.description {
    /* ... */
    display: none;
    /* ... */
}   // .description
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34351472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档