css感应按钮样式

本文介绍了HTML和CSS代码实现的按钮设计,包括地理位置方向指示及使用aria-hidden属性确保无障碍访问。着重于视觉效果和可访问性策略的结合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

html代码不变``

    <div class="container">
      <button role="button" tabindex="0" style="--color: #0088ff"><span></span><span></span><span></span><span></span>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
      </button>
      <button role="button" tabindex="0" style="--color: #ffaa00">
        东北<span></span><span></span><span></span><span></span>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
      </button>
      <button role="button" tabindex="0" style="--color: #ff7700"><span></span><span></span><span></span><span></span>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
      </button>
      <button role="button" tabindex="0" style="--color: #ff0033">
        西北<span></span><span></span><span></span><span></span>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
      </button>
      <button role="button" tabindex="0" style="--color: #9911aa">
        西<span></span><span></span><span></span><span></span>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
      </button>
      <button role="button" tabindex="0" style="--color: #aadd22">
        西南<span></span><span></span><span></span><span></span>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
      </button>
      <button role="button" tabindex="0" style="--color: #aadd22"><span></span><span></span><span></span><span></span>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
      </button>
      <button role="button" tabindex="0" style="--color: #aadd22">
        东南<span></span><span></span><span></span><span></span>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
        <div aria-hidden="true">Click!</div>
      </button>
    </div>
  • css
