【问题标题】:Dynamic box-shadow not working (react)动态框阴影不起作用(反应)
【发布时间】:2018-04-04 02:23:35
【问题描述】:

我试图复制 this 功能:

但是,我只希望每个按钮中包含三个 span 元素(左、右、背景)。

这是按钮的标记:

<a href="#" className="btn">Home
  <span className="r"></span>
  <span className="l"></span>
  <span className="background"></span>
</a>

这里是对应的css:

.btn{
  background-color: #FCA311;
  display: inline-block;
  border: 1px solid black;
  height: 100%;
  margin: 0 15px;
  width: 100px;
  padding-top: 5px;
  color: #FFFFFF;
  text-decoration: none;
  position: relative;
}

.btn span {
  display: block;
  position: absolute;
  opacity: 1;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
 }

 .btn .l {
   right: 50%;
 }

 .btn .r {
   left: 50%;
 }

 .btn .background {
   top: 0;
   left: 0;
   bottom: 0;
   right: 0;
   z-index: -1;
   background-color: #fff;
   opacity: 0;
   transition: all 0.4s ease;
   box-shadow: none;
  }

  .l:hover ~ .background  {
    box-shadow: 10px 10px 10px #fff;
    opacity: 1;
  }

  .r:hover ~ .background {
    box-shadow: -10px 10px 10px #fff;
    opacity: 1;
  }

我尝试围绕“.l”和“.r”跨度元素实施该技术,以检测悬停并相应地调整“.background”跨度的框阴影。我不知道有什么问题。如果有人能澄清一下,那就太好了。

【问题讨论】:

  • 您的代码按预期工作;它根据选择的正方形的哪一半正确应用部分框阴影。什么不按您希望的方式工作?
  • 这很奇怪......我猜它只是无法在我的机器上运行。对我来说它看起来不错,所以感谢您的确认。

标签: css reactjs jsx


【解决方案1】:

问题是z-index,看这段代码就很容易理解了

在这里,我将 z-index 应用于更高的背景和其他 并且左右的z-index高于背景

.container{
  display: flex;
  justify-content: space-between;
  border-bottom: 2px solid black;
  height: 100px;
  overflow: hidden;
  background-color: #fff;
}

.branding,.navigation{
  margin: 0 5px;
  text-align: center;
}

h1,h2{
  margin: 0;
  padding: 0;
}

ul{
  list-style: none;
  height: 30%;
  position: relative;
}

.btn{
  background-color: black;
  display: inline-block;
  border: 1px solid black;
  height: 100%;
  margin: 0 15px;
  width: 100px;
  padding-top: 5px;
  color: #fff;
  text-decoration: none;
  position: relative;
}

.btn span {
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

.btn .l {
  right: 50%;
      z-index: 556;
}

.btn .r {
  left: 50%;
      z-index: 556;
}

.btn .background {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  z-index: 555;
  transition: box-shadow 320ms;
}

.l:hover ~ .background  {
  box-shadow: 1px -1px 0 #2c3e50, 2px -2px 0 #2c3e50, 3px -3px 0 #2c3e50, 4px -4px 0 #2c3e50, 5px -5px 0 #2c3e50, 6px -6px 0 #2c3e50, 7px -7px 0 #2c3e50, 8px -8px 0 #2c3e50, 9px -9px 0 #2c3e50, 10px -10px 0 #2c3e50;
}

.r:hover ~ .background {
  box-shadow: -1px -1px 0 #2c3e50, -2px -2px 0 #2c3e50, -3px -3px 0 #2c3e50, -4px -4px 0 #2c3e50, -5px -5px 0 #2c3e50, -6px -6px 0 #2c3e50, -7px -7px 0 #2c3e50, -8px -8px 0 #2c3e50, -9px -9px 0 #2c3e50, -10px -10px 0 #2c3e50;
}


.navigation{
  display: flex;
  align-items: flex-end;
}

.branding{
  display: flex;
  flex-direction: column;
  justify-content: center;
}
<div class='container'>
        <div class='branding'>
          <h1></h1>
          <h2>Lorem Ipsum</h2>
        </div>
        <div class='navigation'>
          <ul>

            <a href="#" class="btn">Home
              <span class="r"></span>
              <span class="l"></span>
              <span class="background"></span>
            </a>

            <a href="#" class="btn">About
              <span class="r"></span>
              <span class="l"></span>
              <span class="background"></span>
            </a>

            <a href="#" class="btn">Contact
              <span class="r"></span>
              <span class="l"></span>
              <span class="background"></span>
            </a>

          </ul>
        </div>
      </div>

【讨论】:

  • 虽然答案总是很受欢迎,但提供一些有关如何您的代码解决手头问题的附加信息确实很有帮助。这样做有助于那些有类似(但不相同)问题的人。不是每个人都熟悉您的确切编码逻辑,但可能了解您的一般方法概念。为了帮助改进您的答案,请提供一些context surrounding it,并查看writing great answers 上的帮助文章以获取有关如何使您的答案重要的一些提示:)
  • 是的,我应该添加更多关于我在代码中所做的细节..,我的英语水平不好,但我会尽力解释..thanx 指向那个提示
  • 我逐行比较你的例子和我的例子,它几乎完全一样。我仍然不知道它不起作用。我会做一个codepen,看看它是否有效
  • 更新:我什至将 onClick 侦听器添加到 console.log 如果跨度正在侦听并且它们是... idk 此时还可以做什么
  • 希望这个解决方案能满足您的要求
猜你喜欢
  • 1970-01-01
  • 2021-08-11
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多