半六角形,只有一个元件

2023-12-23

我试图复制以下形状但没有成功:

我想我需要一些:before and :after伪元素以及以下 css:

#pentagon {
    position: relative;
    width: 78px;
    height:50px;
    background:#3a93d0;
} 

使用边框方法:

您可以使用下面的 CSS 来完成此操作。该形状是通过在矩形底部放置一个三角形形状来获得的:after伪元素。三角形部分是使用实现的border method.

.pentagon {
  height: 50px;
  width: 78px;
  background: #3a93d0;
  position: relative;
}
.pentagon:after {
  border: 39px solid #3a93d0;
  border-top-width: 15px;
  border-color: #3a93d0 transparent transparent transparent;
  position: absolute;
  top: 50px;
  content: '';
}
<div class="pentagon"></div>

使用 CSS 变换:

这种方法使用rotate, skewX因此需要一个完全兼容 CSS3 的浏览器才能正常工作。这种方法的优点是它允许在形状周围添加边框,这与使用时不同border方法。缺点是需要额外计算角度。

它是本文中提到的短三角形方法的修改版本CodePen 演示 http://codepen.io/web-tiki/pen/IjKvp by web-tiki https://stackoverflow.com/users/1811992/web-tiki.

.pentagon {
  position: relative;
  height: 50px;
  width: 78px;
  background: #3a93d0;
}
.pentagon:before {
  position: absolute;
  content: '';
  top: 12px;
  left: 0;
  width: 46px;
  height: 38px;
  background: #3a93d0;
  transform-origin: 0 100%;
  transform: rotate(29deg) skewX(-30deg);
}
.pentagon.bordered {
  background: white;
  border: 1px solid #3a93d0;
}
.pentagon.bordered:before {
  width: 44px;
  height: 37px;
  background: white;
  border: 1px solid #3a93d0;
  border-color: transparent #3a93d0 #3a93d0 transparent;
  transform: rotate(29deg) skewX(-30deg);
}
/* Just for demo */

