【问题标题】:How to fix my on hover effect to highlight selected item?如何修复我的悬停效果以突出显示所选项目?
【发布时间】:2017-05-22 07:26:40
【问题描述】:

我正在尝试在悬停时突出显示一个项目,同时降低其他项目的“亮度”,因此重点放在悬停项目上。我的商品由图片、尺寸选择器和添加到购物车按钮组成。我想要的是当鼠标悬停在这些部分中的任何一个上时,这三个部分同时突出显示。我只想用 CSS 来做这件事,并设法得到我想要的东西,除非鼠标悬停在添加到购物车按钮或选择器上,只有这些项目会突出显示。这是我的 CSS:

   #Productlist {
      list-style-type: none;
      position: relative;
      display: inline-block;
      margin-top: 100px;
    }

    .Product img {
      width: 350px; 
      height: 400px;
      display: inline-block;
      position: relative;
      left: 50px;
      margin-top: 100px;
    }

    .Product:hover img {
      opacity: 1;
    }

    #Productlist:hover img{
      opacity: 0.5;
      -webkit-transition: .3s ease-in-out;
      transition: .3s ease-in-out;
    } 

    .Product button {
      background-color: #141516;
      position: relative;
      right: 134px;
      display: inline-block;
      z-index: 1;
      padding: 15px 45px;
      line-height: 1.8;
      text-align:center;
      text-transform:uppercase;
      font-size:0.8rem;
      font-weight:600;
      -webkit-transition: all 0.3s;
      -moz-transition: all 0.3s;
      transition: all 0.3s;
      border: 3px solid white;
    }

    .Product button a {

      position:relative;
      padding:0px;
      text-align:center;
      text-transform:uppercase;
      color:#888888;
      font-size:0.8rem;
      font-weight:600;
      line-height:60px;
      -webkit-transition: all 0.3s;
      -moz-transition: all 0.3s;
      transition: all 0.3s;

    }

    .Product button:hover a {

      color:red;
      z-index: 1000;
    }

    .Product button:hover {

      color:black;
      background-color: white;
      border: 1px solid white;
    }

    #size{
      display: inline-block;
      z-index: 1;
      color: white;
      position: relative;
      right: 484px;
      border: 3px solid white;
      width: 120px;
      height: 40px;
      border-radius: 3px;
      overflow: hidden;
      background: #141516 url("img/icon-select.png") no-repeat 90% 50%;
    }

    #size:focus {
      outline: none;
    }

这是我的 HTML:

    <div className='Webshop' id='Webshop'>
        <li id="Productlist">
            <div className='Product'>
              <img src={Seltzshirt}></img>
              <button onClick={this.handleClick} className="addit">Add to cart</button>
              <select id="size" onChange={this.change} value={this.state.value}>
                <option value="medium">Medium</option>
                <option value="large">Large</option>
                <option value="x-large">X-large</option>
              </select>
            </div>
            <div className='Product'>  
              <img src={Seltzshirt}></img>
              <button onClick={this.handleClick} className="addit">Add to cart</button>
              <select id="size" onChange={this.change} value={this.state.value}>
                <option value="medium">Medium</option>
                <option value="large">Large</option>
                <option value="x-large">X-large</option>
              </select>
            </div>
        </li>
    </div>

更新

我更新了我的 CSS 和 HTML 以显示我所做的一些更改并应用了 Michael Coker 的建议。现在,当我悬停图像、按钮或选择器时,所有图像都会变暗,选择器和按钮都保持突出显示。为什么我的 .Product img 在悬停时忽略更改 opacity: 1;

我制作了这个 CodePen 来说明我的问题是什么:https://codepen.io/Feners4/pen/xdQmyQ

