CSS圆形菜单数字环绕布局实现与优化


CSS圆形菜单数字环绕布局实现与优化

本教程详细介绍了如何使用css优化圆形菜单,解决数字元素定位不准确的问题。通过引入额外的html包装器和精确调整css的定位及`transform`属性,特别是`translate`值,实现数字在圆形菜单周围的完美环绕布局,提升用户界面的视觉效果和交互体验。

在现代Web界面设计中,环形菜单因其独特的视觉效果和交互方式而受到青睐。然而,在实现这类复杂布局时,如何精确地将数字或其他辅助元素环绕在中心菜单周围,同时保持它们与中心的距离和正确的旋转角度,是一个常见的技术挑战。本文将深入探讨如何通过优化HTML结构和精细调整CSS属性,特别是transform中的translate,来解决数字定位不准确的问题,从而实现一个美观且功能完善的圆形菜单。

1. HTML结构优化

为了更好地控制环形菜单及其周围数字的布局和居中,我们首先需要对原有的HTML结构进行一些调整。核心思想是引入额外的包装器(wrapper)元素,将不同的组件(主按钮、菜单项、数字环)封装起来,以便更独立地进行定位和样式控制。

关键结构变化:

  • cn-button-wrapper: 新增的div,用于包装主按钮(.cn-button)。这有助于将主按钮独立居中,而不受其他元素定位的影响。
  • circle-wrapper-outer: 新增的div,用于包装整个数字环(.circle-wrapper)。通过这个外部包装器,我们可以精确控制数字环相对于整个组件的位置。
  • .circle 元素的类名更新: 为了与修改后的transform属性对应,原有的.deg-X类被更新为.deg-X-new。

以下是优化后的HTML结构示例:

<div class="component csstransforms">
  <!-- 主按钮包装器,用于居中主按钮 -->
  <div class="cn-button-wrapper">
    <button class="cn-button" id="cn-button">
      @@##@@
    </button>
  </div>

  <!-- 环形菜单主体 -->
  <div class="cn-wrapper opened-n*" id="cn-wrapper">
    <ul>
      <li>
        <a @click="showMore" href="j*ascript:void(0)"><span class="learn">Learn</span></a>
      </li>
      <li>
        <a @click="showMore2" href="j*ascript:void(0)"><span class="learn1">Review</span></a>
      </li>
      <li>
        <a @click="showMore3" href="j*ascript:void(0)"><span class="learn2">Evaluate</span></a>
      </li>
      <li>
        <a @click="showMore4" href="j*ascript:void(0)"><span class="learn3">Sign-up</span></a>
      </li>
      <li>
        <a @click="showMore5" href="j*ascript:void(0)"><span class="learn4">Engage</span></a>
      </li>
      <li>
        <a @click="showMore6" href="j*ascript:void(0)"><span class="learn5">Share</span></a>
      </li>
      <li>
        <a @click="showMore7" href="j*ascript:void(0)"><span class="learn6">Impact</span></a>
      </li>
      <li>
        <a @click="showMore8" href="j*ascript:void(0)"><span class="learn7">Transform</span></a>
      </li>
    </ul>
  </div>

  <!-- 数字环的外部包装器,用于整体定位 -->
  <div class="circle-wrapper-outer">
    <!-- 数字环主体 -->
    <div class="circle-wrapper">
      <!-- 数字元素,使用新的定位类 -->
      <div class="circle deg-180-new btnDeactivated" id="btn1">1</div>
      <div class="circle deg-225-new btnDeactivated" id="btn2">2</div>
      <div class="circle deg-270-new btnDeactivated" id="btn3">3</div>
      <div class="circle deg-315-new btnDeactivated" id="btn4">4</div>
      <div class="circle deg-0-new btnDeactivated" id="btn5">5</div>
      <div class="circle deg-45-new btnDeactivated" id="btn6">6</div>
      <div class="circle deg-90-new btnDeactivated" id="btn7">7</div>
      <div class="circle deg-135-new btnDeactivated" id="btn8">8</div>
    </div>
  </div>
</div>

2. CSS样式调整详解

结构优化后,我们需要对CSS进行相应的调整,以实现精确的布局和定位。

AI at Meta AI at Meta

Facebook 旗下的AI研究平台

AI at Meta 72 查看详情 AI at Meta

2.1 整体布局与居中

首先,调整主容器和按钮的居中方式。

.component {
  position: relative;
  margin-bottom: 3em;
  height: 15em;
  display: flex; /* 使用Flexbox进行水平居中 */
  justify-content: center; /* 将内容水平居中 */
}

.cn-button-wrapper { /* 新增的按钮包装器 */
  width: 100%;
  height: calc(34rem + 250px); /* 调整高度以适应布局 */
  display: flex;
  justify-content: center;
  align-items: center; /* 垂直居中按钮 */
  margin-left: 15px; /* 微调位置 */
}

.cn-button {
  position: absolute; /* 保持绝对定位 */
  /* 移除原有的 top, left, margin-top, margin-left,让包装器控制其位置 */
  z-index: 11;
  padding: 0;
  width: 8em;
  height: 8em;
  border: none;
  border-radius: 50%;
  background-color: #004691;
  color: #5f259f;
  text-align: center;
  font-weight: 700;
  font-size: 1em;
  text-transform: uppercase;
  cursor: pointer;
  -webkit-backface-visibility: hidden;
  border: 6px solid #fff;
}
  • .component 使用 display: flex 和 justify-content: center 将其内容(包括新引入的包装器)水平居中。
  • .cn-button-wrapper 同样使用 Flexbox 来居中其内部的 .cn-button,并设置了特定的高度和左边距进行微调。
  • .cn-button 移除了原有的 top 和 left 属性,使其位置由父级 .cn-button-wrapper 控制,实现更好的居中。

2.2 环形菜单与数字环的定位

接下来,调整环形菜单主体和数字环的位置。

.csstransforms .cn-wrapper {
  position: absolute; /* 保持绝对定位 */
  /* 移除原有的 top, left, margin-top, margin-left */
  z-index: 10;
  top: 100px; /* 设置距离顶部的偏移量 */
  width: 34em;
  height: 34em;
  border-radius: 50%;
  font-weight: bold;
  background: transparent;
  -webkit-transition: all 0.3s ease 0.3s;
  -moz-transition: all 0.3s ease 0.3s;
  transition: all 0.3s ease 0.3s;
  -webkit-transform: scale(0.1);
  -ms-transform: scale(0.1);
  -moz-transform: scale(0.1);
  transform: scale(0.1);
  pointer-events: none;
  overflow: hidden;
}

.circle-wrapper-outer { /* 新增的数字环外部包装器 */
  width: 100%;
  position: absolute;
  top: 100px; /* 使数字环与菜单主体在垂直方向上对齐 */
}

.circle-wrapper {
  width: 34rem; /* 设置明确的宽度,与菜单主体尺寸匹配 */
  height: 34rem; /* 设置明确的高度 */
  border-radius: 50%;
  position: relative;
  transform: rotate(23deg);
  margin-left: auto;  /* 水平居中 */
  margin-right: auto; /* 水平居中 */
  top: 0;  /* 相对于父级包装器顶部的偏移 */
}
  • .cn-wrapper 移除了原有的 top、left 和 margin 属性,改为通过 top: 100px 进行垂直定位。
  • .circle-wrapper-outer 采用绝对定位,并设置 top: 100px,使其与 .cn-wrapper 在垂直方向上对齐。
  • .circle-wrapper 设置了明确的 width 和 height 以匹配菜单主体的大小,并使用 margin-left: auto; margin-right: auto; 实现水平居中。top: 0 确保它在其外部包装器内顶部对齐。

2.3 数字的精确径向定位

这是实现数字环绕布局的关键步骤。数字的定位依赖于CSS transform属性,特别是 rotate 和 translate 的组合。

.circle {
  display: block;
  position: absolute;
  top: 54%;
  left: 54%;
  width: 50px;
  height: 50px;
  margin: -48px -48px -48px -53px;
  background: red;
  border-radius: 51%;
  text-align: center;
  line-height: 50px;
}

/* 新增的数字定位类,调整了 translate 值 */
.deg-0-new {
  transform: rotate(45deg) translate(325px) rotate(-65deg); /* 增加 translate 值 */
  background: #5ede29;
  color: white;
  font-weight: 600;
}

.deg-45-new {
  transform: rotate(90deg) translate(325px) rotate(-110deg); /* 增加 translate 值 */
  background: #ffe816;
  color: white;
  font-weight: 600;
}

.deg-90-new {
  transform: rotate(135deg) translate(325px) rotate(-158deg); /* 增加 translate 值 */
  background: #f74015;
  color: white;
  font-weight: 600;
}

.deg-135-new {
  transform: rotate(180deg) translate(325px) rotate(-200deg); /* 增加 translate 值 */
  background: #54bef8;
  color: white;
  font-weight: 600;
}

.deg-180-new {
  transform: rotate(225deg) translate(305px) rotate(-248deg); /* 微调 translate 值 */
  background: #5ede29;
  color: white;
  font-weight: 600;
}

.deg-225-new {
  transform: rotate(270deg) translate(305px) rotate(-289deg); /* 微调 translate 值 */
  background: #ffe816;
  color: white;
  font-weight: 600;
}

.deg-270-new {
  transform: rotate(315deg) translate(315px) rotate(-338deg); /* 微调 translate 值 */
  background: #f74015;
  color: white;
  font-weight: 600;
}