.pentagon {
  display: inline-block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class="pentagon"></div>
<div class="pentagon bordered"></div>

使用 CSS 倾斜变换:

该方法仅使用skew()(沿 X 和 Y 轴)并且不需要任何复杂的角度计算。它只需要随着父元素尺寸的变化而调整伪元素的尺寸和位置。

.pentagon {
  position: relative;
  height: 50px;
  width: 78px;
  border: 1px solid #3a93d0;
  border-bottom: none;
  background: aliceblue;
}
.pentagon:before {
  position: absolute;
  content: '';
  top: 10px;  /* parent height - child height -1px */
  left: -1px;
  width: 39px;
  height: 39px;  /* width of parent/2 */
  border-right: 1px solid #3a93d0;
  border-bottom: 1px solid #3a93d0;
  background: aliceblue;
  transform-origin: 0 100%;
  transform: matrix(1, 0.414213562373095, -1, 0.41421356237309515, 0, 0);
}
<div class="pentagon">
</div>

上面的代码片段使用matrix变换,因为根据MDN https://developer.mozilla.org/en-US/docs/Web/CSS/transform, the skew(x, y)已删除,不应再使用。这矩阵分辨率 http://meyerweb.com/eric/tools/matrix/可以使用 site 来获得等效矩阵函数。矩阵函数为rotate(45deg) skew(-22.5deg, -22.5deg) is

matrix(1, 0.414213562373095, -1, 0.41421356237309515, 0, 0).

使用剪辑路径:

这是创建五边形形状的另一种方法clip-path。要么是纯 CSSclip-path或者可以根据所需的浏览器支持使用具有内联 SVG 的一种。 CSSclip-path目前仅Webkit浏览器支持。

IE(所有版本)不支持 CSS 或 SVG 剪辑路径。

.pentagon {
  position: relative;
  width: 75px;
  height: calc(75px / 1.414);
  background: #3a93d0;
}
.pentagon.css {
  -webkit-clip-path: polygon(0% 0%, 0% 66%, 50% 100%, 100% 66%, 100% 0%);
  clip-path: polygon(0% 0%, 0% 66%, 50% 100%, 100% 66%, 100% 0%);
}
.pentagon.svg {
  -webkit-clip-path: url(#clipper);
  clip-path: url(#clipper);
}
.pentagon.bordered:after {
  position: absolute;
  content: '';
  height: calc(100% - 2px);
  width: calc(100% - 2px);
  left: 1px;
  top: 1px;
  background: white;
}
.pentagon.css.bordered:after {
  -webkit-clip-path: polygon(0% 0%, 0% 66%, 50% 100%, 100% 66%, 100% 0%);
  clip-path: polygon(0% 0%, 0% 66%, 50% 100%, 100% 66%, 100% 0%);
}
.pentagon.svg.bordered:after {
  -webkit-clip-path: url(#clipper);
  clip-path: url(#clipper);
}
/* Just for demo */

.pentagon {
  margin: 10px;
}
<svg width="0" height="0">
  <defs>
    <clipPath id="clipper" clipPathUnits="objectBoundingBox">
      <path d="M0,0 0,0.66 0.5,1 1,0.66 1,0z" />
    </clipPath>
  </defs>
</svg>

<h3>CSS Clip Path</h3>

<div class="pentagon css"></div>
<div class="pentagon bordered css"></div>

<h3>SVG Clip Path</h3>
<div class="pentagon svg"></div>
<div class="pentagon bordered svg"></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

半六角形,只有一个元件 的相关文章

随机推荐

  • Dynamic_cast<> 是否仅限于沿着继承层次结构进行直接转换?

    CODE struct A virtual details there but left out struct B virtual details there but left out struct C A B virtual detail
  • WaitHandle.WaitAll 64 个句柄限制的解决方法?

    我的应用程序通过以下方式生成不同的小工作线程负载ThreadPool QueueUserWorkItem我通过多个跟踪ManualResetEvent实例 我用WaitHandle WaitAll方法阻止我的应用程序关闭 直到这些线程完成
  • 如何向 RCpp 中的数据框添加新列?

    我正在尝试使用 RCpp 向数据框添加新列 在下面的代码中 我打算向数据框 df 添加一个 结果 列 但运行代码后数据集没有 结果 列 你能告诉我他们出了什么问题吗 R 文件调用 AddNewCol 函数 library Rcpp sour
  • 如何在 Perl 中将数组转换为散列?

    我有一个数组 并尝试将数组内容转换为带有键和值的哈希值 索引 0 是键 索引 1 是值 索引 2 是键 索引 3 是值 依此类推 但它没有产生预期的结果 代码如下 open FILE message xml die Cannot open
  • 初始拒绝后使用 getUserMedia() 重新提示权限

    在被拒绝一次后 我们如何使用 getUserMedia 请求相机 麦克风访问权限 我正在使用 getUserMedia 来访问用户的相机并将数据通过管道传输到画布 那一点一切都很好 在测试中 我点击了一次拒绝 此时 在 Chrome 和 F
  • 如何伪造Time.now?

    最好的设置方法是什么Time now为了在单元测试中测试时间敏感的方法 我真的很喜欢Timecop https github com travisjeffery timecop图书馆 您可以以块形式进行时间扭曲 就像时间扭曲一样 Timec
  • 如何从特定模块创建所有装饰函数的向量?

    我有一个文件main rs和一个文件rule rs 我想定义函数rule rs将被纳入Rules rule矢量 而不必将它们一一推动 我更喜欢一个循环来推动它们 main rs struct Rules rule Vec
  • 错误 1054。Insert 子句中的未知列

    我有这个问题 如果我编写以下查询 INSERT INTO prodotto Barcode InseritoDa DataInserimento UrlImage VALUES vfr ff 12 10 2012 vfr jpg 我收到此错
  • 自定义弹出菜单(布局)

    我正在尝试升级我的 PopupMenu 以便它带有图标和自定义样式 我为它创建了一个新的布局
  • 位置无关可执行文件的正确 Xcode 设置是什么

    最近刚刚开始收到一封应用商店提交后的电子邮件 其中包含以下建议 请确保您的构建设置已配置为创建 PIE 可执行文件 然而 XCode 中的设置看起来是正确的 在链接部分我发现 不创建位置无关的可执行文件 设置为 否 双重否定YUK 您收到此
  • Android排序数组

    我如何按日期或名称对该数组进行排序 String datetable new String 21 2 datetable 0 0 2011 01 01 datetable 0 1 Name1 datetable 1 0 2011 01 03
  • 为什么宽度/高度不适用于非定位伪元素?

    我想设置一个width of before伪元素达到80 如果我使用定位 那么一切都会正常 但如果我不使用它 那么一切都会失败 你能解释一下为什么百分比宽度在没有定位的情况下不起作用吗 如果可以的话 请添加一些对规范的引用 position
  • jQuery 方法链接是流畅编程的一个例子吗?

    我对 JavaScript jQuery 有点陌生 但是当我看到方法链接的示例时 我立即感到熟悉 其他接口 如 LINQ 执行类似的操作 其中一组方法的返回类型与它们所操作的类型相同 TweetSharp 执行的操作非常类似 这是流畅编程的
  • 从 CSV 文件批量插入 - 跳过重复项

    更新 最终使用了 Johnny Bubriski 创建的这个方法 然后对其进行了一些修改以跳过重复项 效果就像一个魅力 而且速度显然相当快 关联 http johnnycode com 2013 08 19 using c sharp sq
  • 向 Django FlatPages 添加功能,无需更改原始 Django 应用程序

    我想向 Django FlatPage 数据库模型添加一个字段 但我真的不知道如何在不编辑原始应用程序的情况下扩展它 我想要做的是将以下字段添加到模型中 from django db import models from django co
  • 在 nginx 上找不到 Laravel 路由

    当我尝试访问我的测试应用程序时 只有索引路由有效 malte italoborg es http malte italoborg es 如果我尝试访问另一条路线 例如 malte italoborg es admin http malte
  • 我可以使用 jQuery 检查是否至少有一个复选框被选中吗?

    我有以下 HTML 表单 其中可以有许多复选框 单击提交按钮时 我希望用户收到一个 javascript 警报 以检查至少一个复选框 如果未选中 有没有一种简单的方法可以使用 jQuery 来做到这一点
  • Android:API 级别低于 19 的远程 Webview 调试?

    据我所知 远程调试通过chrome inspect已在 API 级别 19 中添加用于 Web 视图 不过 我正在开发一个支持 17 设备的应用程序 只是在 API 19 上 我得到了02 28 00 31 16 569 12332 123
  • 在 R 中将 LASSO 与分类变量结合使用

    我有一个包含 1000 个观察值和 76 个变量的数据集 其中大约 20 个是分类变量 我想对整个数据集使用 LASSO 我知道通过 lars 或 glmnet 在 LASSO 中使用因子变量并不能真正起作用 但是变量太多 并且它们可以采用
  • 半六角形,只有一个元件

    我试图复制以下形状但没有成功 我想我需要一些 before and after伪元素以及以下 css pentagon position relative width 78px height 50px background 3a93d0 使