base de l'intranet
BIN
Assets/Icones/APEIMBGE.jpg
Normal file
|
After Width: | Height: | Size: 149 KiB |
BIN
Assets/Logos/3cx.jpg
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
Assets/Logos/3cx.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
Assets/Logos/avs.png
Normal file
|
After Width: | Height: | Size: 5 KiB |
BIN
Assets/Logos/google.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
Assets/Logos/netvie.jpg
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
Assets/Logos/orange.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
Assets/Logos/outlook.jpg
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Assets/Logos/teams.png
Normal file
|
After Width: | Height: | Size: 162 KiB |
BIN
Assets/Logos/undefined.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
125
Assets/functions.php
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
<?php
|
||||
function getRaccourcis($bdd){
|
||||
$results = mysqli_query($bdd, "SELECT * FROM `raccourcis`");
|
||||
$return = [];
|
||||
return $results;
|
||||
}
|
||||
|
||||
function connectBDD($domain, $user, $password, $db){
|
||||
$link = mysqli_connect($domain, $user, $password, $db);
|
||||
|
||||
if (!$link) {
|
||||
die('Erreur de connexion');
|
||||
} else {
|
||||
mysqli_set_charset($link, "utf8");
|
||||
|
||||
return $link;
|
||||
}
|
||||
}
|
||||
|
||||
function getActus($bdd){
|
||||
$results = mysqli_query($bdd, "SELECT * FROM `actus` ORDER BY `id` LIMIT 4");
|
||||
$return = [];
|
||||
return $results;
|
||||
}
|
||||
|
||||
function validateCSRFToken($csrf_server, $csrf_client) {
|
||||
if (!hash_equals($csrf_server, $csrf_client)) {
|
||||
echo($csrf_client. " " . $csrf_server);
|
||||
die('CSRF token validation failed');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function verifyPassword($hash_password, $tryPassword){
|
||||
$hashTry = hash('sha256', $tryPassword);
|
||||
if($hash_password == $hashTry){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function getHashPwd($bdd, $username){
|
||||
|
||||
$stmt = mysqli_prepare(
|
||||
$bdd,
|
||||
"SELECT password FROM utilisateurs WHERE username = ? LIMIT 1"
|
||||
);
|
||||
|
||||
mysqli_stmt_bind_param($stmt, "s", $username);
|
||||
mysqli_stmt_execute($stmt);
|
||||
|
||||
$result = mysqli_stmt_get_result($stmt);
|
||||
$user = mysqli_fetch_assoc($result);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
return $user; // retourne un tableau ou null
|
||||
}
|
||||
|
||||
function getEvenements($bdd, $site){
|
||||
|
||||
$results = mysqli_query(
|
||||
$bdd,
|
||||
"SELECT * FROM evenements WHERE `site_id`='" . $site . "' ORDER BY date DESC"
|
||||
);
|
||||
|
||||
$evenements = [];
|
||||
|
||||
while ($row = mysqli_fetch_assoc($results)) {
|
||||
$evenements[] = $row;
|
||||
}
|
||||
|
||||
return $evenements;
|
||||
}
|
||||
|
||||
function getSite($bdd, $username){
|
||||
$stmt = mysqli_prepare(
|
||||
$bdd,
|
||||
"SELECT site_id FROM utilisateurs WHERE username = ? LIMIT 1"
|
||||
);
|
||||
|
||||
mysqli_stmt_bind_param($stmt, "s", $username);
|
||||
mysqli_stmt_execute($stmt);
|
||||
|
||||
$result = mysqli_stmt_get_result($stmt);
|
||||
$row = mysqli_fetch_assoc($result);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
return $row ? $row['site_id'] : null;
|
||||
}
|
||||
|
||||
function getSiteName($bdd, $site){
|
||||
$stmt = mysqli_prepare(
|
||||
$bdd,
|
||||
"SELECT nom FROM site WHERE site_id = ? LIMIT 1"
|
||||
);
|
||||
|
||||
mysqli_stmt_bind_param($stmt, "s", $site);
|
||||
mysqli_stmt_execute($stmt);
|
||||
|
||||
$result = mysqli_stmt_get_result($stmt);
|
||||
$row = mysqli_fetch_assoc($result);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
return $row ? $row['nom'] : null;
|
||||
}
|
||||
|
||||
function getEventName($bdd, $event){
|
||||
$stmt = mysqli_prepare(
|
||||
$bdd,
|
||||
"SELECT titre FROM evenements WHERE id = ? LIMIT 1"
|
||||
);
|
||||
|
||||
mysqli_stmt_bind_param($stmt, "s", $event);
|
||||
mysqli_stmt_execute($stmt);
|
||||
|
||||
$result = mysqli_stmt_get_result($stmt);
|
||||
$row = mysqli_fetch_assoc($result);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
return $row ? $row['titre'] : null;
|
||||
}
|
||||
27
Assets/navbar.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
$pages = ['index.php', 'guides.php', 'pratiques.php', 'photos.php'];
|
||||
$customNames = ['Accueil', 'Guides', 'Bonnes pratiques', 'Photos de l\'APEI'];
|
||||
?>
|
||||
<!-- navbar -->
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<ul class="navbar-nav mr-auto">
|
||||
<?php for($i=0; $i<sizeof($pages); $i++): ?>
|
||||
<?php if($page == $customNames[$i]):?>
|
||||
<li class="nav-item active">
|
||||
<?php else:?>
|
||||
<li class="nav-item">
|
||||
<?php endif;?>
|
||||
<a href="<?= $pages[$i] ?>" class="nav-link"><?= explode('.', $customNames[$i])[0] ?></a>
|
||||
</li>
|
||||
<?php endfor;?>
|
||||
<?php
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
<!-- Fin navbar -->
|
||||
16
Assets/style.css
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
/* Global */
|
||||
body{
|
||||
/*background-color: #163361;*/
|
||||
/*background-color: #538eec;*/
|
||||
background-color: #fff;
|
||||
font-family: 'Merriweather', serif;
|
||||
}
|
||||
|
||||
h1{
|
||||
text-align: center;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
h2{
|
||||
color: #000
|
||||
}
|
||||
34
event.php
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
include("./Assets/functions.php");
|
||||
$bdd = connectBDD("localhost", "root", "root", "intranet");
|
||||
$page = 'Bonnes pratiques';
|
||||
|
||||
/* Gestion de la connexion */
|
||||
session_start();
|
||||
if(!isset($_SESSION['connected']) || $_SESSION['connected'] == false){
|
||||
header('location: login.php');
|
||||
}
|
||||
|
||||
/* Récupération de l'évènement */
|
||||
$titre = getEventName($bdd, $_GET['event']);
|
||||
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Intranet de l'APEI</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
|
||||
<link rel="shortcut icon" href="./Assets/Icones/APEIMBGE.jpg" type="image/x-icon">
|
||||
<link rel="stylesheet" href="./styles-scripts/photos.css">
|
||||
</head>
|
||||
<body>
|
||||
<?php include('./Assets/navbar.php');?>
|
||||
|
||||
<h1><?= $titre ?></h1>
|
||||
|
||||
<!-- footer pas toucher -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
||||
21
guides.php
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
include("./Assets/functions.php");
|
||||
$bdd = connectBDD("localhost", "root", "root", "intranet");
|
||||
$page = 'Guides';
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Intranet de l'APEI</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
|
||||
<link rel="shortcut icon" href="./Assets/Icones/APEIMBGE.jpg" type="image/x-icon">
|
||||
</head>
|
||||
<body>
|
||||
<?php include('./Assets/navbar.php');?>
|
||||
|
||||
<!-- footer pas toucher -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
||||
50
index.php
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
include("./Assets/functions.php");
|
||||
$bdd = connectBDD("localhost", "root", "root", "intranet");
|
||||
$page = "Accueil";
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Intranet de l'APEI</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="./styles-scripts/index.css">
|
||||
<link rel="shortcut icon" href="./Assets/Icones/APEIMBGE.jpg" type="image/x-icon">
|
||||
</head>
|
||||
<body>
|
||||
<?php include('./Assets/navbar.php'); ?>
|
||||
<!-- Carousel -->
|
||||
<ul id="carousel" class="carousel">
|
||||
<?php
|
||||
$actus = getActus($bdd);
|
||||
foreach ($actus as $actu): ?>
|
||||
<li data-accName="<?= htmlspecialchars($actu["id"]) ?>" class="carousel">
|
||||
<h2><?= htmlspecialchars($actu["titre"]) ?></h2>
|
||||
|
||||
<div class="carouselContent">
|
||||
<img src="<?= htmlspecialchars($actu["image"]) ?>" alt="image de couverture">
|
||||
<p><?= nl2br(htmlspecialchars($actu["actu"])) ?></p>
|
||||
</div>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<!-- Fin carousel -->
|
||||
<h3>Raccourcis :</h3>
|
||||
<div class="container">
|
||||
<?php
|
||||
$raccourcis = getRaccourcis($bdd);
|
||||
foreach($raccourcis as $raccourci) : ?>
|
||||
<div class="element <?= $raccourci["nom"] ?>" onclick="window.location.href = '<?= $raccourci['url'] ?>/'" style="cursor: pointer">
|
||||
<h3><?= $raccourci["nom"] ?></h3>
|
||||
<img src="<?= $raccourci["image"] ?>" width='80px'>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<!-- footer pas toucher -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous"></script>
|
||||
<script src="./styles-scripts/index.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
41
login.php
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
require('./Assets/functions.php');
|
||||
$bdd = connectBDD("localhost", "root", "root", "intranet");
|
||||
|
||||
session_start();
|
||||
|
||||
if(isset($_POST['user']) && isset($_POST['password'])){
|
||||
if(validateCSRFToken($_SESSION['csrf'], $_POST['csrf']) && verifyPassword(getHashPwd($bdd, $_POST['user'])["password"], $_POST['password'])){
|
||||
$csrf = '';
|
||||
$_SESSION['connected'] = true;
|
||||
$_SESSION['site'] = getSite($bdd, $_POST['user']);
|
||||
header('location: photos.php');
|
||||
}
|
||||
}else{
|
||||
$csrf = bin2hex(random_bytes(32));
|
||||
$_SESSION['csrf'] = $csrf;
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
|
||||
<title>Se connecter !</title>
|
||||
</head>
|
||||
<body>
|
||||
<form method="POST">
|
||||
<div class="form-group">
|
||||
<label for="user">Nom d'utilisateur :</label>
|
||||
<input type="text" class="form-control" id="user" name="user" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password">Password</label>
|
||||
<input type="password" class="form-control" id="password" name="password" required>
|
||||
</div>
|
||||
<input type="hidden" name="csrf" value="<?= $csrf ?>">
|
||||
<button type="submit" class="btn btn-primary">Connexion</button>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
69
photos.php
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
<?php
|
||||
include("./Assets/functions.php");
|
||||
$bdd = connectBDD("localhost", "root", "root", "intranet");
|
||||
$page = 'Bonnes pratiques';
|
||||
|
||||
/* Gestion de la connexion */
|
||||
session_start();
|
||||
if(!isset($_SESSION['connected']) || $_SESSION['connected'] == false){
|
||||
header('location: login.php');
|
||||
}
|
||||
|
||||
/* Récupération des évènements */
|
||||
$evenements = getEvenements($bdd, $_SESSION['site']);
|
||||
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Intranet de l'APEI</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
|
||||
<link rel="shortcut icon" href="./Assets/Icones/APEIMBGE.jpg" type="image/x-icon">
|
||||
<link rel="stylesheet" href="./styles-scripts/photos.css">
|
||||
</head>
|
||||
<body>
|
||||
<?php include('./Assets/navbar.php');?>
|
||||
|
||||
<h3>Évènements de <?= getSiteName($bdd, $_SESSION['site']) ?></h3>
|
||||
|
||||
<div class="parent">
|
||||
<div class="div1">
|
||||
<a href="./event.php?event=<?= $evenements[0]["id"] ?>">
|
||||
<img src="<?= $evenements[0]["couverture"] ?>" alt="">
|
||||
<div class="overlay">
|
||||
<p><?= $evenements[0]["titre"] ?></p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="div2">
|
||||
<a href="./event.php?event=<?= $evenements[1]["id"] ?>">
|
||||
<img src="<?= $evenements[1]["couverture"] ?>" alt="">
|
||||
<div class="overlay">
|
||||
<p><?= $evenements[1]["titre"] ?></p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="div3">
|
||||
<a href="./event.php?event=<?= $evenements[2]["id"] ?>">
|
||||
<img src="<?= $evenements[2]["couverture"] ?>" alt="">
|
||||
<div class="overlay">
|
||||
<p><?= $evenements[2]["titre"] ?></p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="div4">
|
||||
<a href="./event.php?event=<?= $evenements[3]["id"] ?>">
|
||||
<img src="<?= $evenements[3]["couverture"] ?>" alt="">
|
||||
<div class="overlay">
|
||||
<p><?= $evenements[3]["titre"] ?></p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- footer pas toucher -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
||||
21
pratiques.php
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
include("./Assets/functions.php");
|
||||
$bdd = connectBDD("localhost", "root", "root", "intranet");
|
||||
$page = 'Bonnes pratiques';
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Intranet de l'APEI</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
|
||||
<link rel="shortcut icon" href="./Assets/Icones/APEIMBGE.jpg" type="image/x-icon">
|
||||
</head>
|
||||
<body>
|
||||
<?php include('./Assets/navbar.php');?>
|
||||
|
||||
<!-- footer pas toucher -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
||||
174
styles-scripts/index.css
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: "Helvetica", "Arial", sans-serif;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
font-size: 1.7rem;
|
||||
}
|
||||
ul.carousel {
|
||||
width: 100%;
|
||||
height: 300px;
|
||||
/*max-height: 500px;*/
|
||||
padding: 30px;
|
||||
display: flex;
|
||||
gap: 4vw;
|
||||
}
|
||||
li.carousel {
|
||||
list-style-type: none;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #2c54b3;
|
||||
padding: 20px;
|
||||
|
||||
flex: 0 0 100%;
|
||||
}
|
||||
|
||||
ul.carousel {
|
||||
overflow-x: scroll;
|
||||
scroll-snap-type: x mandatory;
|
||||
}
|
||||
li.carousel {
|
||||
scroll-snap-align: center;
|
||||
}
|
||||
ul.carousel::scroll-button(*) {
|
||||
border: 0;
|
||||
font-size: 2rem;
|
||||
background: none;
|
||||
color: black;
|
||||
opacity: 0.7;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
ul.carousel::scroll-button(*):hover,
|
||||
ul.carousel::scroll-button(*):focus {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
ul.carousel::scroll-button(*):active {
|
||||
translate: 1px 1px;
|
||||
}
|
||||
|
||||
ul.carousel::scroll-button(*):disabled {
|
||||
opacity: 0.2;
|
||||
cursor: unset;
|
||||
}
|
||||
/*
|
||||
ul::scroll-button(left) {
|
||||
content: "◄" / "Previous";
|
||||
}
|
||||
|
||||
ul::scroll-button(right) {
|
||||
content: "►" / "Next";
|
||||
}
|
||||
*/
|
||||
ul.carousel {
|
||||
anchor-name: --my-carousel;
|
||||
}
|
||||
|
||||
/*
|
||||
ul::scroll-button(*) {
|
||||
position: absolute;
|
||||
position-anchor: --my-carousel;
|
||||
}
|
||||
ul::scroll-button(left) {
|
||||
right: calc(anchor(left) - 70px);
|
||||
bottom: calc(anchor(top) + 13px);
|
||||
}
|
||||
|
||||
ul::scroll-button(right) {
|
||||
left: calc(anchor(right) - 70px);
|
||||
bottom: calc(anchor(top) + 13px);
|
||||
}
|
||||
*/
|
||||
ul.carousel {
|
||||
scroll-marker-group: after;
|
||||
}
|
||||
ul.carousel::scroll-marker-group {
|
||||
position: absolute;
|
||||
position-anchor: --my-carousel;
|
||||
top: calc(anchor(bottom) - 70px);
|
||||
justify-self: anchor-center;
|
||||
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 20px;
|
||||
}
|
||||
li.carousel::scroll-marker {
|
||||
content: attr(data-accName);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-color: transparent;
|
||||
border: 2px solid black;
|
||||
border-radius: 50%;
|
||||
overflow: hidden;
|
||||
text-indent: 16px;
|
||||
}
|
||||
li.carousel::scroll-marker:target-current {
|
||||
background-color: black;
|
||||
}
|
||||
ul.carousel img{
|
||||
max-width: 360px;
|
||||
}
|
||||
|
||||
ul.carousel {
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
/* Chrome / Edge / Safari */
|
||||
ul.carousel::-webkit-scrollbar {
|
||||
height: 0px;
|
||||
}
|
||||
|
||||
/* Firefox */
|
||||
ul.carousel {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: transparent transparent;
|
||||
}
|
||||
div.container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
div.element {
|
||||
padding: 5px;
|
||||
box-sizing: border-box;
|
||||
width: 220px;
|
||||
height: 150px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
div.element img{
|
||||
display: block;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
div.element h3{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
li.carousel .carouselContent {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
li.carousel .carouselContent img {
|
||||
height: 150px;
|
||||
max-width: 360px;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
li.carousel .carouselContent p {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.nav-link{
|
||||
font-size: larger;
|
||||
}
|
||||
24
styles-scripts/index.js
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
const carousel = document.getElementById("carousel");
|
||||
const slides = carousel.querySelectorAll("li");
|
||||
let currentIndex = 0;
|
||||
const intervalTime = 10000;
|
||||
|
||||
function goToSlide(index) {
|
||||
if (index < 0) index = slides.length - 1;
|
||||
if (index >= slides.length) index = 0;
|
||||
|
||||
slides[index].scrollIntoView({
|
||||
behavior: "smooth",
|
||||
inline: "center",
|
||||
block: "nearest"
|
||||
});
|
||||
|
||||
currentIndex = index;
|
||||
}
|
||||
|
||||
|
||||
function nextSlide() {
|
||||
goToSlide(currentIndex + 1);
|
||||
}
|
||||
|
||||
setInterval(nextSlide, intervalTime);
|
||||
57
styles-scripts/photos.css
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
.parent {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
grid-template-rows: repeat(3, 1fr);
|
||||
grid-column-gap: 2px;
|
||||
grid-row-gap: 2px;
|
||||
max-height: 75vh;
|
||||
}
|
||||
|
||||
.div1 { grid-area: 1 / 1 / 4 / 4; }
|
||||
.div2 { grid-area: 1 / 4 / 3 / 6; }
|
||||
.div3 { grid-area: 3 / 4 / 4 / 5; }
|
||||
.div4 { grid-area: 3 / 5 / 4 / 6; }
|
||||
|
||||
img{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.parent > div {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.overlay {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
padding: 20px;
|
||||
|
||||
background: linear-gradient(
|
||||
to top,
|
||||
rgba(0,0,0,0.75),
|
||||
rgba(0,0,0,0)
|
||||
);
|
||||
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.overlay p {
|
||||
color: white;
|
||||
margin: 0;
|
||||
font-size: 18px;
|
||||
transform: translateY(20px);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.parent > div:hover .overlay {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.parent > div:hover .overlay p {
|
||||
transform: translateY(0);
|
||||
}
|
||||