【问题讨论】:

    标签: javascript html css reactjs


    【解决方案1】:

    使用#Productlist:hover img { opacity: .5; }更改所有图像的不透明度,并使用#Product:hover img { opacity: 1; }排除当前图像

    #Productlist {
      list-style-type: none;
      position: relative;
      display: inline-block;
      margin-top: 100px;
    }
    
    #Product img {
      width: 350px;
      height: 400px;
      display: inline-block;
      position: relative;
      left: 50px;
      margin-top: 100px;
    }
    
    #Productlist:hover img {
      opacity: 0.5;
      -webkit-transition: .3s ease-in-out;
      transition: .3s ease-in-out;
    }
    
    #Product:hover img {
      opacity: 1;
    }
    
    #Webshop button {
      background-color: #141516;
      position: relative;
      right: 134px;
      display: inline-block;
      z-index: 1;
      padding: 15px 45px;
      line-height: 1.8;
      text-align: center;
      text-transform: uppercase;
      font-size: 0.8rem;
      font-weight: 600;
      -webkit-transition: all 0.3s;
      -moz-transition: all 0.3s;
      transition: all 0.3s;
      border: 3px solid white;
    }
    
    #Webshop button a {
      position: relative;
      padding: 0px;
      text-align: center;
      text-transform: uppercase;
      color: #888888;
      font-size: 0.8rem;
      font-weight: 600;
      line-height: 60px;
      -webkit-transition: all 0.3s;
      -moz-transition: all 0.3s;
      transition: all 0.3s;
    }
    
    #Webshop button:hover a {
      color: red;
      z-index: 1000;
    }
    
    #Webshop button:hover {
      color: black;
      background-color: white;
      border: 1px solid white;
    }
    
    #size {
      display: inline-block;
      z-index: 1;
      color: white;
      position: relative;
      right: 484px;
      border: 3px solid white;
      width: 120px;
      height: 40px;
      border-radius: 3px;
      overflow: hidden;
      background: #141516 url("img/icon-select.png") no-repeat 90% 50%;
    }
    
    #size:focus {
      outline: none;
    }
    <div className='Webshop' id='Webshop'>
      <li id="Productlist">
        <div id='Product'>
          <img src=http://kenwheeler.github.io/slick/img/lazyfonz2.png></img>
          <button onClick={this.handleClick} className="addit">Add to cart</button>
          <select id="size" onChange={this.change} value={this.state.value}>
                    <option value="medium">Medium</option>
                    <option value="large">Large</option>
                    <option value="x-large">X-large</option>
                  </select>
        </div>
        <div id='Product'>
          <img src=http://kenwheeler.github.io/slick/img/lazyfonz2.png></img>
          <button onClick={this.handleClick} className="addit">Add to cart</button>
          <select id="size" onChange={this.change} value={this.state.value}>
                    <option value="medium">Medium</option>
                    <option value="large">Large</option>
                    <option value="x-large">X-large</option>
                  </select>
        </div>
        <div id='Product'>
          <img src=http://kenwheeler.github.io/slick/img/lazyfonz2.png></img>
          <button onClick={this.handleClick} className="addit">Add to cart</button>
          <select id="size" onChange={this.change} value={this.state.value}>
                    <option value="medium">Medium</option>
                    <option value="large">Large</option>
                    <option value="x-large">X-large</option>
                  </select>
        </div>
        <div id='Product'>
          <img src=http://kenwheeler.github.io/slick/img/lazyfonz2.png></img>
          <button onClick={this.handleClick} className="addit">Add to cart</button>
          <select id="size" onChange={this.change} value={this.state.value}>
                    <option value="medium">Medium</option>
                    <option value="large">Large</option>
                    <option value="x-large">X-large</option>
                  </select>
        </div>
      </li>
    </div>

    【讨论】:

    • 我无法将此方法应用于我的按钮和选择器组件。对它们使用 &lt;li&gt; 标记会导致按钮和选择器失去它们的位置,并且不会像我让它们在按钮和选择器“是图像框架的一部分”的位置对齐。
    • 在使用您的建议后,我一直在试图弄清楚为什么最终图像会被整个页面拍摄..
    • 我还没有弄清楚为什么图像占据了整个屏幕。我的 CSS 为它们分配了一个大小..任何想法可能会发生什么?我正在使用 React btw..idk,如果这需要做任何事情..
    • @feners 由您决定是否重现您帖子中的行为,我们会在帖子中解决问题。我所能做的就是猜测为什么它对你的个人项目不起作用,这对我们双方都没有成效。
    • 我明白了。我问是因为在应用您的代码之前图像以正确的尺寸显示,所以我想知道可能会发生什么变化......
    【解决方案2】:

    简单基本的解释:

    您需要像这样定位父级的悬停并将样式应用于所有子级。之后,在当前悬停的元素上应用opacity: 1

    ul {
      &:hover {
        li {
          opacity: 0.4;
        }
      }
      li {
        transition: opacity .8s;
        &:hover {
          opacity: 1;
        }
      }
    }
    

    Demo

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多