1
0
mirror of https://github.com/hakimel/reveal.js.git synced 2025-08-05 06:07:37 +02:00

refactored overlays; new icons and reduced selector specificity

This commit is contained in:
Hakim El Hattab
2025-01-24 09:15:47 +01:00
parent 983c6248f7
commit 31ba65ce86
2 changed files with 42 additions and 39 deletions

View File

@@ -1454,7 +1454,7 @@ $overlayHeaderPadding: 5px;
transition: all 0.3s ease; transition: all 0.3s ease;
} }
.reveal > .overlay .spinner { .reveal .overlay-spinner {
position: absolute; position: absolute;
display: block; display: block;
top: 50%; top: 50%;
@@ -1470,7 +1470,8 @@ $overlayHeaderPadding: 5px;
transition: all 0.3s ease; transition: all 0.3s ease;
} }
.reveal > .overlay header { .reveal .overlay-header {
display: flex;
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
@@ -1478,22 +1479,24 @@ $overlayHeaderPadding: 5px;
padding: $overlayHeaderPadding; padding: $overlayHeaderPadding;
z-index: 2; z-index: 2;
box-sizing: border-box; box-sizing: border-box;
align-items: center;
justify-content: flex-end;
} }
.reveal > .overlay header a { .reveal .overlay-header a {
display: inline-block; display: flex;
align-items: center;
justify-content: center;
width: $overlayHeaderHeight; width: $overlayHeaderHeight;
height: $overlayHeaderHeight; height: $overlayHeaderHeight;
line-height: 36px;
padding: 0 10px; padding: 0 10px;
float: right;
opacity: 0.6; opacity: 0.6;
box-sizing: border-box; box-sizing: border-box;
} }
.reveal > .overlay header a:hover { .reveal .overlay-header a:hover {
opacity: 1; opacity: 1;
} }
.reveal > .overlay header a .icon { .reveal .overlay-header .icon {
display: inline-block; display: inline-block;
width: 20px; width: 20px;
height: 20px; height: 20px;
@@ -1502,14 +1505,14 @@ $overlayHeaderPadding: 5px;
background-size: 100%; background-size: 100%;
background-repeat: no-repeat; background-repeat: no-repeat;
} }
.reveal > .overlay header a.close .icon { .reveal .overlay-close .icon {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC); background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTIuODU0IDIuODU0YS41LjUgMCAwIDAtLjcwOC0uNzA4TDcuNSA2Ljc5MyAyLjg1NCAyLjE0NmEuNS41IDAgMSAwLS43MDguNzA4TDYuNzkzIDcuNWwtNC42NDcgNC42NDZhLjUuNSAwIDAgMCAuNzA4LjcwOEw3LjUgOC4yMDdsNC42NDYgNC42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMOC4yMDcgNy41bDQuNjQ3LTQuNjQ2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);
} }
.reveal > .overlay header a.external .icon { .reveal .overlay-external .icon {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==); background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMyAyYTEgMSAwIDAgMC0xIDF2OWExIDEgMCAwIDAgMSAxaDlhMSAxIDAgMCAwIDEtMVY4LjVhLjUuNSAwIDAgMC0xIDBWMTJIM1YzaDMuNWEuNS41IDAgMCAwIDAtMUgzWm05Ljg1NC4xNDZhLjUuNSAwIDAgMSAuMTQ2LjM1MVY1LjVhLjUuNSAwIDAgMS0xIDBWMy43MDdMNi44NTQgOC44NTRhLjUuNSAwIDEgMS0uNzA4LS43MDhMMTEuMjkzIDNIOS41YS41LjUgMCAwIDEgMC0xaDNhLjQ5OS40OTkgMCAwIDEgLjM1NC4xNDZaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);
} }
.reveal > .overlay .viewport { .reveal .overlay-viewport {
position: absolute; position: absolute;
display: flex; display: flex;
top: $overlayHeaderHeight + $overlayHeaderPadding*2; top: $overlayHeaderHeight + $overlayHeaderPadding*2;
@@ -1518,7 +1521,7 @@ $overlayHeaderPadding: 5px;
left: 0; left: 0;
} }
.reveal > .overlay.overlay-preview .viewport iframe { .reveal .overlay-preview .overlay-viewport iframe {
width: 100%; width: 100%;
height: 100%; height: 100%;
max-width: 100%; max-width: 100%;
@@ -1530,12 +1533,12 @@ $overlayHeaderPadding: 5px;
transition: all 0.3s ease; transition: all 0.3s ease;
} }
.reveal > .overlay.overlay-preview.loaded .viewport iframe { .reveal .overlay-preview.loaded .overlay-viewport iframe {
opacity: 1; opacity: 1;
visibility: visible; visibility: visible;
} }
.reveal > .overlay.overlay-preview.loaded .viewport-inner { .reveal .overlay-preview.loaded .overlay-viewport-inner {
position: absolute; position: absolute;
z-index: -1; z-index: -1;
left: 0; left: 0;
@@ -1544,26 +1547,26 @@ $overlayHeaderPadding: 5px;
text-align: center; text-align: center;
letter-spacing: normal; letter-spacing: normal;
} }
.reveal > .overlay.overlay-preview .x-frame-error { .reveal .overlay-preview .x-frame-error {
opacity: 0; opacity: 0;
transition: opacity 0.3s ease 0.3s; transition: opacity 0.3s ease 0.3s;
} }
.reveal > .overlay.overlay-preview.loaded .x-frame-error { .reveal .overlay-preview.loaded .x-frame-error {
opacity: 1; opacity: 1;
} }
.reveal > .overlay.overlay-preview.loaded .spinner { .reveal .overlay-preview.loaded .overlay-spinner {
opacity: 0; opacity: 0;
visibility: hidden; visibility: hidden;
transform: scale(0.2); transform: scale(0.2);
} }
.reveal > .overlay.overlay-help .viewport { .reveal .overlay-help .overlay-viewport {
overflow: auto; overflow: auto;
color: #fff; color: #fff;
} }
.reveal > .overlay.overlay-help .viewport .viewport-inner { .reveal .overlay-help .overlay-viewport-inner {
width: 600px; width: 600px;
margin: auto; margin: auto;
padding: 20px 20px 80px 20px; padding: 20px 20px 80px 20px;
@@ -1571,25 +1574,25 @@ $overlayHeaderPadding: 5px;
letter-spacing: normal; letter-spacing: normal;
} }
.reveal > .overlay.overlay-help .viewport .viewport-inner .title { .reveal .overlay-help .overlay-viewport-inner .title {
font-size: 20px; font-size: 20px;
} }
.reveal > .overlay.overlay-help .viewport .viewport-inner table { .reveal .overlay-help .overlay-viewport-inner table {
border: 1px solid #fff; border: 1px solid #fff;
border-collapse: collapse; border-collapse: collapse;
font-size: 16px; font-size: 16px;
} }
.reveal > .overlay.overlay-help .viewport .viewport-inner table th, .reveal .overlay-help .overlay-viewport-inner table th,
.reveal > .overlay.overlay-help .viewport .viewport-inner table td { .reveal .overlay-help .overlay-viewport-inner table td {
width: 200px; width: 200px;
padding: 14px; padding: 14px;
border: 1px solid #fff; border: 1px solid #fff;
vertical-align: middle; vertical-align: middle;
} }
.reveal > .overlay.overlay-help .viewport .viewport-inner table th { .reveal .overlay-help .overlay-viewport-inner table th {
padding-top: 20px; padding-top: 20px;
padding-bottom: 20px; padding-bottom: 20px;
} }

