91³Ô¹ÏÍø

Watch CBS News

Why was the moon shades of red, orange and yellow last night? Here's what causes a "Blood Moon."

Those who glanced up at the sky Thursday night had an opportunity to catch the March 2025 "Blood Moon," a phenomenon that colors the full moon in shades of red, orange and yellow during a total lunar eclipse.

This month's full moon was due to pass through the shadow of Earth either late Thursday night or very early Friday morning, depending on the viewer's time zone. It was visible to people in the Americas and elsewhere in the Western Hemisphere.

Dubbed the "" by the Farmer's Almanac, which has been assigning names to full moons for almost a century, this one is expected to last through Saturday morning, according to . The full moon technically rose in its totality early Friday.

Here's what to know about the event — and why the moon showed a new hue when it happened.

Why was the moon red, orange and yellow?

The moon appeared to turn red as Earth passed directly between it and the sun in what's known as a total lunar eclipse. Their perfect alignment darkens the moon, from the perspective of folks looking up, because our planet's position blocks most sunlight from reaching it.

Some light still makes its way to the moon's surface, but only certain shades of it. The colors that wind up there are longer wavelengths of light — red, orange, yellow — which withstood the journey through "a thick slice of Earth's atmosphere," NASA said. 

lunar-eclipse-1.jpg
An illustration shows the alignment of the sun, moon and Earth during a lunar eclipse. It isn't drawn to scale. NASA's Scientific Visualization Studio

Shorter wavelengths of the color spectrum, like blue, scatter easily when they hit the atmosphere. That's why a vast sky can look blue in the middle of the day, when sunlight can shine straight down from overhead. Longer wavelengths materialize on Earth when sunlight hits from more of a perpendicular angle, so its route through our atmosphere can be more extensive. Short wavelengths are essentially filtered out by the atmosphere over such a protracted distance, and only the longer reds, oranges and yellows remain.

What is a "Blood Moon"?

"Blood Moon" is a nickname that refers to the moon's reddish appearance during a total lunar eclipse.

by on

The full moon takes on several shades of red, orange and yellow when it's nearer the outer edges of Earth's shadow — when it first intersects with the path of Earth's shadow, for example, and as it's on its way out. But shades of deep red become more pronounced as the moon enters the darkest part of the shadow.

What exactly causes a "Blood Moon"?

A "Blood Moon" happens during a total lunar eclipse, when the sun, Earth and the moon align in that order. Long wavelengths of sunlight are refracted through Earth's atmosphere before reaching the moon, which reflects them in reddish hues that may resemble the color of blood.

When was the "Blood Moon" lunar eclipse?

This week's "Blood Moon" began late Thursday night. The moon moved through Earth's shadow overnight, with the best opportunity to see the reddish moon around 3 a.m. ET Friday.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=50747257b890e014813016b79ece0fb2'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });