Merge branch 'master' into feat/new-search

This commit is contained in:
Victor Westerlund 2024-05-06 12:09:20 +02:00
commit 4de391fbdb
5 changed files with 74 additions and 35 deletions

View file

@ -33,6 +33,33 @@ body {
font-size: 15px; font-size: 15px;
} }
body::before {
transition: 1s opacity;
content: "";
position: absolute;
top: -5%;
right: 0;
width: 20%;
height: 5%;
border-radius: 100%;
z-index: 1000;
box-shadow:
0 0 30svh 10svh rgba(var(--primer-color-accent), .2),
0 0 30svh 60svh rgba(var(--primer-color-accent), .1),
0 0 30svh 150svh rgba(var(--primer-color-accent), .02)
;
opacity: 0;
}
/* "enable" the corner glow effect on initial load when a page has been fully loaded */
body[vv-page]::before {
opacity: 1;
}
body.search-dialog-open {
overflow: hidden;
}
a { a {
display: contents; display: contents;
color: inherit; color: inherit;
@ -226,6 +253,20 @@ searchbox > svg {
/* # Size queries */ /* # Size queries */
@media (min-width: 700px) { @media (min-width: 700px) {
/* # Cornerstones */
body::before {
right: unset;
left: 0;
box-shadow:
0 0 30svh 10svh rgba(var(--primer-color-accent), .1),
0 0 30svh 60svh rgba(var(--primer-color-accent), .05),
0 0 30svh 150svh rgba(var(--primer-color-accent), .02)
;
}
/* ## Header */
header { header {
grid-template-columns: 1fr 250px var(--running-size); grid-template-columns: 1fr 250px var(--running-size);
} }
@ -235,9 +276,9 @@ searchbox > svg {
margin: 0 calc(var(--padding) / 2); margin: 0 calc(var(--padding) / 2);
} }
/* # Menu */ /* ### Menu */
/* < Move the search box to the header */ /* Move the search box to the header */
header searchbox { header searchbox {
display: grid; display: grid;
} }

View file

@ -50,6 +50,8 @@ section.version {
/* # Interests */ /* # Interests */
div.interests { div.interests {
--text-shadow-blur: 30px;
transition: 300ms opacity; transition: 300ms opacity;
position: fixed; position: fixed;
top: 0; top: 0;
@ -58,7 +60,7 @@ div.interests {
height: 100%; height: 100%;
font-weight: bold; font-weight: bold;
pointer-events: none; pointer-events: none;
font-size: 50px; font-size: clamp(16px, 15vw, 50px);
color: var(--color-accent); color: var(--color-accent);
overflow: hidden; overflow: hidden;
opacity: 0; opacity: 0;
@ -70,9 +72,7 @@ div.interests.active {
} }
div.interests p { div.interests p {
--text-shadow-blur: 30px; transition: 500ms transform cubic-bezier(.34,0,0,.99);
transition: 300ms transform;
position: absolute; position: absolute;
text-shadow: text-shadow:
0 0 var(--text-shadow-blur) black, 0 0 var(--text-shadow-blur) black,

View file

@ -1,3 +1,9 @@
/* # Overrides */
body[vv-page="/"]::before {
opacity: 0;
}
/* # Main styles */ /* # Main styles */
/* ## Picture */ /* ## Picture */

View file

@ -6,26 +6,35 @@ const randomIntFromInterval = (min, max) => {
// Interest explosion effect from origin position // Interest explosion effect from origin position
const explodeInterests = (originX, originY) => { const explodeInterests = (originX, originY) => {
// Elements can not translate more than negative- and positive from this number
const TRANS_LIMIT = 300;
const wrapper = document.querySelector("div.interests"); const wrapper = document.querySelector("div.interests");
wrapper.classList.add("active"); wrapper.classList.add("active");
// Elements can not expand further than positive or negative of these values
const transLimitX = window.innerWidth / 4;
const transLimitY = window.innerHeight / 3;
[...wrapper.querySelectorAll("p")].forEach(element => { [...wrapper.querySelectorAll("p")].forEach(element => {
/* const size = element.getBoundingClientRect();
Generate random visuals for current element
*/ // Generate random HUE wheel rotation degrees
const hue = randomIntFromInterval(0, 360); const hue = randomIntFromInterval(0, 360);
// Generate random element transform rotation
const rotate = randomIntFromInterval(-5, 5); const rotate = randomIntFromInterval(-5, 5);
const transX = randomIntFromInterval(TRANS_LIMIT * -1, TRANS_LIMIT);
const transY = randomIntFromInterval(TRANS_LIMIT * -1, TRANS_LIMIT); // Generate random offsets in each direction clamped to translation limit
let transX = randomIntFromInterval(transLimitX * -1, transLimitX);
let transY = randomIntFromInterval(transLimitY * -1, transLimitY);
// Clamp translation to screen left and right X size
transX = Math.max(0 - originX, Math.min((window.innerWidth - originX) - size.width, transX));
// Clamp translation to top and bottom Y size
transY = Math.max(0 - originY, Math.min((window.innerHeight - originY) - size.height, transY));
// Set initial position // Set initial position
element.style.setProperty("top", `${originY}px`); element.style.setProperty("top", `${originY}px`);
element.style.setProperty("left", `${originX}px`); element.style.setProperty("left", `${originX}px`);
// Set random HUE rotation // Set HUE rotation
element.style.setProperty("-webkit-filter", `hue-rotate(${hue}deg)`); element.style.setProperty("-webkit-filter", `hue-rotate(${hue}deg)`);
element.style.setProperty("filter", `hue-rotate(${hue}deg)`); element.style.setProperty("filter", `hue-rotate(${hue}deg)`);
@ -39,10 +48,8 @@ const implodeInterests = () => {
const wrapper = document.querySelector("div.interests"); const wrapper = document.querySelector("div.interests");
wrapper.classList.remove("active"); wrapper.classList.remove("active");
[...wrapper.querySelectorAll("p")].forEach(element => {
// Reset to initial position // Reset to initial position
element.style.setProperty("transform", "translate(0, 0)"); [...wrapper.querySelectorAll("p")].forEach(element => element.style.setProperty("transform", "translate(0, 0)"));
});
}; };
// Bind triggers for interests explosion and implotion // Bind triggers for interests explosion and implotion
@ -55,10 +62,7 @@ const implodeInterests = () => {
// Get absolute position of the trigger element // Get absolute position of the trigger element
const size = interestsElement.getBoundingClientRect(); const size = interestsElement.getBoundingClientRect();
const x = size.x - 80; explodeInterests(size.x, size.y);
const y = size.y - 10;
explodeInterests(x, y);
}); });
interestsElement.addEventListener(canHover ? "mouseleave" : "touchend", () => implodeInterests()); interestsElement.addEventListener(canHover ? "mouseleave" : "touchend", () => implodeInterests());

View file

@ -106,15 +106,3 @@ if (window.matchMedia("(hover: hover)")) {
// Reset color on navigation // Reset color on navigation
document.querySelector(vv._env.MAIN).addEventListener(vv.Navigation.events.LOADED, () => updateColor(), { once: true }); document.querySelector(vv._env.MAIN).addEventListener(vv.Navigation.events.LOADED, () => updateColor(), { once: true });
} }
// Open search box from mobile fullscreen menu
{
// Open search dialog when searchbox is clicked
document.querySelector("menu searchbox").addEventListener("click", () => {
// Search box dialog element
document.querySelector("dialog.search").showModal();
// Close fullscreen menu
document.querySelector("menu").classList.remove("active");
});
}