384 lines
8.4 KiB
HTML
384 lines
8.4 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||
<link rel="stylesheet" href="/style/style.css" />
|
||
<style>
|
||
a {
|
||
text-decoration: none;
|
||
color: white;
|
||
}
|
||
|
||
a:hover {
|
||
color: white;
|
||
text-decoration: underline;
|
||
}
|
||
|
||
p {
|
||
margin: 0;
|
||
}
|
||
|
||
.app-name {
|
||
font-family: "Source Sans Pro", sans-serif;
|
||
font-size: 36px;
|
||
}
|
||
|
||
body {
|
||
margin-top: 48px;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
}
|
||
|
||
#logo:hover {
|
||
transition-property: transform;
|
||
transition-duration: 150ms;
|
||
}
|
||
|
||
#logo {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 8px;
|
||
border: 1px solid white;
|
||
padding: 24px 48px;
|
||
gap: 24px;
|
||
|
||
transition-property: transform;
|
||
transition-duration: 800ms;
|
||
}
|
||
|
||
#logo-container {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
grid-area: main;
|
||
}
|
||
|
||
#pan-container {
|
||
padding: 20px;
|
||
}
|
||
|
||
.brand-name {
|
||
font-family: "Source Code Pro", monospace;
|
||
font-size: 64px;
|
||
width: 100%;
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: space-between;
|
||
}
|
||
|
||
.reverse {
|
||
transform: scaleX(-1);
|
||
}
|
||
|
||
.container {
|
||
width: 1280px;
|
||
display: grid;
|
||
grid-template-columns: 256px 1fr 256px;
|
||
grid-template-rows: 290px 290px 290px;
|
||
gap: 24px 0px;
|
||
grid-auto-flow: row;
|
||
grid-template-areas:
|
||
"app1 main app2"
|
||
". main app3"
|
||
". main .";
|
||
}
|
||
|
||
.app {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border: 1px solid white;
|
||
gap: 24px;
|
||
height: 290px;
|
||
transition-property: opacity;
|
||
transition-duration: 500ms;
|
||
opacity: 0.3;
|
||
}
|
||
|
||
.app-disabled {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border: 1px solid white;
|
||
gap: 24px;
|
||
height: 290px;
|
||
transition-property: opacity;
|
||
transition-duration: 500ms;
|
||
opacity: 0.3;
|
||
}
|
||
|
||
.app:hover {
|
||
body {
|
||
margin-top: 48px;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
}
|
||
|
||
transition-property: opacity;
|
||
transition-duration: 500ms;
|
||
opacity: 0.8;
|
||
}
|
||
|
||
.app1 {
|
||
grid-area: app1;
|
||
padding: 20px 0;
|
||
}
|
||
|
||
.app2 {
|
||
grid-area: app2;
|
||
padding: 20px 0;
|
||
}
|
||
|
||
.app3 {
|
||
grid-area: app3;
|
||
padding: 20px 0;
|
||
}
|
||
|
||
@media (max-width: 1300px) {
|
||
.app-name {
|
||
font-family: "Source Sans Pro", sans-serif;
|
||
font-size: 20px;
|
||
}
|
||
|
||
body {
|
||
margin-top: 24px;
|
||
margin-bottom: 48px;
|
||
}
|
||
|
||
#logo {
|
||
padding: 12px 24px;
|
||
gap: 12px;
|
||
}
|
||
|
||
#pan-container {
|
||
padding: 0px;
|
||
}
|
||
|
||
.brand-name {
|
||
font-family: "Source Code Pro", monospace;
|
||
font-size: 24px;
|
||
}
|
||
|
||
#logo-image {
|
||
height: 240px;
|
||
width: 240px;
|
||
}
|
||
|
||
.container {
|
||
width: 290px;
|
||
display: grid;
|
||
grid-template-columns: 141px 141px;
|
||
grid-template-rows: 352px 160px 160px;
|
||
gap: 8px 8px;
|
||
grid-auto-flow: row;
|
||
grid-template-areas:
|
||
"main main"
|
||
"app1 app2"
|
||
"app3 .";
|
||
justify-content: space-between;
|
||
}
|
||
|
||
.app-image {
|
||
width: 64px;
|
||
height: 64px;
|
||
}
|
||
|
||
.app {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border: 1px solid white;
|
||
gap: 12px;
|
||
height: 160px;
|
||
transition-property: opacity;
|
||
transition-duration: 500ms;
|
||
opacity: 0.8;
|
||
}
|
||
|
||
.app-disabled {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border: 1px solid white;
|
||
gap: 24px;
|
||
height: 160px;
|
||
transition-property: opacity;
|
||
transition-duration: 500ms;
|
||
opacity: 0.3;
|
||
}
|
||
|
||
.app:hover {
|
||
transition-property: opacity;
|
||
transition-duration: 500ms;
|
||
opacity: 0.8;
|
||
}
|
||
|
||
.app1 {
|
||
grid-area: app1;
|
||
padding: 0 0;
|
||
}
|
||
|
||
.app2 {
|
||
grid-area: app2;
|
||
padding: 0 0;
|
||
}
|
||
|
||
.app3 {
|
||
grid-area: app3;
|
||
padding: 0 0;
|
||
}
|
||
}
|
||
|
||
@media (prefers-color-scheme: light) {
|
||
#logo {
|
||
border: 1px solid black;
|
||
}
|
||
|
||
.app {
|
||
border: 1px solid black;
|
||
}
|
||
|
||
.app-disabled {
|
||
border: 1px solid black;
|
||
}
|
||
|
||
a {
|
||
text-decoration: none;
|
||
color: black;
|
||
}
|
||
|
||
a:hover {
|
||
color: black;
|
||
text-decoration: underline;
|
||
}
|
||
}
|
||
</style>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Vite + TS</title>
|
||
</head>
|
||
<body>
|
||
<div class="container">
|
||
<div class="app1">
|
||
<a href="https://blog.log101.dev">
|
||
<div class="app">
|
||
<img
|
||
src="/ikon.png"
|
||
height="128px"
|
||
width="128px"
|
||
class="app-image"
|
||
/>
|
||
<p class="app-name">Blog</p>
|
||
</div>
|
||
</a>
|
||
</div>
|
||
<div class="app2">
|
||
<a href="https://konulukonum.log101.dev">
|
||
<div class="app">
|
||
<img
|
||
src="/konulu-konum-logo.jpg"
|
||
height="128px"
|
||
width="128px"
|
||
class="app-image"
|
||
/>
|
||
<p class="app-name">Konulu<br />Konum</p>
|
||
</div>
|
||
</a>
|
||
</div>
|
||
<div class="app3">
|
||
<div class="app-disabled">
|
||
<p class="app-name">Yakında...</p>
|
||
</div>
|
||
</div>
|
||
<div id="logo-container">
|
||
<div id="pan-container">
|
||
<div id="logo">
|
||
<div id="brand-reversed" class="brand-name reverse">
|
||
<p>A</p>
|
||
<p>C</p>
|
||
<p>A</p>
|
||
<p>Y</p>
|
||
<p>İ</p>
|
||
<p>P</p>
|
||
</div>
|
||
<img
|
||
width="624"
|
||
height="624"
|
||
src="/acayip-logo.png"
|
||
id="logo-image"
|
||
/>
|
||
<div id="brand" class="brand-name">
|
||
<p>A</p>
|
||
<p>C</p>
|
||
<p>A</p>
|
||
<p>Y</p>
|
||
<p>İ</p>
|
||
<p>P</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<script>
|
||
let constrain = 800;
|
||
let panContainer = document.getElementById("pan-container");
|
||
let ex1Layer = document.getElementById("logo");
|
||
|
||
function transforms(x, y, el) {
|
||
let box = el.getBoundingClientRect();
|
||
let calcX = -(y - box.y - box.height / 2) / constrain;
|
||
let calcY = (x - box.x - box.width / 2) / constrain;
|
||
|
||
return (
|
||
"perspective(200px) " +
|
||
" rotateX(" +
|
||
calcX +
|
||
"deg) " +
|
||
" rotateY(" +
|
||
calcY +
|
||
"deg) "
|
||
);
|
||
}
|
||
|
||
function resetTransform(x, y, el) {
|
||
return (
|
||
"perspective(100px) " + " rotateX(0deg) " + " rotateY(0deg) "
|
||
);
|
||
}
|
||
|
||
function transformElement(el, xyEl) {
|
||
el.style.transform = transforms.apply(null, xyEl);
|
||
}
|
||
|
||
function resetElement(el, xyEl) {
|
||
el.style.transform = resetTransform.apply(null, xyEl);
|
||
}
|
||
|
||
panContainer.onmousemove = function (e) {
|
||
let xy = [e.clientX, e.clientY];
|
||
let position = xy.concat([ex1Layer]);
|
||
|
||
window.requestAnimationFrame(function () {
|
||
transformElement(ex1Layer, position);
|
||
});
|
||
};
|
||
|
||
panContainer.onmouseleave = function (e) {
|
||
let xy = [0, 0];
|
||
let position = xy.concat([ex1Layer]);
|
||
|
||
window.requestAnimationFrame(function () {
|
||
resetElement(ex1Layer, position);
|
||
});
|
||
};
|
||
</script>
|
||
</body>
|
||
</html>
|