View File

@@ -819,14 +819,14 @@ export default function( revealElement, options ) {
dom.wrapper.appendChild( dom.overlay ); dom.wrapper.appendChild( dom.overlay );
dom.overlay.innerHTML = dom.overlay.innerHTML =
`<header> `<header class="overlay-header">
<a class="close" href="#"><span class="icon"></span></a> <a class="overlay-external" href="${url}" target="_blank"><span class="icon"></span></a>
<a class="external" href="${url}" target="_blank"><span class="icon"></span></a> <a class="overlay-close" href="#"><span class="icon"></span></a>
</header> </header>
<div class="spinner"></div> <div class="overlay-spinner"></div>
<div class="viewport"> <div class="overlay-viewport">
<iframe src="${url}"></iframe> <iframe src="${url}"></iframe>
<small class="viewport-inner"> <small class="overlay-viewport-inner">
<span class="x-frame-error">Unable to load iframe. This is likely due to the site's policy (x-frame-options).</span> <span class="x-frame-error">Unable to load iframe. This is likely due to the site's policy (x-frame-options).</span>
</small> </small>
</div>`; </div>`;
@@ -835,12 +835,12 @@ export default function( revealElement, options ) {
dom.overlay.classList.add( 'loaded' ); dom.overlay.classList.add( 'loaded' );
}, false ); }, false );
dom.overlay.querySelector( '.close' ).addEventListener( 'click', event => { dom.overlay.querySelector( '.overlay-close' ).addEventListener( 'click', event => {
closeOverlay(); closeOverlay();
event.preventDefault(); event.preventDefault();
}, false ); }, false );
dom.overlay.querySelector( '.external' ).addEventListener( 'click', event => { dom.overlay.querySelector( '.overlay-external' ).addEventListener( 'click', event => {
closeOverlay(); closeOverlay();
}, false ); }, false );
@@ -902,15 +902,15 @@ export default function( revealElement, options ) {
html += '</table>'; html += '</table>';
dom.overlay.innerHTML = ` dom.overlay.innerHTML = `
<header> <header class="overlay-header">
<a class="close" href="#"><span class="icon"></span></a> <a class="overlay-close" href="#"><span class="icon"></span></a>
</header> </header>
<div class="viewport"> <div class="overlay-viewport">
<div class="viewport-inner">${html}</div> <div class="overlay-viewport-inner">${html}</div>
</div> </div>
`; `;
dom.overlay.querySelector( '.close' ).addEventListener( 'click', event => { dom.overlay.querySelector( '.overlay-close' ).addEventListener( 'click', event => {
closeOverlay(); closeOverlay();
event.preventDefault(); event.preventDefault();
}, false ); }, false );