You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart Flutter中实现容器内凹曲线的底部导航栏?

带内凹曲线的底部导航栏实现方案

下面给你三种实用的实现方案,都是前端常用方法,按需选择:

方案1:CSS Clip-path 自定义路径

直接用clip-path属性定义带内凹的路径,代码简洁,适合简单弧形内凹的场景。

示例代码(实现底部中间内凹的导航栏):

.bottom-nav {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  height: 60px;
  background: #ffffff;
  box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
  /* 自定义内凹路径:底部中间向内凹出弧形 */
  clip-path: path('M0,0 L100%,0 L100%,60 C50%,60 50%,40 50%,40 L0,60 Z');
}

你可以调整path里的坐标值:50%是内凹的横向中心位置,60是导航栏高度,40是内凹的深度,数值越大内凹越明显。

方案2:SVG 背景实现

用SVG绘制带内凹的形状作为导航栏背景,兼容性更好,能实现更复杂的曲线效果。

示例代码:

.bottom-nav {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  height: 60px;
  /* 内嵌SVG作为背景,repeat-x确保铺满宽度 */
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 60'%3E%3Cpath d='M0,0 L100,0 L100,60 Q50,40 0,60 Z' fill='%23ffffff'/%3E%3C/svg%3E") repeat-x;
  background-size: 100% 100%;
  box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
}

SVG里的Q50,40是二次贝塞尔曲线的控制点,修改50,40这组坐标就能调整内凹的弧度和深度,fill值要和导航栏的背景色一致。

方案3:伪元素叠加法

通过叠加元素模拟内凹效果,最直观易懂,适合只需要简单半圆内凹的场景。

示例代码:

.bottom-nav {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  height: 60px;
  background: #ffffff;
  box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
  overflow: hidden; /* 确保伪元素超出部分被裁剪 */
}

.bottom-nav::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%); /* 居中 */
  width: 80px; /* 内凹的宽度 */
  height: 40px; /* 内凹的深度 */
  background: #f5f5f5; /* 这里要设置为页面的主体背景色 */
  border-radius: 50% 50% 0 0; /* 做成上半圆 */
}

原理是用和页面背景色一致的上半圆伪元素覆盖在导航栏底部中间,视觉上就形成了内凹的效果,调整width和height就能改变内凹的大小。

内容的提问来源于stack exchange,提问作者Azmat Ullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:45:31