.deg-315-new {
  background: #54bef8;
  transform: rotate(360deg) translate(325px) rotate(-380deg); /* 增加 translate 值 */
  color: white;
  font-weight: 600;
}
  • transform: rotate(Adeg) translate(Bpx) rotate(Cdeg)
    • 第一个 rotate(Adeg) 将数字元素围绕其父级(.circle-wrapper)的中心旋转到期望的起始角度。
    • translate(Bpx) 沿着当前旋转后的X轴(或Y轴,取决于上下文)将元素平移 B 像素,这决定了数字与中心菜单的径向距离。
    • 第二个 rotate(Cdeg) 是对数字元素自身进行反向旋转,以抵消第一个 rotate 对元素内容方向的影响,确保数字文本保持水平或期望的朝向。
  • translate 值的重要性
    • 原有的 .deg-X 类中 translate 值(例如 251px)不足以将数字推到环形菜单的外部。
    • 通过引入新的 .deg-X-new 类,我们将 translate 值增加到 325px 或 305px(根据不同角度进行微调),从而使数字被推到更远的径向位置,实现环绕效果。
    • 请注意,deg-180-new、deg-225-new 和 deg-270-new 使用了略小的 translate 值(305px 或 315px),这表明在实际布局中,可能需要根据视觉效果对每个元素的 translate 值进行细致的微调。

3. 完整代码示例

将以上所有修改整合后,得到以下完整的CSS和HTML代码。

3.1 完整CSS代码

.component {
  position: relative;
  margin-bottom: 3em;
  height: 15em;
  display: flex; /* Added for centering */
  justify-content: center; /* Added for centering */
}

.cn-button-wrapper { /* Added wrapper for centering button */
  width: 100%;
  height: calc(34rem + 250px);
  display: flex;
  justify-content: center;
  align-items: center;
  margin-left: 15px;
}

.cn-button {
  position: absolute;
  /* Removed original top, left, margin-top, margin-left */
  z-index: 11;
  padding: 0;
  width: 8em;
  height: 8em;
  border: none;
  border-radius: 50%;
  background: none;
  background-color: #004691;
  color: #5f259f;
  text-align: center;
  font-
logo

以上就是CSS圆形菜单数字环绕布局实现与优化的详细内容,更多请关注其它相关文章!


# 相对于  # 淡季旺季营销推广文案  # 汨罗网站建设  # 广东互联网企业营销推广  # 万网网站建设  # 鹤壁网站如何做推广代理  # 拍拍的营销推广  # 枫林SEO工具简笔画  # 网站推广销售模式有哪些  # 新郑网站搭建优化  # 天雅seo  # 自适应  # 全选  # 不准确  # 推到  # 网页设计  # css  # 双击  # 使其  # 第一个  # 移除  # overfl  # 绝对定位  # css属性  # 垂直居中  # css样式  # app  # go  # html  # java  # javascript 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 《随手记》备份数据方法  search中maxlength属性用法解析  实现二叉树的层序插入:基于树大小的路径导航  如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战  申通快件单号查询平台 申通包裹物流动态跟踪  mysql怎么导入sql文件_mysql导入sql文件的方法与技巧  C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程  《洛克王国:世界》国家队搭配攻略  c++如何实现观察者设计模式_c++行为型设计模式实战  汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  windows10怎么更改下载路径_windows10默认存储位置修改教程  怎么恢复删除的电脑文件_数据恢复软件使用教程  快递优选如何查优选物流_快递优选专属物流渠道查询与配送时效  Excel如何制作月度销售统计图_Excel动态图表制作与控件应用  oppo手机如何通过下拉通知栏截图_oppo手机通知栏快捷截图方法  猫眼app抢票快还是小程序快  国际经济与贸易就业方向解析  《全民k歌》音乐怎么下载到本地2025  《腾讯相册管家》注销账号方法  PHP实现等比数列:构建数组元素基于前一个值递增的方法  斯宾塞称XGP云游戏“蒸蒸日上”:正在构建一个游戏从未如此唾手可得的未来  C++如何实现单例模式_C++线程安全的单例模式写法  《雷电模拟器》自动点击设置方法  CDR如何复制交互式填充色  mysql数据库索引类型有哪些_mysql索引类型解析  偃武诸葛亮阵容搭配推荐  J*aScript调试技巧_性能分析与内存快照  iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南  手机耗电快是什么原因 延长手机电池续航时间的设置方法【详解】  汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口  Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置  sublime怎么在文件中显示代码结构大纲_sublime符号列表功能  谷歌浏览器如何查找和删除恶意软件 谷歌浏览器内置安全清理工具使用教程  银信通自动开通原因揭秘  电脑开不了机怎么办 电脑无法开机的解决方法  红手指专业版app注册教程  《地下城堡4:骑士与破碎编年史》墓穴挑战125攻略  在Django单元测试中优雅处理信号:基于环境的条件执行策略  c++类和对象到底是什么_c++面向对象编程基础  优酷下载视频的清晰度怎么选_优酷缓存清晰度设置与选择指南  126邮箱申请入口官网_126邮箱注册免费登录2025  Highcharts雷达图径向轴数值标签实现教程  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  济南公交卡手机充值指南  服装短视频如何起号推广?服装短视频起号推广有什么要求?  快递物流路径揭秘  在Dash应用中自定义HTML标题和网站图标  铁拳8在线玩 铁拳8在线秒玩入口  《万兴喵影》导出视频方法 

 2025-11-18

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.