v1.0 of a first draft

This commit is contained in:
Florian Sylvain
2022-02-04 20:59:31 +01:00
parent 204220be58
commit 531d04a4c7
5 changed files with 392 additions and 64 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

+110 -39
View File
@@ -18,6 +18,7 @@
<a href="#education">Education</a> <a href="#education">Education</a>
<a href="#experience">Experience</a> <a href="#experience">Experience</a>
<a href="#projects">Projects</a> <a href="#projects">Projects</a>
<a href="#hobbies">Hobbies</a>
<a href="#contact">Contact</a> <a href="#contact">Contact</a>
</nav> </nav>
@@ -92,81 +93,151 @@
<h2>Projects</h2> <h2>Projects</h2>
<div class="projects-list"> <div class="projects-list">
<div> <div>
<article id="pong2D" class="to-slide"> <article class="pong2D to-slide">
<div class="plus-button"> <div class="plus-button">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 10h-10v-10h-4v10h-10v4h10v10h4v-10h10z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 10h-10v-10h-4v10h-10v4h10v10h4v-10h10z"/></svg>
</div> </div>
<div class="article-content"> </article>
</div>
<div>
<article class="pong3D to-slide">
<div class="plus-button">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 10h-10v-10h-4v10h-10v4h10v10h4v-10h10z"/></svg>
</div>
</article>
</div>
<div>
<article class="risitasBot to-slide">
<div class="plus-button">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 10h-10v-10h-4v10h-10v4h10v10h4v-10h10z"/></svg>
</div>
</article>
</div>
<div>
<article class="riverwood to-slide">
<div class="plus-button">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 10h-10v-10h-4v10h-10v4h10v10h4v-10h10z"/></svg>
</div>
</article>
</div>
<div>
<article class="thesesFr to-slide">
<div class="plus-button">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 10h-10v-10h-4v10h-10v4h10v10h4v-10h10z"/></svg>
</div>
</article>
</div>
</div>
</div>
<span class="background-hider bgh-off" onclick="javascript:switchArticle(null)"></span>
<!-- ---------- Articles contents ---------- -->
<div id="pong2D" class="article-content ">
<img src="assets/imgs/Pong2D.gif">
<h3>Pong2D</h3>
<p> <p>
My first project in Python (with Pygame). It's a simple pong, with a main menu, a pause menu and a game over. My first project in Python (with Pygame). It's a simple pong, with a main menu, a pause menu and a game over.
</p> </p>
</div> <a target="_blank" href="https://github.com/Floriansylvain/Pong">
</article> Go to GitHub Project
</a>
<a onclick="javascript:switchArticle(null)">Close</a>
</div> </div>
<div> <div id="pong3D" class="article-content">
<article id="pong3D" class="to-slide"> <img src="assets/imgs/Pong3D.gif">
<div class="plus-button"> <h3>Pong3D</h3>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 10h-10v-10h-4v10h-10v4h10v10h4v-10h10z"/></svg>
</div>
<div class="article-content">
<p> <p>
My very first project on Unity. It's a simple pong with some effects and a rather calm atmosphere. My very first project on Unity. It's a simple pong with some effects and a rather calm atmosphere.
</p> </p>
<a target="_blank" href="https://github.com/Floriansylvain/Pong3D">
Go to GitHub Project
</a>
<a target="_blank" href="https://floriansylvain.fr/Pong3D/index.html">
Play
</a>
<a onclick="javascript:switchArticle(null)">Close</a>
</div> </div>
</div>
</article>
<div> <div id="risitasBot" class="article-content">
<article id="risitasBot" class="to-slide"> <img src="assets/imgs/RisitasBot.gif">
<div class="plus-button"> <h3>Risitas Bot</h3>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 10h-10v-10h-4v10h-10v4h10v10h4v-10h10z"/></svg>
</div>
<div class="article-content">
<p> <p>
Risitas_Bot is a Discord bot that can connect your Twitch chat to a Discord channel in real time, make your friends laugh by playing the meme "Issou!" on command in a voice channel and even give you some statistics about your Osu! account and last ranked games. Risitas_Bot is a Discord bot that can connect your Twitch chat to a Discord channel in real time, make your friends laugh by playing the meme "Issou!" on command in a voice channel and even give you some statistics about your Osu! account and last ranked games.
</p> </p>
</div> <a target="_blank" href="https://github.com/Floriansylvain/Risitas_Bot">
</article> Go to GitHub Project
</a>
<a onclick="javascript:switchArticle(null)">Close</a>
</div> </div>
<div> <div id="riverwood" class="article-content">
<article id="riverwood" class="to-slide"> <img src="assets/imgs/Riverwood.gif">
<div class="plus-button"> <h3>Riverwood</h3>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 10h-10v-10h-4v10h-10v4h10v10h4v-10h10z"/></svg>
</div>
<div class="article-content">
<p> <p>
Work of students of DUT info 1 (IUT of Marne-la-Vallée). The students had to create a sound production inspired by the short film "Calls" by Timothée Hochet. Work of students of DUT info 1 (IUT of Marne-la-Vallée). The students had to create a sound production inspired by the short film "Calls" by Timothée Hochet.
</p> </p>
</div> <a target="_blank" href="https://www.youtube.com/watch?v=TGBN_lxMbSM">
</article> Watch on YouTube
</a>
<a onclick="javascript:switchArticle(null)">Close</a>
</div> </div>
<div> <div id="thesesFr" class="article-content">
<article id="thesesFr" class="to-slide"> <img src="assets/imgs/ThesesFr.gif">
<div class="plus-button"> <h3>thèses.fr</h3>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 10h-10v-10h-4v10h-10v4h10v10h4v-10h10z"/></svg>
</div>
<div class="article-content">
<p> <p>
The goal was to retrieve the dataset provided by theses.fr, to normalize it, and to create a site allowing to consult these data, first in the form of a simple but visually pleasant list, then in a second time to summarize the research in the form of graphics (and a map). The goal was to retrieve the dataset provided by theses.fr, to normalize it, and to create a site allowing to consult these data, first in the form of a simple but visually pleasant list, then in a second time to summarize the research in the form of graphics (and a map).
</p> </p>
</div> <a target="_blank" href="https://projet.floriansylvain.fr/ProjetProgWeb/">
</article> Visit WebSite
</a>
<a onclick="javascript:switchArticle(null)">Close</a>
</div> </div>
</div> <!-- --------- END Articles contents --------- -->
<div class="to-fade" id="hobbies">
<h2>Hobbies</h2>
<p>🚧 Work in progress 🚧</p>
</div> </div>
<div class="to-fade" id="contact"> <div class="to-fade" id="contact">
<h2>Contact</h2> <h2>Contact</h2>
<p>todo</p> <p>
You can contact me by email at <a href="mailto:floriansylvainpro@gmail.com">floriansylvainpro@gmail.com</a> or by phone at <a href="tel:0695208226">(+33) 06 95 20 82 26</a>.
</p>
</div> </div>
<div style="height: 100vh;"></div> </div>
<a href="#landing">
<div id="scrollToTop" class="scroll-to-top">
<svg class="scroll-to-top" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path class="scroll-to-top" d="M23.677 18.52c.914 1.523-.183 3.472-1.967 3.472h-19.414c-1.784 0-2.881-1.949-1.967-3.472l9.709-16.18c.891-1.483 3.041-1.48 3.93 0l9.709 16.18z"/>
</svg>
</div> </div>
</a>
<footer>
<a target="_blank" href="https://www.linkedin.com/in/florian-sylvain-0651021a9">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"/></svg>
</a>
<a target="_blank" href="https://github.com/Floriansylvain">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
</a>
</footer>
<script type="text/javascript" src="script.js"></script> <script type="text/javascript" src="script.js"></script>
+62 -1
View File
@@ -1,10 +1,22 @@
/*jslint browser maxlen:80 */ /*jslint browser maxlen:80 */
/*global window */ /*global window */
const LARGE = 992;
const mainTitle = document.querySelector('.main-title'); const mainTitle = document.querySelector('.main-title');
const navBar = document.querySelector('body > header');
const navBarElems = document.querySelector('body > header > nav'); const navBarElems = document.querySelector('body > header > nav');
const scrollToTop = document.querySelector('#scrollToTop');
const contentElems = document.querySelectorAll('#content > div, .main-title'); const contentElems = document.querySelectorAll('#content > div, .main-title');
const backgroundHider = document.querySelector('.background-hider');
const projectsContentList = document.querySelectorAll('.article-content');
const projectsIDs = Array.from(projectsContentList)
.map((project) => project.id);
let lastScrollTop = window.pageYOffset;
function toAddClass(toClass, inClass) { function toAddClass(toClass, inClass) {
"use strict"; "use strict";
@@ -63,12 +75,52 @@ function updateUrl() {
} }
}); });
if (elements[index] && !window.location.href.includes(elements[index].id)) { if (elements[index] &&
!projectsIDs.includes(elements[index].id) &&
!window.location.href.includes(elements[index].id)) {
const hash = 'index.html#' + elements[index].id; const hash = 'index.html#' + elements[index].id;
window.history.replaceState(null, null, hash); window.history.replaceState(null, null, hash);
} }
} }
function switchArticle(article) {
"use strict";
if (backgroundHider.classList.contains('bgh-off')) {
backgroundHider.classList.remove('bgh-off');
} else {
backgroundHider.classList.add('bgh-off');
}
if (article !== null) {
article.style.display = 'flex';
} else {
projectsContentList.forEach(function (art) {
art.style.display = 'none';
});
}
}
function updateScrollDirectionElems() {
"user strict";
const scrollTop = window.pageYOffset;
let opacity = "100%";
let visibility = "visible";
if (scrollTop > lastScrollTop && window.innerWidth >= LARGE) {
opacity = "50%";
}
if (scrollTop < 100) {
visibility = "hidden";
}
navBar.style.opacity = opacity;
scrollToTop.style.visibility = visibility;
lastScrollTop = scrollTop;
}
function scrollHandler() { function scrollHandler() {
"use strict"; "use strict";
@@ -76,6 +128,8 @@ function scrollHandler() {
toAddClass('.to-grow', 'grow-in'); toAddClass('.to-grow', 'grow-in');
toAddClass('.to-slide', 'slide-in'); toAddClass('.to-slide', 'slide-in');
updateScrollDirectionElems();
updateTitle(); updateTitle();
updateUrl(); updateUrl();
@@ -104,3 +158,10 @@ document.querySelectorAll('nav a').forEach(function (a) {
"use strict"; "use strict";
a.onclick = switchNavBar; a.onclick = switchNavBar;
}); });
document.querySelectorAll('.projects-list article').forEach(function (a) {
"use strict";
a.onclick = function () {
switchArticle(document.getElementById(a.classList[0]));
};
});
+220 -24
View File
@@ -31,8 +31,9 @@ header {
width: 100%; width: 100%;
padding: 10px 10px 10px 110px; padding: 10px 10px 10px 110px;
background-color: #253622; background-color: #253622;
box-shadow: #0003 0 0 10px;
transform: translateY(-100%); transform: translateY(-100%);
transition: transform 200ms ease-in-out, gap 200ms ease-in-out; transition: transform 200ms ease-in-out, gap 200ms ease-in-out, opacity 200ms;
} }
nav { nav {
@@ -58,7 +59,7 @@ nav a {
opacity: 0; opacity: 0;
transform: translateX(-100%); transform: translateX(-100%);
transition: transform 600ms, opacity 600ms, letter-spacing 200ms; transition: transform 700ms, opacity 700ms;
} }
nav a::after { nav a::after {
@@ -81,16 +82,44 @@ nav a:hover::after {
} }
nav a:nth-child(0n+2) { nav a:nth-child(0n+2) {
transition: transform 500ms, opacity 500ms, letter-spacing 200ms; transition: transform 600ms, opacity 600ms;
} }
nav a:nth-child(0n+3) { nav a:nth-child(0n+3) {
transition: transform 400ms, opacity 400ms, letter-spacing 200ms; transition: transform 500ms, opacity 500ms;
} }
nav a:nth-child(0n+4) { nav a:nth-child(0n+4) {
transition: transform 300ms, opacity 300ms, letter-spacing 200ms; transition: transform 400ms, opacity 400ms;
} }
nav a:nth-child(0n+5) { nav a:nth-child(0n+5) {
transition: transform 200ms, opacity 200ms, letter-spacing 200ms; transition: transform 300ms, opacity 300ms;
}
nav a:nth-child(0n+6) {
transition: transform 200ms, opacity 200ms;
}
footer {
position: relative;
z-index: 10;
display: flex;
justify-content: center;
align-items: center;
padding: 25px;
gap: 25px;
bottom: 0;
width: 100%;
height: 75px;
background: #253622;
}
footer svg {
width: 25px;
height: 25px;
fill: #121212;
transition: fill 200ms;
}
footer svg:hover {
fill: #3AC414;
} }
h2 { h2 {
@@ -99,7 +128,7 @@ h2 {
border-bottom: 2px solid #121212; border-bottom: 2px solid #121212;
} }
h2:first-letter { h2:first-letter, .article-content h3:first-letter {
color: #3AC414; color: #3AC414;
font-variation-settings: 'wght' 600; font-variation-settings: 'wght' 600;
} }
@@ -261,7 +290,9 @@ header:hover {
#education > div, #experience > div { #education > div, #experience > div {
transform: translateX(-150%); transform: translateX(-150%);
transition: transform 200ms; transition: transform 200ms;
margin-bottom: 50px; margin: 0 auto 50px auto;
width: 100%;
max-width: 900px;
} }
#education h3, #experience h3 { #education h3, #experience h3 {
@@ -290,7 +321,7 @@ header:hover {
margin-bottom: 0; margin-bottom: 0;
} }
#education p + p { #education p + p, #experience p + p {
font-size: smaller; font-size: smaller;
} }
@@ -395,47 +426,116 @@ header:hover {
transition: opacity 200ms; transition: opacity 200ms;
} }
.background-hider {
position: fixed;
z-index: 4;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: #0005;
transition: z-index 200ms, background 200ms;
}
.bgh-off {
z-index: -1;
background: #0000;
}
.article-content { .article-content {
position: fixed;
z-index: 5;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: Calc(100vw - 25px);
max-width: 80%;
max-height: Calc(100vh - 150px);
overflow-y: scroll;
padding: 10% !important;
color: #121212;
background: #fff !important;
box-shadow: #12121233 0 0 25px;
border-radius: 0.5em;
display: none; display: none;
flex-direction: column;
} }
#pong2D { .article-content p {
background: center / contain no-repeat url('assets/imgs/Pong2D.png'), center / cover url('assets/imgs/Pong2D_blur.png'); margin-top: 0;
} }
#pong2D:hover { .article-content img {
margin: auto;
max-width: 80%;
}
.article-content a {
color: #121212;
letter-spacing: 2px;
transition: color 200ms;
margin: 5px 0 5px 0;
cursor: pointer;
}
.article-content h3 {
font-variation-settings: "wght" 600;
}
.article-content a:hover {
color: #3AC414;
}
.pong2D {
background: center / contain no-repeat url('assets/imgs/Pong2D.png'),
center / cover url('assets/imgs/Pong2D_blur.png');
}
.pong2D:hover {
background: center / cover no-repeat url('assets/imgs/Pong2D.gif'); background: center / cover no-repeat url('assets/imgs/Pong2D.gif');
} }
#pong3D { .pong3D {
background: center / contain no-repeat url('assets/imgs/Pong3D.png'), center / cover url('assets/imgs/Pong3D_blur.png'); background: center / contain no-repeat url('assets/imgs/Pong3D.png'),
center / cover url('assets/imgs/Pong3D_blur.png');
} }
#pong3D:hover { .pong3D:hover {
background: center / cover no-repeat url('assets/imgs/Pong3D.gif'); background: center / cover no-repeat url('assets/imgs/Pong3D.gif');
} }
#risitasBot { .risitasBot {
background: center / contain no-repeat url('assets/imgs/RisitasBot.png'), center / cover url('assets/imgs/RisitasBot_blur.png'); background: center / contain no-repeat url('assets/imgs/RisitasBot.png'),
center / cover url('assets/imgs/RisitasBot_blur.png');
} }
#risitasBot:hover { .risitasBot:hover {
background: center / cover no-repeat url('assets/imgs/RisitasBot.gif'); background: center / cover no-repeat url('assets/imgs/RisitasBot.gif');
} }
#riverwood { .riverwood {
background: center / contain no-repeat url('assets/imgs/Riverwood.png'), center / cover url('assets/imgs/Riverwood_blur.png'); background: center / contain no-repeat url('assets/imgs/Riverwood.png'),
center / cover url('assets/imgs/Riverwood_blur.png');
} }
#riverwood:hover { .riverwood:hover {
background: center / cover no-repeat url('assets/imgs/Riverwood.gif'); background: center / cover no-repeat url('assets/imgs/Riverwood.gif');
} }
#thesesFr { .thesesFr {
background: center / contain no-repeat url('assets/imgs/ThesesFr.png'), center / cover url('assets/imgs/ThesesFr_blur.png'); background: center / contain no-repeat url('assets/imgs/ThesesFr.png'),
center / cover url('assets/imgs/ThesesFr_blur.png');
} }
#thesesFr:hover { .thesesFr:hover {
background: center / cover no-repeat url('assets/imgs/ThesesFr.gif'); background: center / cover no-repeat url('assets/imgs/ThesesFr.gif');
} }
@@ -447,3 +547,99 @@ header:hover {
font-size: smaller; font-size: smaller;
font-variation-settings: 'wght' 300; font-variation-settings: 'wght' 300;
} }
#contact p {
margin: 50px auto;
width: 100%;
max-width: 900px;
}
#contact a {
color: #CAEBC0;
font-variation-settings: 'wght' 600;
}
#scrollToTop {
display: flex;
position: fixed;
z-index: 20;
padding: 20px;
box-shadow: #0003 0 0 10px;
background: #3AC414;
border-radius: 50%;
height: 60px;
width: 60px;
fill: white;
bottom: 25px;
left: 25px;
cursor: pointer;
transition: background-color 200ms, transform 200ms;
opacity: 80%;
backdrop-filter: blur(2px);
}
#scrollToTop:hover {
opacity: 100%;
transform: scale(1.05);
}
/* Large */
@media (min-width: 992px) {
#content > div {
padding: 50px 20%;
}
.article-content {
padding: 50px !important;
}
#about img {
width: 225px;
height: 225px;
}
.block {
max-width: 900px;
margin: 50px auto;
flex-direction: row;
}
.block > p {
margin: 25px 50px;
padding: 0;
font-size: larger;
}
header {
transform: none;
padding: 10px;
}
header:hover {
opacity: 100% !important;
transform: none;
}
.hamburger {
display: none;
}
nav {
width: 100%;
gap: 25px;
flex-direction: row;
justify-content: center;
align-items: center;
font-size: 1.2em;
}
nav a {
opacity: 100%;
transform: none;
}
nav a:hover {
opacity: 100%;
transform: none;
}
}