:root { --base-color: rgba(255, 255, 255, 1); --hover-color: rgba(220, 120, 150, 1); } body { height: 100vh; overflow: hidden; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; font-family: 'Anton', sans-serif; background: radial-gradient(ellipse at bottom, #1b2735 0%, #090a0f 100%); } .horizontal { display: flex; justify-content: center; align-items: center; position: relative; width: 400px; height: 120px; margin: 20px; border: 10px solid var(--base-color); font-size: 4rem; cursor: pointer; > .text { position: relative; color: transparent; background-image: linear-gradient( 90deg, var(--hover-color) 0%, var(--hover-color) 50%, var(--base-color) 50%, var(--base-color) 100% ); background-repeat: repeat; background-size: 200%; background-position: 100% 0; -webkit-background-clip: text; background-clip: text; transition: background-position 300ms; } &::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: var(--base-color); transform-origin: 100% 0; transform: scale3d(0, 1, 1); transition: transform 300ms; } &:hover { .text { background-position: 0 0; } &::before { transform-origin: 0 0; transform: scale3d(1, 1, 1); } } } .vertical { display: flex; justify-content: center; align-items: center; position: relative; width: 400px; height: 120px; margin: 20px; border: 10px solid var(--base-color); font-size: 4rem; cursor: pointer; > .text { position: relative; color: transparent; background-image: linear-gradient( 0deg, var(--hover-color) 0%, var(--hover-color) 50%, var(--base-color) 50%, var(--base-color) 100% ); background-repeat: repeat; background-size: 100% 200%; background-position: 0 0; -webkit-background-clip: text; background-clip: text; transition: background-position 300ms; } &::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: var(--base-color); transform-origin: 0 0; transform: scale3d(1, 0, 1); transition: transform 300ms; } &:hover { .text { background-position: 0 100%; } &::before { transform-origin: 0 100%; transform: scale3d(1, 1, 1); } } }