[Fixed] Project styling for small devices

This commit is contained in:
Ninjaws
2024-11-23 15:24:03 +01:00
parent 48aee89bd1
commit 4972c12484
5 changed files with 50 additions and 54 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
<header class="bg-gray-800 text-white py-6 relative z-50"> <header class="bg-gray-800 text-white py-6 relative z-50">
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<div class="text-2xl font-bold">Ian Vink</div> <div class="text-2xl font-bold">Vink Development</div>
<div class="flex items-center"> <div class="flex items-center">
<nav class="hidden md:flex space-x-6"> <nav class="hidden md:flex space-x-6">
<a *ngFor="let menuItem of menuItems" href="{{menuItem.href}}" class="hover:text-gray-400">{{menuItem.name}}</a> <a *ngFor="let menuItem of menuItems" href="{{menuItem.href}}" class="hover:text-gray-400">{{menuItem.name}}</a>
+37 -3
View File
@@ -1,4 +1,39 @@
<section id="projects" class="py-16 bg-gray-800 text-white"> <section id="projects" class="py-16 bg-gray-800 text-white flex justify-center">
<div class="container mx-none px-2 md:px-4 lg:px-6">
<h2 class="text-4xl font-semibold text-center mb-12 fade-in-left winged-14">Projects</h2>
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4 lg:gap-6">
<div *ngFor="let project of projects"
class="backface-hidden rounded-sm overflow-hidden shadow-lg hover:scale-105 transition-all
duration-300 group relative fade-in-up bg-white/5 border-none ">
<!-- no backdrop-blur, that causes the text to go blurry as well -->
<img src="{{project.image}}" alt="{{project.title}}" class="w-full max-h-56 aspect-[3/2] object-cover">
<div class="p-2 xs:p-3 xl:px-6">
<div class="flex flex-wrap mb-2 xs:mb-4 items-center">
<!-- justify-center -->
<h3 class="text-xl sm:text-2xl font-semibold text-teal-400 flex-grow">{{project.title}}</h3>
<!-- font-semibold -->
<p class="pl-2 ml-auto w-auto text-right text-sm xs:text-base text-gray-400">{{project.year}}</p>
</div>
<p class="text-gray-300 mb-4 whitespace-pre-line">{{project.description}}</p>
<div class="flex flex-wrap gap-1">
<span *ngFor="let technology of project.technologies"
class="bg-gray-800 text-white text-sm sm:text-md px-1 sm:px-2 py-1 rounded-md">{{technology}}</span>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- <section id="projects" class="py-16 bg-gray-800 text-white">
<div class="container mx-auto px-6"> <div class="container mx-auto px-6">
<h2 class="text-4xl font-semibold text-center mb-12 fade-in-left winged-14">Projects</h2> <h2 class="text-4xl font-semibold text-center mb-12 fade-in-left winged-14">Projects</h2>
@@ -6,7 +41,6 @@
<div *ngFor="let project of projects" <div *ngFor="let project of projects"
class="backface-hidden rounded-md overflow-hidden shadow-lg hover:scale-105 transition-all class="backface-hidden rounded-md overflow-hidden shadow-lg hover:scale-105 transition-all
duration-300 group relative fade-in-up bg-white/5 border-none "> duration-300 group relative fade-in-up bg-white/5 border-none ">
<!-- no backdrop-blur, that causes the text to go blurry -->
<img src="{{project.image}}" alt="{{project.title}}" class="w-full h-56 object-cover"> <img src="{{project.image}}" alt="{{project.title}}" class="w-full h-56 object-cover">
<div class="p-6"> <div class="p-6">
<div class="flex justify-between"> <div class="flex justify-between">
@@ -22,4 +56,4 @@
</div> </div>
</div> </div>
</div> </div>
</section> </section> -->
+6 -5
View File
@@ -20,7 +20,7 @@ export class ProjectsComponent {
constructor() { constructor() {
this.projects.push({ this.projects.push({
title: 'Continuously learning Supplier-identification module', title: 'AI supplier identification',
year: '2021', year: '2021',
description: description:
'An application that combines key-value detection and multiclass-classification, to identify the correct supplier for an invoice. It uses online machine learning to keep improving itself as the user provides feedback.', 'An application that combines key-value detection and multiclass-classification, to identify the correct supplier for an invoice. It uses online machine learning to keep improving itself as the user provides feedback.',
@@ -42,7 +42,7 @@ export class ProjectsComponent {
technologies: ['Unigine (C#)', 'AGC Dynamics (C++)', 'Qt Creator'], technologies: ['Unigine (C#)', 'AGC Dynamics (C++)', 'Qt Creator'],
}); });
this.projects.push({ this.projects.push({
title: 'Goal-based vector field pathfinding algorithm', title: 'Flow Field pathfinding algorithm',
year: '2018', year: '2018',
description: description:
'The application uses a vector field to direct particles towards a target. The vectors are calculated using a heatmap, which centers on the position of the target. \nThe particles collide with the environment, which can be edited and saved/loaded using the GUI.', 'The application uses a vector field to direct particles towards a target. The vectors are calculated using a heatmap, which centers on the position of the target. \nThe particles collide with the environment, which can be edited and saved/loaded using the GUI.',
@@ -58,7 +58,7 @@ export class ProjectsComponent {
technologies: ['C++', 'SFML2.0', 'Platformer', 'Visual Studio'], technologies: ['C++', 'SFML2.0', 'Platformer', 'Visual Studio'],
}); });
this.projects.push({ this.projects.push({
title: 'Microcontroller Tetris (group project)', title: 'Microcontroller Tetris',
year: '2019', year: '2019',
description: description:
'Tetris written in C, visualized on dot-matrix displays, with the score visible on a 7-segment display and a menu system visible on the ATMega128.', 'Tetris written in C, visualized on dot-matrix displays, with the score visible on a 7-segment display and a menu system visible on the ATMega128.',
@@ -68,15 +68,16 @@ export class ProjectsComponent {
'ATmega128', 'ATmega128',
'7-segment display', '7-segment display',
'Dot-matrix displays', 'Dot-matrix displays',
'Group project'
], ],
}); });
this.projects.push({ this.projects.push({
title: 'Augmented Reality game (group project)', title: 'Augmented Reality game',
year: '2019', year: '2019',
description: description:
'The game uses computer vision to track a red ball, which serves as the controller. A system has been created for the rigging and animations for the player character and the opponents. The math for OpenGL is written by hand.', 'The game uses computer vision to track a red ball, which serves as the controller. A system has been created for the rigging and animations for the player character and the opponents. The math for OpenGL is written by hand.',
image: 'AR Game.png', image: 'AR Game.png',
technologies: ['C++', 'OpenCV', 'OpenGL', 'IrrKlang'], technologies: ['C++', 'OpenCV', 'OpenGL', 'IrrKlang', 'Group project'],
}); });
} }
} }
-14
View File
@@ -6,20 +6,6 @@ html {
scroll-behavior: smooth; scroll-behavior: smooth;
} }
/** Orange wings shown on each h2 element */
.teste:before, .teste:after {
content: "";
width: 4rem;
height: 2px;
background: #ea5f00;
position: absolute;
top: 50%;
left: 0;
right: 0;
margin-left: auto;
margin-right: auto;
transform: translateY(-50%);
}
@keyframes fadeInUp { @keyframes fadeInUp {
0% { 0% {
+5 -30
View File
@@ -13,35 +13,6 @@ const backfaceVisibility = plugin(function ({ addUtilities }) {
}); });
}); });
// const winged = plugin(function({addUtilities}) {
// addUtilities({
// '.winged': {
// 'position': 'relative',
// '&::before, &::after': {
// content: '""',
// width: '4rem',
// height: '2px',
// background: '#ea5f00',
// // color: 'white',
// // backgroundColor: 'white',
// position: 'absolute',
// top: '50%',
// left: 0,
// right: 0,
// margin: '0 auto',
// transform: 'translateY(-50%)'
// },
// '&::before': {
// // left: '-2.5rem'
// },
// '&::after': {
// // left: '2.5rem'
// }
// }
// })
// });
const winged = plugin(function({ addUtilities }) { const winged = plugin(function({ addUtilities }) {
const createWingedClass = (position) => { const createWingedClass = (position) => {
return { return {
@@ -76,7 +47,11 @@ const winged = plugin(function({ addUtilities }) {
module.exports = { module.exports = {
content: ["./src/**/*.{html,ts}"], content: ["./src/**/*.{html,ts}"],
theme: { theme: {
extend: {}, extend: {
screens: {
xs: '375px'
}
},
}, },
plugins: [winged, backfaceVisibility], plugins: [winged, backfaceVisibility],
}; };