You are replacing the original text with the alternate, and when you go back, the original text doesn't exist anymore.
You can use CSS to hide the original text by setting it's font-size
to 0, and showing a pseudo-element (::after
) with the alternate text:
@media (min-width: 400px) and (max-width: 600px) {
.responsive-text {
font-size: 0;
&::after {
font-size: 1rem;
content: attr(data-alt-text);
}
}
}
<div class="schedule-container">
<div class="header responsive-text" data-alt-text="1. HJ">1. Halbjahr</div>
<div class="header responsive-text" data-alt-text="MO">Montag</div>
<div class="header responsive-text" data-alt-text="DI">Dienstag</div>
<div class="header responsive-text" data-alt-text="MI">Mittwoch</div>
<div class="header responsive-text" data-alt-text="DO">Donnerstag</div>
<div class="header responsive-text" data-alt-text="FR">Freitag</div>
</div>
Another option is to use 2 data attributes, and replace the pseudo-elements content
:
.responsive-text::after {
content: attr(data-text);
}
@media (min-width: 400px) and (max-width: 600px) {
.responsive-text::after {
content: attr(data-alt-text);
}
}
<div class="schedule-container">
<div class="header responsive-text" data-alt-text="1. HJ" data-text="1. Halbjahr"></div>
<div class="header responsive-text" data-alt-text="MO" data-text="Montag"></div>
<div class="header responsive-text" data-alt-text="DI" data-text="Dienstag"></div>
<div class="header responsive-text" data-alt-text="MI" data-text="Mittwoch"></div>
<div class="header responsive-text" data-alt-text="DO" data-text="Donnerstag"></div>
<div class="header responsive-text" data-alt-text="FR" data-text="Freitag"></div>
</div>
Using JS, you can create a MediaQueryList using window.matchMedia(), and switch the textContent
and the data attribute values whenever it changes:
const mql = window.matchMedia('(width >= 400px) and (width <= 600px)');
function updateText() {
const elements = document.querySelectorAll('.responsive-text');
elements.forEach(element => {
const textContent = element.textContent;
const altText = element.getAttribute('data-alt-text');
element.textContent = altText;
element.setAttribute('data-alt-text', textContent);
});
}
if(mql.matches) updateText();
mql.addEventListener('change', updateText);
<div class="schedule-container">
<div class="header responsive-text" data-alt-text="1. HJ">1. Halbjahr</div>
<div class="header responsive-text" data-alt-text="MO">Montag</div>
<div class="header responsive-text" data-alt-text="DI">Dienstag</div>
<div class="header responsive-text" data-alt-text="MI">Mittwoch</div>
<div class="header responsive-text" data-alt-text="DO">Donnerstag</div>
<div class="header responsive-text" data-alt-text="FR">Freitag</div>
</div>