用光标悬停时如何在CSS三角形上保持适当的边界?

虚假数据

是否可以将鼠标悬停在http://jsfiddle.net/2AXhR/上,以便在鼠标悬停时激活正确的三角形,而不是有时会相邻的三角形?有时会激活错误的三角形,因为每个三角形元素的边界区域实际上不是一个三角形,而是一个矩形,因此即使光标可能看起来在一个三角形的顶部,它实际上也在另一个重叠且具有一个三角形的顶部较高的z-index。

黄色叠加层显示了右上三角形的边界。 它与下面的相邻三角形重叠,这意味着当光标位于两者共享的较小区域中时,行为不一致。

  <style type="text/css">
  .t {
     position:relative;
     top:55px;
     left:5px;
  }
  .t div {
     position:absolute;
     width: 0px;
     height: 0px;
     border-style: solid;
     border-width: 0 100px 173.2px 100px;
     border-color: transparent transparent #0079c5 transparent;
     transition:all 1s;
     -webkit-transition:all 1s;
     -moz-transition:all 1s;
     cursor:pointer;
     transform-origin:200px 173px;
     -webkit-transform-origin:200px 173px;
     -moz-transform-origin:200px 173px;
     z-index:10;
  }
  .t div:hover {
      z-index:20;
      border-color: transparent transparent #009cff transparent;
  }
  .t div:nth-child(1) {
     transform:rotate(30deg);
     -webkit-transform:rotate(30deg);
     -moz-transform:rotate(30deg);
  }
  .t div:nth-child(1):hover {
     transform:rotate(30deg) translate(-15%, -10%);
     -webkit-transform:rotate(30deg) translate(-15%, -10%);
     -moz-transform:rotate(30deg) translate(-15%, -10%);
  }
  .t div:nth-child(2) {
     transform:rotate(90deg);
     -webkit-transform:rotate(90deg);
     -moz-transform:rotate(90deg);
  }
  .t div:nth-child(2):hover {
     transform:rotate(90deg) translate(-15%, -10%);
     -webkit-transform:rotate(90deg) translate(-15%, -10%);
     -moz-transform:rotate(90deg) translate(-15%, -10%);
  }
  .t div:nth-child(3) {
     transform:rotate(150deg);
     -webkit-transform:rotate(150deg);
     -moz-transform:rotate(150deg);
  }
  .t div:nth-child(3):hover {
     transform:rotate(150deg) translate(-15%, -10%);
     -webkit-transform:rotate(150deg) translate(-15%, -10%);
     -moz-transform:rotate(150deg) translate(-15%, -10%);
  }
  .t div:nth-child(4) {
     transform:rotate(210deg);
     -webkit-transform:rotate(210deg);
     -moz-transform:rotate(210deg);
  }
  .t div:nth-child(4):hover {
     transform:rotate(210deg) translate(-15%, -10%);
     -webkit-transform:rotate(210deg) translate(-15%, -10%);
     -moz-transform:rotate(210deg) translate(-15%, -10%);
  }
  .t div:nth-child(5) {
     transform:rotate(270deg);
     -webkit-transform:rotate(270deg);
     -moz-transform:rotate(270deg);
  }
  .t div:nth-child(5):hover {
     transform:rotate(270deg) translate(-15%, -10%);
     -webkit-transform:rotate(270deg) translate(-15%, -10%);
     -moz-transform:rotate(270deg) translate(-15%, -10%);
  }
  .t div:nth-child(6) {
     transform:rotate(330deg);
     -webkit-transform:rotate(330deg);
     -moz-transform:rotate(330deg);
  }
  </style>

  <div class="t">
     <div></div>
     <div></div>
     <div></div>
     <div></div>
     <div></div>
     <div></div>
  </div>
网络提基

-----版本2,更干净,更好(修复IE和FF问题)-----

已更正的问题:

  1. IE忽略了该overflow:hidden;属性,并且悬停事件在可见三角形之外触发。
  2. 由于某种原因,Firefox中的三角形上出现了线条。
  3. 如果光标位于三角形之间,则光标将恢复为默认值。

描述 :

该方法skewX()用于创建三角形。您不需要“边界技巧”来创建它们,也不需要overflow属性。使用此技术,根本没有重叠的元素,因此悬停事件无法同时触发两个元素。

第二个div隐藏一半的倾斜元素以创建三角形,并在悬停时使用+CSS选择器对其进行平移


----- DEMO V2 ----- 显示三角形边界的快照devtools




标记:

<div class="t">
    <div class="wrap">
        <div class="triangle"></div>
        <div class="mask"></div>
    </div>
   <div class="wrap">
        <div class="triangle"></div>
        <div class="mask"></div>
    </div>
    <div class="wrap">
        <div class="triangle"></div>
        <div class="mask"></div>
    </div>
    <div class="wrap">
        <div class="triangle"></div>
        <div class="mask"></div>
    </div>
    <div class="wrap">
        <div class="triangle"></div>
        <div class="mask"></div>
    </div>
    <div class="wrap">
        <div class="triangle"></div>
        <div class="mask"></div>
    </div>
</div>

CSS:

.t div{
    position:absolute;
    top:0; left:0;

    transform-origin:0 0;
    -ms-transform-origin:0 0;
    -webkit-transform-origin:0 0;

    transition:all 1s;
    -webkit-transition:all 1s;
    -moz-transition:all 1s;
}

.t .wrap{
    top:50%; left:50%;

    -ms-transform: skewX(30deg);
    -webkit-transform: skewX(30deg);
    transform: skewX(30deg);
}

.t .wrap .triangle {
    position:relative;
    width: 200px;
    height: 173px;
    background-color: #0079c5;
    cursor:pointer;
    z-index:1;
}
.t .wrap .mask{
    width:100%;
    height:115.5%;
    background-color: #fff;
    left:100%;
    z-index:2;

    -ms-transform: skewX(-30deg) rotate(30deg);
    -webkit-transform: skewX(-30deg) rotate(30deg);
    transform: skewX(-30deg) rotate(30deg);
} 

.t .wrap .triangle:hover{
    background-color: #009cff;

    transform:  translate(10%, 10%);
    -webkit-transform: translate(10%, 10%);
    -moz-transform: translate(10%, 10%);
}

.t .triangle:hover + .mask{
    -ms-transform: skewX(-30deg) rotate(30deg) translate(17.5%, 0);
    -webkit-transform: skewX(-30deg) rotate(30deg) translate(17.5%, 0);
    transform: skewX(-30deg) rotate(30deg) translate(17.5%, 0);
}

.t > div:nth-child(2){
    -ms-transform: rotate(60deg) skewX(30deg);
    -webkit-transform: rotate(60deg) skewX(30deg);
    transform: rotate(60deg) skewX(30deg);
}
.t > div:nth-child(3){
    -ms-transform: rotate(120deg) skewX(30deg);
    -webkit-transform: rotate(120deg) skewX(30deg);
    transform: rotate(120deg) skewX(30deg);
}

.t > div:nth-child(4){
    -ms-transform: rotate(-60deg) skewX(30deg);
    -webkit-transform: rotate(-60deg) skewX(30deg);
    transform: rotate(-60deg) skewX(30deg);
}
.t > div:nth-child(5){
    -ms-transform: rotate(-120deg) skewX(30deg);
    -webkit-transform: rotate(-120deg) skewX(30deg);
    transform: rotate(-120deg) skewX(30deg);
}
.t > div:nth-child(6){
    -ms-transform: rotate(-180deg) skewX(30deg);
    -webkit-transform: rotate(-180deg) skewX(30deg);
    transform: rotate(-180deg) skewX(30deg);
}




Vesrion 1(原始):演示V1的提琴手

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CSS如何在三角形上也添加边框?

来自分类Dev

悬停时更改三角形的颜色

来自分类Dev

悬停并单击CSS三角形

来自分类Dev

CGAL如何判断三角形是否在边界上

来自分类Dev

当鼠标悬停在三角形上时,如何使2个按钮出现?

来自分类Dev

悬停 HTML 上的 CSS3 中心三角形

来自分类Dev

如何使用CSS在三角形上放置边框?

来自分类Dev

如何在Android画布上绘制实心三角形

来自分类Dev

如何在圆形图像上设置此三角形的样式?

来自分类Dev

如何在3D网格上找到连接的三角形

来自分类Dev

如何在圆形图像上设置此三角形的样式?

来自分类Dev

如何在带有阴影的窗体上制作三角形?

来自分类Dev

在右边界绘制三角形

来自分类Dev

您如何在CSS中设置三角形蒙版的样式?

来自分类Dev

如何在css中创建空心三角形

来自分类Dev

如何在CSS功能区菜单中制作右侧三角形?

来自分类Dev

如何在不使用 flexbox 的情况下使 css 三角形居中?

来自分类Dev

三角形CSS中的三角形

来自分类Dev

如何获得AABB三角形的三角形?

来自分类Dev

如何创建响应三角形作为右边界?

来自分类Dev

悬停链接下的CSS三角形(不包括UL / LI / SPAN)?

来自分类Dev

CSS-悬停并更改三角形颜色

来自分类Dev

使用CSS使仅三角形具有悬停效果

来自分类Dev

三角形网格上的最近点

来自分类Dev

卡在螺旋三角形上

来自分类Dev

按钮上的onDraw三角形

来自分类Dev

三角形上的边框

来自分类Dev

在斜坡上绘制三角形

来自分类Dev

生成Pascal三角形时出错