CSS将一个正方形分成4个三角形

2023-12-22

我目前正在尝试将一个正方形变成 4 个大小相等且具有悬停事件的三角形。

我正在创建这样的三角形,

.right, left, .top, .bottom {
    position: relative;
    width: 26px;
}

.right:before{
  position: absolute;
  display: inline-block;
  border-top: 26px solid transparent;
  border-right: 26px solid #eee;
  border-bottom: 26px solid transparent;
  left: 26px;
  top: 0px;
  content: '';
}

我发现每个三角形都位于另一个三角形之上,这意味着只有一个三角形可以悬停,这是我的示例,

http://codepen.io/anon/pen/qdmbKz http://codepen.io/anon/pen/qdmbKz

正如您所看到的,只有底部三角形(悬停在正方形底部)是可悬停的。我究竟做错了什么?有更好的方法吗?


正如您在问题中已经指出的,原因是hover仅适用于底部三角形,而不适用于其他三角形,因为底部三角形的容器放置在其他三个三角形的容器的顶部。

当使用边框技巧生成三角形时,实际形状仍然是正方形。它之所以呈现三角形外观只是因为其他三个边框是透明的。现在,当您将鼠标悬停在形状上时,您实际上悬停在底部三角形的透明区域,而不是其他三角形的容器,这就是为什么它们各自的原因hover事件不会被触发。

我个人建议使用 SVG 来处理这些类型的事情,但使用 CSS 实现形状也不是那么复杂。

SVG:

在 SVG 中,您可以使用polygon元素在正方形内创建四个三角形,每个三角形polygon可以单独悬停。如果它们应该有自己的目标链接,您还可以将多边形包含在a(锚)标签。

In the snippet, I have implemented the anchor only for one triangle

.square {
  height: 400px;
  width: 400px;
  overflow: hidden;
}
svg {
  height: 100%;
  width: 100%;
}
polygon {
  fill: aliceblue;
  stroke: crimson;
  stroke-linejoin: round;
}
polygon:hover {
  fill: cornflowerblue;
}
<div class='square'>
  <svg viewBox='0 0 100 100'>
    <a xlink:href='http://google.com'>
      <polygon points='5,5 50,50 95,5' />
    </a>
    <polygon points='5,5 50,50 5,95' />
    <polygon points='5,95 50,50 95,95' />
    <polygon points='95,5 50,50 95,95' />
  </svg>
</div>

CSS:

这是对发布的答案的改编here https://stackoverflow.com/questions/23107646/how-can-i-maintain-proper-boundaries-on-css-triangles-when-hovering-with-cursor由网络蒂基。我发布一个单独的答案,因为这个问题的形状要简单得多,并且不需要像另一个问题那样多的工作。

使用以下方法将正方形分成四个大小相等的可悬停三角形:

  • 该容器是一个正方形,其所有边都有边框。父级上需要边框,因为使用 CSS 实现三角形上的对角线要困难得多。
  • 将四个子元素添加到容器中,其高度和宽度使用毕达哥拉斯定理计算。然后将它们定位,使其左上角位于正方形的中心点(以帮助旋转)。
  • 所有子元素都旋转适当的角度以形成三角形。这transform-origin被设置为top left以父方块的中心点为轴进行旋转。
  • 家长有overflow: hidden以防止每个方块的另一半可见。
  • 请注意,向 4 个三角形添加文本并不简单,因为它们也会旋转。文本必须放置在必须反向旋转的子元素内。

Note: The script included in the demo is the prefix free library which is used to avoid browser prefixes.

.square {
  position: relative;
  height: 200px;
  width: 200px;
  border: 2px solid crimson;
  overflow: hidden;
  transition: all 1s;
}
.top,
.left,
.right,
.bottom {
  position: absolute;
  height: calc(100% / 1.414);
  width: calc(100% / 1.414);
  top: 50%;
  left: 50%;
  border: 1px solid crimson;
  transform-origin: 0% 0%;
}
.right {
  transform: rotate(-45deg);
}
.bottom {
  transform: rotate(45deg);
}
.top {
  transform: rotate(-135deg);
}
.left {
  transform: rotate(135deg);
}
.square > div:hover {
  background: tomato;
}

/*Just for demo*/

.square:hover{
  height: 300px;
  width: 300px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class='square'>
  <div class="top"></div>
  <div class="right"></div>
  <div class="bottom"></div>
  <div class="left"></div>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS将一个正方形分成4个三角形 的相关文章

  • 为什么这个div的计算高度比它的内容高?

    我是一名 CSS 新手 正在使用 WordPress 网站菜单栏插件 http wordpress org extend plugins menubar 用于导航 我已经能够对 CSS 的配色方案 居中和字体内容进行更改 但我无法弄清楚为什
  • 是否可以使用 Chrome 开发者工具审核多个页面?

    我试图找出我的网站中未使用的 CSS 类 然后我发现 Chrome 开发者工具中有一个审核功能 可以标记未使用的 CSS 类 但是 它一次只能执行一页 有没有办法让它审核多个页面 以便我可以找出所有页面中未使用的 CSS 类 我知道有一个
  • 聚合物纸下拉菜单在浏览器中未正确呈现

    我对简单的纸张下拉菜单的渲染 html 遇到问题 列表项并不显示为样式化的 菜单 而只是出现在页面上的项目列表 单击渲染的纸张输入组件 渲染的下拉列表的一部分 确实会为波纹设置动画 但不会为菜单和菜单项的显示 隐藏设置动画 单击列表中的某个
  • 标题的固定高度和更改宽度(HTML 表格)

    我需要确保表格标题的高度是固定的 并且宽度是根据标题单元格内容进行调整的 标题文本最多显示两行 我们如何使用样式来做到这一点 另外 我想确保表行的宽度与标题行的宽度相同 即标题行决定宽度 注 目前 交易部门负责人别名 是按行排列的 它需要分
  • 文本区域下的额外填充

    我的文本区域下面有额外的填充 但我似乎找不到它的来源 我已将单独的代码放在此页面上 http jsfiddle net wfuks http jsfiddle net wfuks 我似乎找不到它的来源 它有类 field field bac
  • Phonegap(应用程序错误...发生网络错误)

    我已经使用phonegap 创建了一个版本 在index html 文件中 我编写了一个简单的iframe 用于加载网站 当我从phonegap获取本地url时它就起作用了 但如果我将整个构建作为 zip 文件上传到 PhoneGap 中
  • IE8/9 - CSS 文件的最大字节数

    我目前正在开发的应用程序有过多的 CSS 样式 我们似乎已经达到了 IE8 9 以及它可以加载的 CSS 数量的某种限制 在某些时候 它会停止解释 CSS 从而破坏某些页面上的样式 我们正在使用 Combres 来压缩 缩小导致 CSS 文
  • FPDF - 内嵌粗体文本

    我正在尝试从 PHP 创建 PDF 出于法律原因 我们需要将免责声明的一部分设为粗体 并且需要概述免责声明 我当前的代码使用 if isset POST optout POST optout yes pdf gt Ln 5 pdf gt S
  • CSS flex-basis: 0% 与 flex-basis: 0px 有不同的行为

    根据MDN https developer mozilla org en US docs Web CSS flex the flex 1应设置简写flex basis 0 然而 它实际上设置了flex basis 0 更令人惊讶的是 这有不
  • 在占位符中添加 HTML

    我喜欢使用 HTML 占位符 因为它有助于向用户描述他们需要输入的内容类型 但是 有时您需要为用户提供更多信息 而不仅仅是简单的句子 基本上我希望能够在我的文本区域占位符中添加换行符 制表符等 我听说过使用特殊编码来做到这一点 并且已经使用
  • 未使用 Font Family Open Sans

    我在用谷歌的 Open Sans 字体 http www google com fonts UsePlace use Collection Open Sans在我的应用程序中 我已经按照指示定义了样式表 然后我在主体选择器上使用它 body
  • 复制 Chrome 默认输入的轮廓样式

    如何设置默认 Chrome 输入的轮廓样式 焦点上为橙色 使其在每个浏览器中看起来都相同 Chrome 风格似乎是textarea focus outline rgb 229 151 0 auto 5px outline offset 2p
  • 在 HTML TextArea 中设置(或读取)光标/插入符的值

    我正在尝试 但失败了 在 HTML 文本区域中实现拖放机制 使用 jQuery 或 Scriptaculous 我们都使用 拖放机制相对容易 因此我愿意接受使用这两者之一的答案 问题是 我似乎找不到读取或设置插入点的方法 我最终想要做的是确
  • 使用 jQuery 的 .trigger('dragstart') 实现 HTML5 的拖放功能时如何 .setData/.getData

    当使用 jQuery 的 trigger dragstart 在具有 ondragstart drag event 属性的元素上触发函数时 如何使用 setData getData 实现 HTML5 在触摸设备上的拖放 流程示例 用户通过
  • 垂直对齐材质图标

    我正在尝试在导航菜单中垂直对齐 下拉箭头 我尝试过各种方法 例如vertical align middle display inline block 之类的东西 但这根本没有帮助 http img02 imgland net jfCmDoW
  • 如何使用 jQuery 将各种元素包装在 div 标签中?

    我有一个 html 结构 如下所示 h5 Title h5 p Content p ul li Item li li Item li ul p Content p h5 Title h5 p Content p ul li Item li
  • 下拉菜单导致滚动条

    我用过这个W3C 的示例 http www w3schools com bootstrap bootstrap dropdowns asp div class dropdown div
  • 如何使链接悬停时的背景图像模糊?

    当您用鼠标光标悬停链接时 我想让我的背景图像模糊 5 像素 有什么简单的方法可以实现这一点吗 我有点纠结于类和 id 在这里 pic background url http www metalinjection net wp content
  • 如何创建环境变量来保护我的网站的 Google 地图 API 密钥(或任何其他秘密值)?

    我正在学习使用 Bootstrap 编写自己的网站 并使用 Google 地图 API 密钥和 Google Developers 的脚本轻松地将地图放置在我的页面上 理想情况下 我会有类似的东西 即我已经尝试过这个 Html PHP
  • 使 div 的大小与其内部图像的大小相同

    我有一个带有以下代码的div HTML div img src img logo png div CSS div imgContainer width 250px height 250px padding 13px 问题是用户可以编辑图像大

随机推荐

  • Robots.txt,如何只允许访问域根目录,而不允许更深层次的访问? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想允许爬虫访问我的域的根目录 即index html 文件 但没有更深入的目录 即没有子目录 我不想在 robots txt 文件中单独列出和拒绝每
  • Go 中打印类型参数名称

    如果我在 Golang 中编写一个泛型函数 我可以像这样打印该函数的任一参数的类型 这提供了对类型参数的一些了解 func foo T any a T b T string return fmt Sprintf v and v are of
  • 实体框架:过滤导航属性

    我正在使用实体框架 Code First 并且我有下一个上下文 至少是提取 public class TestContext DbContext public DbSet
  • 具有默认空选项的 ASP.NET MVC 下拉列表

    如果下拉列表没有选定的值 是否有办法包含默认的空选项 或文本 下面的代码会将 string Empty 添加到 ViewData Menu 项中指定的 SelectList 或 IEnumerable 之前 选择将有 id 和名称MenuI
  • sed 给我 ": 意外的 EOF (pending }'s) 错误,我不知道为什么

    我正在尝试将 GNU sed 命令移植到 BSD sed 在 OSX 中 命令是 cat 1 sed n e H x tapPrintTapOutputSedPattern p e tapPrintTapOutputSedPattern x
  • 如何在不使用 Google Apps 的情况下授权 Google Drive 服务帐户访问 Google 帐户?

    我想使用 Google 云端硬盘作为我正在制作的网站的准 CMS 以便内容所有者可以使用 Google 云端硬盘编辑其内容 我想使用可以访问 Google 云端硬盘的特定用户帐户 在撰写本文时 服务帐户无法直接访问 Google 云端硬盘
  • 现在在 Dart 中有两种使用 typedef 的方法吗?

    我看到多种形式typedef整个 dart 和 flutter 库 但我不太明白它的意义 Framework dart中有这个例子 typedef ElementVisitor void Function Element element 还
  • 仅比较日期和月份与mysql中的日期字段

    如何仅比较日期和月份与mysql中的日期字段 例如 我在一张表中有一个日期 2014 07 10 同样 另一个日期2000 07 10在另一张桌子上 我只想比较日期字段上的日期和月份是否相等 我尝试过这种格式 但我无法得到答案 select
  • 如何使用 'in' 运算符返回 0 而不是 null

    我有三张桌子 文本 行中的文本 trigram 所有文本行的trigram text trigram 文本行包含的三元组 中间表 当我执行这个时 select count coalesce text id 0 text id from te
  • 带优先级队列的 Dijkstra 算法

    在我的 Dijkstra 算法的实现中 我有 1 个包含所有节点的数组和 1 个包含所有节点的优先级队列 每当一个节点出队时 我都会用新的距离和它的来源更新所有相邻节点 这样我就可以回溯路径 优先级队列中的节点将更新为新距离 数组中的节点将
  • 包“@angular/cli”不是依赖项

    当我尝试运行命令时出现以下错误 ng update angular cli angular core allow dirty Repository is not clean Update changes will be mixed with
  • 如何对 BSD 套接字进行单元测试 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 BSD 套接字在 Ubuntu 中编写基于服务器 客户端的 C 应用程序 我使用 Google C 测试框架作为我的单元测
  • Mailjet Vars 空白数组引发错误

    array low price low stock goods gt 在我的邮件模板中 for item in var low price low stock goods tr td item good name td td item va
  • MySQL:您的 SQL 语法错误 |限制 0, 25

    我不明白这个错误 请大家帮助我 为什么我收到这个错误 我的查询有问题吗 这是错误 1064 你的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解要使用的正确语法 第 7 行 LIMIT 0 25 附近 这是我的查询
  • 如何将 Pandas DF 中的列表转换为字符串?

    我有一个熊猫数据框 其中一列包含一个列表 我希望该列是单个字符串 例如我的清单 one two three 应该简单地是 one two three df col df col astype str apply lambda x join
  • 使用 React js Modal 的动态内容

    我想使用 React js 模态获取动态内容我正在使用包react responsive modal 首先我通过地图渲染所有帖子 现在我希望当我单击单个帖子时 模式应该弹出并仅显示该特定帖子的标题和正文 现在我不知道如何在模态中获取单个帖子
  • 有没有办法将 C# 序列化对象读取到 Python 中?

    我有一个包含 C 序列化对象的二进制文件 我可以用 python 读取内容 但得到的结果类似于 T x00 x00 x00Test Jobs GenerateJobRequest POC Server xca x02 xa2 x02 t x
  • 去虚拟化非最终方法

    假设我有一个如下所示的类设置 class A public virtual void foo printf default implementation n class B public A public void foo override
  • CNContactViewController 取消按钮不起作用

    我正在尝试使用内置的新联系人 UI 但使用取消按钮时出现意外行为 下面的代码可以运行并调用新的联系人屏幕 但取消按钮只会清除屏幕条目 而不会从新的联系人屏幕中取消 在内置联系人应用程序中 点击取消将返回到联系人列表屏幕 我想要取消按钮来关闭
  • CSS将一个正方形分成4个三角形

    我目前正在尝试将一个正方形变成 4 个大小相等且具有悬停事件的三角形 我正在创建这样的三角形 right left top bottom position relative width 26px right before position