【Ten Mins Effect】 - 03 用户账户下拉菜单效果

246 阅读5分钟

大家好,这里是初心Yearth,欢迎来到 10 mins css,每天花 10 分钟,实现要给简单精美的 css 效果。

那么下面我们直接进入正题,先来看看今天的效果展示吧:

图片1
图片1

分析

可以看到,这是一个简单的用户账户下拉菜单效果,想要实现这个效果,抓住一下几个关键点即可:

  • 右上角的小尖角
  • 菜单显示消失的动画效果

要走到这一步,我们先来实现这个菜单的样式,简单分析一下可以看到:

  • 一个 title
  • 一个 subtitle
  • 若干 item
  • 每个 item 左边是图标
  • 当 item hover 的时候文字改变颜色

都是非常常规的样式,这里直接实现即可:

<div class="action">
  <div class="profile"><img src="./static/avatar.jpg" alt="" /></div>
  <div class="menu">
    <h3>Someone Famouse <br /><span>Website Designer</span></h3>
    <ul>
      <li><img src="./static/profile.png" alt="" /><a href="#">My Profile</a></li>
      <li><img src="./static/edit.png" alt="" /><a href="#">Edit Profile</a></li>
      <li><img src="./static/inbox.png" alt="" /><a href="#">Inbox</a></li>
      <li><img src="./static/settings.png" alt="" /><a href="#">Settings</a></li>
      <li><img src="./static/help.png" alt="" /><a href="#">Help</a></li>
      <li><img src="./static/logout.png" alt="" /><a href="#">Logout</a></li>
    </ul>
  </div>
</div>

:root {
  --bg-color#03a9f4;
  --title-color#555;
  --title--font-size18px;
  --subtitle-color#cecece;
  --subtitle--font-size14px;
  --active-color#ff5d94;
}
* {
  margin0;
  padding0;
}
body {
  backgroundvar(--bg-color);
  width100vw;
  height100vh;
}
.action {
  position: fixed;
  top20px;
  right30px;
}
.action .profile {
  width60px;
  height60px;
  border-radius50%;
  overflow: hidden;
  cursor: pointer;
  position: relative;
}
.action .profile img {
  position: absolute;
  top0;
  left0;
  width100%;
  height100%;
  object-fit: cover;
}
.action .menu {
  position: absolute;
  top80px;
  right: -10px;
  width200px;
  padding10px 20px;
  background#fff;
  border-radius15px;
  box-shadow0 5px 25px rgba(0000.1);
  transition0.5s;
}
.action .menu h3 {
  width100%;
  text-align: center;
  colorvar(--title-color);
  font-sizevar(--title--font-size);
  font-weight500;
  padding20px 0;
  line-height1.2rem;
}
.action .menu h3 span {
  font-sizevar(--subtitle--font-size);
  colorvar(--subtitle-color);
  font-weight400;
}
.action .menu ul li {
  list-style: none;
  padding10px 0;
  border-top1px solid rgba(0000.05);
  display: flex;
}
.action .menu ul li img {
  max-width20px;
  margin-right10px;
  opacity0.5;
  transition0.5s;
}
.action .menu ul li:hover img {
  opacity1;
}
.action .menu ul li a {
  text-decoration: none;
  colorvar(--title-color);
  font-weight500;
  transition0.5s;
}
.action .menu ul li:hover a {
  colorvar(--active-color);
}

效果如下:

图片2
图片2

现在,就只剩下上面提出的关键点了,我们一一分析。

要如何实现右上角的小尖角呢?

其实很简单:我们可以利用 before 伪类在 menu 的右上角做一个正方形,然后让其旋转 45° 即可:

+.action .menu::before {
+  content"";
+  position: absolute;
+  top: -5px;
+  right28px;
+  width20px;
+  height20px;
+  background#fff;
+  transformrotate(45deg);
+}

效果如下:

图片3
图片3

接下来实现显示和消失的效果,我们可以借助 js,在点击的时候给 menu 添加或删除 active 类,通过 active 来实现 menu 的显示和消失:

@@ -8,7 +8,7 @@
   </head>
   <body>
     <div class="action">
-      <div class="profile"><img src="./static/avatar.jpg" alt="" /></div>
+      <div class="profile" onclick="menuToggle();"><img src="./static/avatar.jpg" alt="" /></div>
       <div class="menu">
         <h3>Someone Famouse <br /><span>Website Designer</span></h3>
         <ul>
@@ -22,4 +22,10 @@
       </div>
     </div>
   </body>
+  <script>
+    function menuToggle(params) {
+      const menu = document.querySelector(".menu");
+      menu.classList.toggle("active");
+    }
+  </script>
 </html>
.action .menu {
   position: absolute;
   top80px;
   right: -10px;
   width200px;
   padding10px 20px;
   background#fff;
  border-radius15px;
   box-shadow0 5px 25px rgba(0000.1);
   transition0.5s;
+  opacity0;
+  visibility: hidden;
}
+.action .menu.active {
+  opacity1;
+  visibility: visible;
+}

效果如下:

图片4
图片4

最后,我们可以看到最终效果,这个菜单是往下滑动消失的,想要实现这个效果其实也简单,只需要加上偏移即可:

.action .menu {
   position: absolute;
-  top80px;
+  top120px;
   right: -10px;
   width200px;
   padding10px 20px;
   visibility: hidden;
 }
 .action .menu.active {
+  top80px;
   opacity1;
   visibility: visible;
 }

最终效果如下:

图片5
图片5

感兴趣的读者可以看看这个效果的在线 demo:用户帐户下拉菜单