WEBLEB
Home
Editor
Login
Pro
English
English
Français
Español
Português
Deutsch
Italiano
हिंदी
Cascading Solar System
2120
Andev.web
Open In Editor
Publish Your Code
Recommended
25 May 2025
Portflio Modren and Post System { HTML CSS JS } By Youssef Pl
2 April 2025
Solar Sistem
26 August 2024
Solar explorer
HTML
Copy
Andev Web
C
ascading
S
olar
S
ystem
Sun
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
Pluto
CSS
Copy
* { box-sizing: border-box; margin: 0; } .solar-system { --sun-diameter: 12dvh; --sun-spacing: .15; /* very much not to scale */ --mercury-size: .2; --venus-size: .25; --earth-size: .25; --mars-size: .25; --jupiter-size: .75; --saturn-size: .6; --uranus-size: .4; --neptune-size: .4; --pluto-size: .1; /* to scale! https://en.wikipedia.org/wiki/Orbital_period#Examples_of_sidereal_and_synodic_periods */ --mercury-period: .24; --venus-period: .615; --earth-duration: 5s; --mars-period: 1.88; --jupiter-period: 11.86; --saturn-period: 29.46; --uranus-period: 84; --neptune-period: 164; --pluto-period: 248; padding: 1rem 0 0 0; overflow: hidden; display: grid; gap: calc(var(--sun-diameter) * .15); grid-template-rows: repeat(10, auto); grid-template-areas: "pluto" "neptune" "uranus" "saturn" "jupiter" "mars" "earth" "venus" "mercury" "sun"; .orbit { --sun-margin: calc(var(--sun-diameter) * var(--sun-spacing)); --planet-diameter: max(var(--planet-size) * var(--sun-diameter), 1rem); grid-column: 1 / -1; display: grid; grid-template-rows: subgrid; grid-template-columns: subgrid; justify-items: center; &:has(.sun) { --planet-size: 1; grid-area: sun; padding-block: var(--sun-margin); .label { color: transparent; } } &:has(.mercury) { --planet-size: var(--mercury-size); --planet-duration: calc(var(--earth-duration) * var(--mercury-period)); grid-row: mercury-start / sun-end; .planet, .label { grid-area: mercury; } } &:has(.venus) { --planet-size: var(--venus-size); --planet-duration: calc(var(--earth-duration) * var(--venus-period)); grid-row: venus-start / sun-end; .planet, .label { grid-area: venus; } } &:has(.earth) { --planet-size: var(--earth-size); --planet-duration: var(--earth-duration); grid-row: earth-start / sun-end; .planet, .label { grid-area: earth; } } &:has(.mars) { --planet-size: var(--mars-size); --planet-duration: calc(var(--earth-duration) * var(--mars-period)); grid-row: mars-start / sun-end; .planet, .label { grid-area: mars; } } &:has(.jupiter) { --planet-size: var(--jupiter-size); --planet-duration: calc(var(--earth-duration) * var(--jupiter-period)); grid-row: jupiter-start / sun-end; .planet, .label { grid-area: jupiter; } } &:has(.saturn) { --planet-size: var(--saturn-size); --planet-duration: calc(var(--earth-duration) * var(--saturn-period)); grid-row: saturn-start / sun-end; .planet, .label { grid-area: saturn; } } &:has(.uranus) { --planet-size: var(--uranus-size); --planet-duration: calc(var(--earth-duration) * var(--uranus-period)); grid-row: uranus-start / sun-end; .planet, .label { grid-area: uranus; } } &:has(.neptune) { --planet-size: var(--neptune-size); --planet-duration: calc(var(--earth-duration) * var(--neptune-period)); grid-row: neptune-start / sun-end; .planet, .label { grid-area: neptune; } } &:has(.pluto) { --planet-size: var(--pluto-size); --planet-duration: calc(var(--earth-duration) * var(--pluto-period)); grid-row: pluto-start / sun-end; .planet, .label { grid-area: pluto; } } } .planet { height: var(--planet-diameter); aspect-ratio: 1; border-radius: 50%; /* background-color: rgb(255 0 0 / .9); */ z-index: 1; background-image: radial-gradient(circle at center 80%, rgb(255 255 255 / .4), rgb(255 255 255 / 0) 50%); &.sun { --sun-color: #ffd800; background-color: var(--sun-color); background-image: none; box-shadow: 0 0 42px 0 color-mix(in oklch, transparent, var(--sun-color) 50%); } &.mercury { background-color: #989494; } &.venus { background-color: #e1d59d; } &.earth { background-color: #008bb3; } &.mars { background-color: #dfa272; } &.jupiter { background-color: #af7045; } &.saturn { background-color: #d3b57c; } &.uranus { background-color: #77aac4; } &.neptune { background-color: #3a80a4; } &.pluto { background-color: #989494; } } .orbit-ring { grid-area: 1 / 1 / -1 / -1; height: calc(2 * (100% - var(--planet-diameter) / 2 - var(--sun-diameter) / 2 - var(--sun-margin))); aspect-ratio: 1; translate: 0 calc(var(--planet-diameter) / 2); border-radius: 50%; border: 1px solid rgb(255 255 255 / .5); z-index: 0; } .axis { grid-area: 1 / 1 / -1 / -1; display: grid; grid-template-rows: subgrid; transform-origin: center calc(100% - var(--sun-diameter) / 2 - var(--sun-margin)); animation: orbit var(--planet-duration) linear infinite; } .label { align-self: center; translate: 0 -.5lh; z-index: 2; } } @keyframes orbit { from { rotate: 0turn; } to { rotate: 1turn; } } body { font-family: system-ui, sans-serif; color: white; background: linear-gradient(to bottom, #112, #223); } a { color: currentcolor; } h1 { font-weight: 400; } .layout { min-height: 100dvh; display: grid; & > .solar-system { align-self: end; } } .content { max-inline-size: 40rem; margin: 8px; & > * + * { margin-block-start: 1em; } }
JS
Copy
const fixIt = () => { solarSystem.style.display = "none"; requestAnimationFrame(() => { solarSystem.style.display = ""; }); } const ro = new ResizeObserver(entries => { const sunHeight = solarSystem.querySelector(".sun").getBoundingClientRect().height; const solarSystemHeight = solarSystem.getBoundingClientRect().height; if(solarSystemHeight > 10 * sunHeight) { fixIt(); } });