效果预览

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

https://codepen.io/comehope/pen/xjoOeM

可交互视频教程

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/c/cQ74NAJ

源代码下载

每日前端实战系列的全部源代码请从 github 下载:

https://github.com/comehope/front-end-daily-challenges

代码解读

定义dom,容器中只包含 1 个按钮:

  1. <nav>
  2. <ul>
  3. <li>Home</li>
  4. </ul>
  5. </nav>

定义按钮样式:

  1. nav {
  2. --h: 3em;
  3. }
  4. nav ul {
  5. padding: 0;
  6. }
  7. nav ul li {
  8. list-style-type: none;
  9. width: calc(var(--h) * 1.732);
  10. height: var(--h);
  11. background-color: #333;
  12. color: white;
  13. font-family: sans-serif;
  14. text-align: center;
  15. line-height: var(--h);
  16. }

用伪元素增加2个倾斜的矩形:

  1. nav ul li {
  2. position: relative;
  3. }
  4. nav ul li::before,
  5. nav ul li::after {
  6. content: '';
  7. position: absolute;
  8. top: 0;
  9. left: 0;
  10. width: inherit;
  11. height: inherit;
  12. background-color: #333;
  13. }
  14. nav ul li::before{
  15. transform: rotate(60deg) translateX(calc(var(--h) * -2));
  16. }
  17. nav ul li::after{
  18. transform: rotate(-60deg) translateX(calc(var(--h) * 2));
  19. }

增加鼠标划过效果:

  1. nav ul li::before,
  2. nav ul li::after {
  3. z-index: -1;
  4. filter: opacity(0);
  5. transition: 0.3s;
  6. }
  7. nav ul li:hover::before {
  8. filter: opacity(1);
  9. transform: rotate(60deg) translateX(0);
  10. }
  11. nav ul li:hover::after {
  12. filter: opacity(1);
  13. transform: rotate(-60deg) translateX(0);
  14. }

dom 中增加几个按钮,形成一组按钮:

  1. <nav>
  2. <ul>
  3. <li>Home</li>
  4. <li>Products</li>
  5. <li>Services</li>
  6. <li>Contact</li>
  7. </ul>
  8. </nav>

按钮之间为鼠标划过效果留出边距:

  1. nav ul li {
  2. margin: 2em;
  3. }

再增加两组按钮:

  1. <nav>
  2. <ul>
  3. <li>Home</li>
  4. <li>Products</li>
  5. <li>Services</li>
  6. <li>Contact</li>
  7. </ul>
  8. </nav>
  9. <nav>
  10. <ul>
  11. <li>Home</li>
  12. <li>Products</li>
  13. <li>Services</li>
  14. <li>Contact</li>
  15. </ul>
  16. </nav>
  17. <nav>
  18. <ul>
  19. <li>Home</li>
  20. <li>Product Vs</li>
  21. <li>Services</li>
  22. <li>Contact</li>
  23. </ul>
  24. </nav>

最后,尝试一些变化:

  1. nav {
  2. --h: 3em;
  3. }
  4. nav:nth-child(1) {
  5. --rate: 1.5;
  6. --bgcolor: black;
  7. }
  8. nav:nth-child(2) {
  9. --rate: 1.732;
  10. --bgcolor: brown;
  11. }
  12. nav:nth-child(3) {
  13. --rate: 2;
  14. --bgcolor: green;
  15. }
  16. nav ul li {
  17. width: calc(var(--h) * var(--rate));
  18. background-color: var(--bgcolor);
  19. }
  20. nav ul li::before,
  21. nav ul li::after {
  22. background-color: var(--bgcolor);
  23. }

大功告成!

前端每日实战:32# 视频演示如何用纯 CSS 创作六边形按钮特效的更多相关文章

  1. 前端每日实战:38# 视频演示如何用纯 CSS 创作阶梯文字特效

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/MXYBEM 可交互视频教程 此视频 ...

  2. 前端每日实战:147# 视频演示如何用纯 CSS 创作透视按钮的悬停特效

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/qJEdKb 可交互视频 此视频是可 ...

  3. 前端每日实战:21# 视频演示如何用纯 CSS 创作文本滑动特效的 UI 界面

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/QrxxaW 可交互视频教程 此视频 ...

  4. 前端每日实战:1# 视频演示如何用纯 CSS 创作一个按钮文字滑动特效

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/zhang-ou/pen/GdpPLE 可交互视频教程 此视频 ...

  5. 如何用纯 CSS 创作六边形按钮特效

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xjoOeM 可交互视频教 ...

  6. 前端每日实战:92# 视频演示如何用纯 CSS 创作一颗逼真的土星

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/EpbaQX 可交互视频 此视频是可 ...

  7. 前端每日实战:157# 视频演示如何用纯 CSS 创作一个棋盘错觉动画(实际上每一行都是平行的)

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VEyoGj 可交互视频 此视频是可 ...

  8. 前端每日实战:158# 视频演示如何用纯 CSS 创作一个雨伞 toggle 控件

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/pxLbjv 可交互视频 此视频是可 ...

  9. 前端每日实战:140# 视频演示如何用纯 CSS 创作文本的淡入动画效果

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ZMwgqK 可交互视频 此视频是可 ...

随机推荐

  1. 【zabbix】zabbix 高可用架构的实现

    https://www.jianshu.com/p/249d47b089b4?utm_campaign=maleskine&utm_content=note&utm_medium=se ...

  2. C++模板声明与实现分开--由此想到的编译,链接原理

    参考了以下两篇文章: C++编译链接原理简介  语言程序编译过程 2 问题来源:当模板文件的实现与声明分开在不同文件中时,链接时会提示找不到相应模板函数,如下 一,编译和链接的大概原理: 1,编译,遍 ...

  3. python中导入sklearn中模块提示ImportError: DLL load failed: 找不到指定的程序。

    python版本:3.7 平台:windows 10 集成环境:Anaconda3.7 64位 在jupyter notebook中导入sklearn的相关模块提示ImportError: DLL l ...

  4. First-order logic

    w https://en.wikipedia.org/wiki/First-order_logic

  5. 用Vue来实现音乐播放器(九):歌单数据接口分析

    z这里如果我们和之前获取轮播图的数据一样来获取表单的数据  发现根本获取不到 原因是qq音乐在请求头里面加了authority和refer等 但是如果我们通过jsonp实现跨域来请求数据的话  是根本 ...

  6. Oracle数据库文件导出为CSV格式的方法

    1 安装PLSQL Developer,并连接Oracle数据库. 2 执行sql语句,将要导出的表格显示出来. select * from table名; 3 如下点击导出查询结果,选择数据格式,即 ...

  7. Caffe::Snapshot的运行过程

    Snapshot的存储 概述 Snapshot的存储格式有两种,分别是BINARYPROTO格式和hdf5格式.BINARYPROTO是一种二进制文件,并且可以通过修改shapshot_format来 ...

  8. golang http Specifically check for timeout error

    Specifically check for timeout error 特异性识别 golang http client 的超时错误 package main import ( "fmt& ...

  9. js面向对象程序设计之继承

    在面向对象语言中继承分成两种:接口继承和实现继承.解释一下,接口继承只继承方法的签名,而实现继承则是继承实际的方法.但是ECMAScript中的函数没有签名所以无法进行接口继承,只能是实现实现继承.而 ...

  10. Linux操作系统(六)_文件系统结构

    linux只有一个文件树,整个文件系统是以一个树根"/"为起点的 所有的文件和外部设备都以文件的形式挂在上面,linux发行版本的根目录大都是以下结构: /bin /sbin /b ...