【问题标题】:Button bar display text on hover悬停时按钮栏显示文本
【发布时间】:2015-02-11 08:34:34
【问题描述】:

我想知道是否有某种方法可以仅使用 CSS(无 JS)生成以下内容

这就是我想要完成的:

只是一个 div,右侧浮动有 2 个很棒的字体图标

鼠标悬停在笔图标上

鼠标悬停在 X 图标上

我已经尝试使用transformation 并从display: nonedisplay: block 执行此操作,但似乎无法为该CSS 属性设置动画。 我当前的代码如下所示:

section.container {min-width: 500px; margin: 10% auto; text-align: center;}
.text-on-hover {cursor: pointer; font-size:20px;}

.text-on-hover:hover:before {opacity: 1;}
.text-on-hover:before {
  content: attr(data-hover);
  margin: 0 10px;
  opacity: 0; 
  transition: all .5s ease-in-out;
}
<section class="container">
  <i class="text-on-hover" data-hover="A long text">A</i>
  <i class="text-on-hover" data-hover="Another long text">B</i>
</section>

有什么方法可以做到这一点?如果不是,为什么?

【问题讨论】:

  • 有一些方法....但是与我们分享您尝试过的代码
  • 您能否在问题中包含一些最少的代码? StackOverflow 不鼓励使用外部链接 - 将来可能无法使用 - 也没有代表性代码。
  • 您是在问是否可以在悬停时重现“点击”动作?
  • 这是input 元素吗?
  • 不,这是一个带有 2 个图标的 div。为了清楚起见,我将编辑帖子

标签: html css button hover


【解决方案1】:

编辑:查看第二个 sn-p。

以下是实现它的方法。

codepen

@import url(http://fonts.googleapis.com/css?family=Ubuntu:400,500,700);
html, body {
  height: 100%;
  width: 100%;
  padding: 0;
  margin: 0;
  font-family: 'Ubuntu', sans-serif;
  font-weight: bold;
}
body {
  background-color: #e58139;
}
header {
  background-color: #333;
  width: 100%;
  height: 65px;
  overflow: hidden;
}
.menu-links {
  padding-right: 20px;
}
.toggle-menu {
  position: relative;
  float: right;
  right: -220px;
  transition: right 0.5s ease-in;
}
.content {
  line-height: 43px;
}
.toggle-menu li {
	display: inline-block;
	list-style-type: none;
}
.toggle {
  padding-top: 5px;
  cursor: pointer;
}
li.toggle:hover span.toggle-menu-bar {
  background-color: #ddd;
}
.toggle-menu-bar {
	display: block;
	width: 25px;
	height: 4px;
	background-color: #e58139;
	-webkit-border-radius: 3px;
	-moz-border-radius: 3px;
	border-radius: 3px;
	margin: 0 auto 3px;
  transition: background-color 0.2s;
}
a {
  font-size: 25px;
  text-decoration: none;
  color: #e58139;
  padding-right: 20px;
  transition: color 0.2s;
}
a:hover {
  color: #ddd;
}
.menu-links:hover > .toggle-menu {
  right: 0;
}
<header>
  <div class="menu-links">
    <ul class="toggle-menu">
      <li class="toggle">
        <span class="toggle-menu-bar"></span>
        <span class="toggle-menu-bar"></span>
        <span class="toggle-menu-bar"></span>
      </li>
      <li class="content">
        <ul>
          <li><a href="#">Link 1</a>
          </li>
          <li><a href="#">Link 2</a>
          </li>
        </ul>
      </li>
    </ul>
  </div>
</header>

编辑:复制以下内容:

codepen

body {
  background: #222222;
}
div.edit,
div.delete {
  position: absolute;
  font-size: 22px;
  color: #989898;
  display: inline-block;
  cursor: pointer;
  transition: all 0.5s;
  right: 5px;
}
div.edit {
  transform: rotate(90deg);
  right: 30px;
}
.btn-container {
  margin: 2px 0 0 155px;
}
.box {
  position: relative;
  background-color: #F5F5F5;
  width: 200px;
  height: 30px;
  border: 10px solid #DDDDDD;
}
div.edit:hover,
div.delete:hover {
  color: #272727;
}
div.edit:hover:before {
  content: 'Edit';
  position: absolute;
  color: #989898;
  font-size: 12px;
  right: 0px;
  top: 30px;
  transform: rotate(-90deg);
}
div.delete:hover:before {
  content: 'Close';
  position: absolute;
  color: #989898;
  font-size: 12px;
  right: 22px;
  top: 5px;
}
.delete:hover + .edit {
  right: 60px;
}
<div class="container">
  <div class="box">
    <div class="btn-container">
      <div class="delete">&#10006;</div>
      <div class="edit">&#9998;</div>
    </div>
  </div>
</div>

【讨论】:

  • 这个成功了。 @chipchocolate-py 有任何方法可以在不修复 .delete:hover + .edit { right: 60px; } 行的情况下制作它,所以你不需要计算文本需要多少空间
  • @fuxes - 可以,但您需要使用 JavaScript。
【解决方案2】:

CSS 的 display 属性不能过渡。

但是对于这个特定的示例,当您向右浮动时,您可以转换菜单的 right 属性,如下所示:

.toggle-menu {
    right: -220px;
    position: relative;
    -webkit-transition: all 1s ease;
    -moz-transition: all 1s ease;
    -o-transition: all 1s ease;
    -ms-transition: all 1s ease;
    transition: all 1s ease;
}

.toggle-menu:hover {
    right: 0;
}

示例如下:http://jsfiddle.net/v8t2td3b/1/

(注意:我还从.content li 中删除了style="display: none;"

【讨论】:

    【解决方案3】:

    HTML

    <div class="menu">
        <div class="hamburger"></div>
        <div class="menu-items">
            <a href="">...</a>
            <a href="">...</a>
        </div>
    </div>
    

    CSS

    .menu-items {
        opacity: 0;
        width: 0;
        overflow: hidden;
        transition: all 0.5s ease;
    }
    
    .menu:hover > .menu-items {
        opacity: 1;
        width: 200px; /*or whatever width*/
    }
    

    是一种实现方式 JavaScript。

    【讨论】:

    • 我试过这种方式,但我无法让宽度影响任何东西。我刚刚上传了我的代码作为示例。 :)
    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多