css制作月亮的代码

admin 104 0
通过CSS制作月亮,主要利用border-radius创建圆形基础,结合box-shadow的偏移与模糊属性生成月牙形状,或使用radial-gradient模拟月球表面纹理与明暗层次,设置一个圆形元素,通过box-shadow的inset内阴影或多个阴影叠加,形成月牙的凹陷效果;或用radial-gradient创建环形渐变,模拟月球表面的坑洼与光影,这种方法无需图片,代码简洁,可通过调整阴影位置、渐变色彩等参数实现不同形态的月亮,适配网页装饰或动画场景。

用CSS绘制月亮:从基础到创意的代码指南

月亮作为夜空中的经典意象,自古以来就承载着浪漫与神秘的色彩,在现代网页设计中,月亮元素常被用作背景、装饰或交互元素,为页面增添诗意与氛围,掌握用CSS绘制月亮的技巧,不仅能提升页面的视觉美感,还能通过代码实现灵活的动态效果,本文将从基础形状到创意进阶,带你一步步掌握用CSS制作月亮的代码技巧,助你在网页设计中呈现独特的月光魅力。

基础:绘制一个满月(圆形月亮)

最简单的月亮形态是正圆形,呈现满月的效果,这种基础形态的核心思路是利用CSS的border-radius属性将正方形元素转换为圆形,再填充适当的颜色即可完成。

代码实现

<div class="full-moon"></div>
.full-moon {
  width: 120px;    /* 设置宽度 */
  height: 120px;   /* 设置高度 */
  background: #f5f5dc; /* 月亮颜色(米黄色) */
  border-radius: 50%;  /* 将正方形转为圆形 */
  box-shadow: 0 0 20px rgba(245, 245, 220, 0.5); /* 添加柔和光晕 */
}

代码解析

  • widthheight控制月亮的大小,两者相等时呈现正圆效果;
  • border-radius: 50%是核心属性,将直角正方形转变为完美的圆形;
  • background设置月亮的填充色,#f5f5dc是经典的月亮米黄色,也可替换为#fff8dc(玉米色)或#fffacd(柠檬色),根据页面整体色调选择合适的颜色;
  • box-shadow为可选效果,通过模糊和扩散模拟月光晕染,让月亮更具立体感和真实感。

进阶:绘制月相(新月、上弦月、残月)

真实的月亮会经历月相变化,从新月、上弦月、满月到下弦月、残月等不同形态,在CSS中实现这些效果的核心思路是通过"遮挡"部分圆形区域来模拟月相变化,这里介绍两种常用方法:伪元素遮挡法圆锥渐变法

方法1:伪元素遮挡法(适合新月、上弦月等)

通过一个"遮挡层"(伪元素)覆盖部分圆形,模拟月相阴影效果。

代码示例(上弦月)
<div class="moon-phase crescent"></div>
.moon-phase {
  width: 120px;
  height: 120px;
  background: #f5f5dc;
  border-radius: 50%;
  position: relative; /* 为伪元素定位提供参考 */
}
.crescent::after {
  content: '';
  position: absolute;
  width: 100%;
  height: 100%;
  background: #1a1a2e; /* 背景色(与页面背景一致) */
  border-radius: 50%;
  left: 30%; /* 调整遮挡位置,改变月相 */
  top: 0;
}
效果解析
  • 通过after伪元素创建一个与月亮同大小的圆形,背景色与页面背景色相同(如深色背景用#1a1a2e),遮挡部分月亮主体;
  • 调整left值(或top/right/bottom)可改变遮挡位置:
    • left: 0:新月(完全遮挡,仅剩边缘弧光,可微调left为负值露出边缘);
    • left: 30%:上弦月(右半圆被遮挡);
    • left: 50%:满月(无遮挡,需移除伪元素);
    • left: 70%:下弦月(左半圆被遮挡)。

技巧提示:为遮挡层添加transform-originrotate属性,可以创建更复杂的月相效果,如月牙形的弯曲变化。

方法2:圆锥渐变法(适合复杂月相)

使用conic-gradient(圆锥渐变)直接绘制月相,无需遮挡层,代码更简洁且性能更优。

代码示例(残月)
<div class="moon-phase-gibbous"></div>
.moon-phase-gibbous {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  background: conic-gradient(
    from 90deg at 50% 50%, 
    #1a1a2e 0deg 270deg,  /* 遮挡区域(270度扇形) */
    #f5f5dc 270deg 360deg /* 月亮主体(90度扇形) */
  );
}
效果解析
  • conic-gradient90deg开始,绘制270deg的遮挡色(深色背景)和90deg的月亮色,形成残月效果;
  • 调整起始角度和角度范围,可实现不同月相(如新月用0deg 10deg,仅留窄条弧光);
  • 此方法的优势在于无需额外元素,减少DOM节点,提升渲染性能。

高阶:添加发光与动态效果

真实的月亮具有柔和的光晕,且可能缓慢移动或闪烁,通过CSS动画和高级阴影效果,我们可以模拟这些自然现象,让页面中的月亮更加生动。

月晕效果(柔和光晕)

使用多层box-shadow叠加,模拟月光扩散的渐变效果,营造梦幻氛围。

.moon-glow {
  width: 120px;
  height: 120px;
  background: #f5f5dc;
  border-radius: 50%;
  box-shadow: 
    0 0 20px rgba(245, 245, 220, 0.8),   /* 内层光晕 */
    0 0 40px rgba(245, 245, 220, 0.5),   /* 中层光晕 */
    0 0 60px rgba(245, 245, 220, 0.3),   /* 外层光晕 */
    0 0 80px rgba(245, 245, 220, 0.1);   /* 最外层光晕 */
}

月亮动态效果

缓慢移动动画

模拟月亮在天空中缓慢移动的效果:

.moon-moving {
  animation: moonFloat 20s infinite ease-in-out;
}
@keyframes moonFloat {
  0%, 100% {
    transform: translateX(0) translateY(0);
  }
  25% {
    transform: translateX(30px) translateY(-20px);
  }
  50% {
    transform: translateX(60px) translateY(0);
  }
  75% {
    transform: translateX(30px) translateY(20px);
  }
}
闪烁效果

模拟月光闪烁的微妙变化:

.moon-twinkle {
  animation: twinkle 3s infinite alternate;
}
@keyframes twinkle {
  0% {
    opacity: 0.9;
    filter: brightness(1);
  }
  100% {
    opacity: 1;
    filter: brightness(1.1);
  }
}

创意应用:组合效果与场景设计

组合月相与动态效果

将月相变化与动态效果结合,创建更丰富的视觉体验:

.creative-moon {
  width

标签: #CSS #月亮