.container {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: 20px;
}
button {
  --borderWidth: 4;
  --paddingX: 8;
  --paddingY: 12;
  --transition: 0.25;
  background: var(--bg, #fff);
  border: calc(var(--borderWidth) * 1px) solid var(--color, #f0f);
  border-radius: calc(var(--borderWidth) * 1px);
  color: var(--color, #f0f);
  box-shadow: calc(var(--borderWidth) * 1px) calc(var(--borderWidth) * 1px) 0 #888;
  cursor: pointer;
  font-weight: bold;
  outline: transparent;
  padding: calc(var(--paddingX) * 1px) calc(var(--paddingY) * 1px);
  position: relative;
  transition: box-shadow calc(var(--transition) * 0.5s) ease;
  -webkit-tap-highlight-color: transparent;
}
button:active {
  box-shadow: 0 0 0 #888;
}
button:hover: div:nth-child(5) {
  opacity: 1;
  transition: opacity calc(var(--transition) * 1s) calc(var(--transition) * 1s) steps(1);
}
button span {
  -webkit-clip-path: var(--clip);
  bottom: -4px;
  clip-path: var(--clip);
  left: -4px;
  opacity: 0.5;
  position: absolute;
  right: -4px;
  top: -4px;
  z-index: 2;
}
button span:nth-of-type(1) {
  --clip: polygon(0 0, 100% 0, 50% 50%);
}
button span:nth-of-type(2) {
  --clip: polygon(100% 0, 100% 100%, 50% 50%);
}
button span:nth-of-type(3) {
  --clip: polygon(0 100%, 100% 100%, 50% 50%);
}
button span:nth-of-type(4) {
  --clip: polygon(0 0, 0 100%, 50% 50%);
}
button span:nth-of-type(1):hover,
button span:nth-of-type(2):hover,
button span:nth-of-type(3):hover,
button span:nth-of-type(4):hover {
  --clip: polygon(0 0, 100% 0, 100% 100%, 0 100%);
  z-index: 3;
}
button span:nth-of-type(1):hover ~ div:nth-of-type(1),
button span:nth-of-type(2):hover ~ div:nth-of-type(2),
button span:nth-of-type(3):hover ~ div:nth-of-type(3),
button span:nth-of-type(4):hover ~ div:nth-of-type(4) {
  --clip: inset(-5% -5% -5% -5%);
}
button div {
  -webkit-clip-path: var(--clip);
  background: var(--color, #f0f);
  border: calc(var(--borderWidth) * 1px) solid var(--color, #f0f);
  border-radius: calc(var(--borderWidth) * 1px);
  bottom: calc(var(--borderWidth) * -1px);
  clip-path: var(--clip);
  color: var(--bg, #fff);
  left: calc(var(--borderWidth) * -1px);
  padding: calc(var(--paddingX) * 1px) calc(var(--paddingY) * 1px);
  position: absolute;
  right: calc(var(--borderWidth) * -1px);
  top: calc(var(--borderWidth) * -1px);
  transition: clip-path calc(var(--transition) * 1s) ease, -webkit-clip-path calc(var(--transition) * 1s) ease;
}
button div:nth-of-type(1) {
  --clip: inset(-5% -5% 110% -5%);
}
button div:nth-of-type(2) {
  --clip: inset(-5% -5% -5% 110%);
}
button div:nth-of-type(3) {
  --clip: inset(110% -5% -5% -5%);
}
button div:nth-of-type(4) {
  --clip: inset(-5% 110% -5% -5%);
}
button div:nth-of-type(5) {
  bottom: 0;
  left: 0;
  opacity: 0;
  right: 0;
  top: 0;
}
  • less 、sass
  .container {
    position: absolute;
    top: 200px;
    left: 10px;
    z-index: 999;
    width: 300px;
    height: 300px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-gap: 20px;
    button {
      --borderWidth: 4;
      --paddingX: 8;
      --paddingY: 12;
      --transition: 0.25;
      background: var(--bg, #fff);
      border: calc(var(--borderWidth) * 1px) solid var(--color, #f0f);
      border-radius: calc(var(--borderWidth) * 1px);
      color: var(--color, #f0f);
      box-shadow: calc(var(--borderWidth) * 1px) calc(var(--borderWidth) * 1px)
        0 #888;
      cursor: pointer;
      font-weight: bold;
      outline: transparent;
      padding: calc(var(--paddingX) * 1px) calc(var(--paddingY) * 1px);
      position: relative;
      transition: box-shadow calc(var(--transition) * 0.5s) ease;
      -webkit-tap-highlight-color: transparent;
    }
    button:active {
      box-shadow: 0 0 0 #888;
    }
    button {
      &:hover {
        div {
          &:nth-child(5) {
            opacity: 1;
            transition: opacity calc(var(--transition) * 1s)
              calc(var(--transition) * 1s) steps(1);
          }
        }
      }
    }

    button span {
      -webkit-clip-path: var(--clip);
      bottom: -4px;
      clip-path: var(--clip);
      left: -4px;
      opacity: 0.5;
      position: absolute;
      right: -4px;
      top: -4px;
      z-index: 2;
    }
    button span:nth-of-type(1) {
      --clip: polygon(0 0, 100% 0, 50% 50%);
    }
    button span:nth-of-type(2) {
      --clip: polygon(100% 0, 100% 100%, 50% 50%);
    }
    button span:nth-of-type(3) {
      --clip: polygon(0 100%, 100% 100%, 50% 50%);
    }
    button span:nth-of-type(4) {
      --clip: polygon(0 0, 0 100%, 50% 50%);
    }
    button span:nth-of-type(1):hover,
    button span:nth-of-type(2):hover,
    button span:nth-of-type(3):hover,
    button span:nth-of-type(4):hover {
      --clip: polygon(0 0, 100% 0, 100% 100%, 0 100%);
      z-index: 3;
    }
    button span:nth-of-type(1):hover ~ div:nth-of-type(1),
    button span:nth-of-type(2):hover ~ div:nth-of-type(2),
    button span:nth-of-type(3):hover ~ div:nth-of-type(3),
    button span:nth-of-type(4):hover ~ div:nth-of-type(4) {
      --clip: inset(-5% -5% -5% -5%);
    }
    button div {
      -webkit-clip-path: var(--clip);
      background: var(--color, #f0f);
      border: calc(var(--borderWidth) * 1px) solid var(--color, #f0f);
      border-radius: calc(var(--borderWidth) * 1px);
      bottom: calc(var(--borderWidth) * -1px);
      clip-path: var(--clip);
      color: var(--bg, #fff);
      left: calc(var(--borderWidth) * -1px);
      padding: calc(var(--paddingX) * 1px) calc(var(--paddingY) * 1px);
      position: absolute;
      right: calc(var(--borderWidth) * -1px);
      top: calc(var(--borderWidth) * -1px);
      transition: clip-path calc(var(--transition) * 1s) ease,
        -webkit-clip-path calc(var(--transition) * 1s) ease;
    }
    button div:nth-of-type(1) {
      --clip: inset(-5% -5% 110% -5%);
    }
    button div:nth-of-type(2) {
      --clip: inset(-5% -5% -5% 110%);
    }
    button div:nth-of-type(3) {
      --clip: inset(110% -5% -5% -5%);
    }
    button div:nth-of-type(4) {
      --clip: inset(-5% 110% -5% -5%);
    }
    button div:nth-of-type(5) {
      bottom: 0;
      left: 0;
      opacity: 0;
      right: 0;
      top: 0;
    }
  }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值