过渡不适用于悬停

Transition not working on hover

我不知道,但由于某些原因,转换似乎不起作用。我正在测试这个 Google Chrome.

[data-title] {
 position: relative;
  margin: 100px;
}

[data-title]:hover:before {
  transform: translate(-50%, 0);
 width: 18px;
 height: 6px;
 left: 50%;
 margin-top: 0px;
 top: 100%;
 opacity: 1;
 pointer-events: auto;
  -webkit-transition: all 0.25s;
  transition: all 0.25s;
 content: '';
 position: absolute;
 z-index: 10;
 box-sizing: border-box;
 border-left: 8px solid transparent;
 border-right: 8px solid transparent;
 border-bottom: 10px solid #00204e;
  
}

[data-title]:hover:after {
 transform: translate(-50%, 0);
 left: calc(50%);
 margin-top: 10px;
 top: 100%;
 opacity: 1;
 pointer-events: auto;
  -webkit-transition: all 0.25s;
  transition: all 0.25s;
 font-weight: normal;
 text-shadow: none;
 background: #00204e;
 border-radius: 4px;
 color: #fff;
 content: attr(data-title);
 padding: 10px;
 position: absolute;
 white-space: normal;
 width: max-content;
 font-size: 12px;
 font-family: 'Helvetica Neue';
 line-height: normal;
 max-width: 150px;
 text-align: left;
 height: auto;
 display: inline-block;
}
<span class="dijitButtonContents" id="saveButton" data-title="Save as draft"><span id="saveButton_label">Save</span></span>

任何人都可以帮助我哪里出错或者我遗漏了什么吗?

我什至尝试将过渡时间设置为 +1 秒,但仍然反映不一样。

如果您希望某些东西从一个状态 transition 到另一个状态,您必须定义这两个状态。这意味着具有 base-style 和 :hover 样式。

例如:

.test {
  width: 100px;
  height: 50px;
  background: red;
  transition: all 2s;
}

.test:hover {
  height: 100px;
}
<div class="test">test</div>

这是可行的,因为 height 属性有一个初始状态。然而,这:

.test {
  width: 100px;
  background: red;
  transition: all 2s;
}

.test:hover {
  height: 300px;
}
<div class="test">test</div>

这将不起作用,因为浏览器没有指定的 height 作为初始状态。

您还没有为原始状态设置任何内容,所以转换不知道从哪里开始。如果您只想转换项目的外观 - 例如淡入或淡出,那么您需要做一些事情,例如转换不透明度:

[data-title] {
  position: relative;
  margin: 100px;
}

[data-title]:before {
  width: 18px;
  height: 6px;
  left: 50%;
  margin-top: 0px;
  top: 100%;
  opacity: 1;
  content: '';
  position: absolute;
  z-index: 10;
  box-sizing: border-box;
  border-left: 8px solid transparent;
  border-right: 8px solid transparent;
  border-bottom: 10px solid #00204e;
  transform: translate(-50%, 0);
  opacity: 0;
  transition: opacity 0.5s;
  pointer-events: none;
}

[data-title]:after {
  transform: translate(-50%, 0);
  left: calc(50%);
  margin-top: 10px;
  top: 100%;
  opacity: 1;
  font-weight: normal;
  text-shadow: none;
  background: #00204e;
  border-radius: 4px;
  color: #fff;
  content: attr(data-title);
  padding: 10px;
  position: absolute;
  white-space: normal;
  width: max-content;
  font-size: 12px;
  font-family: 'Helvetica Neue';
  line-height: normal;
  max-width: 150px;
  text-align: left;
  height: auto;
  display: inline-block;
  opacity: 0;
  transition: opacity 0.5s;
  pointer-events: none;
}

[data-title]:hover:before,
[data-title]:hover:after {
  opacity: 1;
  pointer-events: auto;
}
<span class="dijitButtonContents" id="saveButton" data-title="Save as draft"><span id="saveButton_label">Save</span></span>