Bonsoir,

La surbrillance n'est pas liée à outline, c'est un élément propriétaire au navigateur.

Un peu compliqué à tout passer en revue car le sujet est complexe, je vais plutôt vous donner un exemple de ce que je peux faire pour la styler (en partie) :
:-webkit-autofill {
  /* @note Préremplissage des champs par le navigateur. @affected Chrome. */
  -webkit-text-fill-color: #000; /* par exemple... */
  /* @note Hack pour éviter l'affichage par défaut de l'autoremplissage, car les autres solutions se sont montrées inefficaces @todo Solution temporaire à évaluer. */
  transition-property: background-color;
  /* @note Idem. */
  transition-delay: 1000000s;
}

Modifié par Olivier C (19 May 2024 - 20:57)
2lwess a écrit :
Bonjour, j'en appelle aux admins. Cette personne ...


Bonjour,
Il se trouve, sous chaque sujet, un bouton intitulé "Prévenir un modérateur" qui te permet d'envoyer un message d'alerte à l'ensemble des modérateurs du forum de façon discrète.

Les modérateurs n’hésiterons pas à prendre des mesures sur des interventions ne respectant pas la charte du forum, lorsque cela est nécessaire.

Cdt
Modifié par gcyrillus (19 May 2024 - 15:57)
Bonjour ou bonsoir à vous,

Je voulais savoir quelque chose concernant les inputs et leur mise en forme.
J'ai fait la mise en forme de mes inputs et tout fonctionne correctement, mais quand je clique dessus il y a une surbrillance qui se fait. Je voulais savoir si il y avait la possibilité de modifier ça ?

Merci de vos réponses d'avance !
Hello, Les microdonnées sont un domaine que je maitrise peu, mais je suis curieuse !

Le
RSS
ou j'ai travaillé envoyait tous les jours un recap de nos arts niveau ongles.
Il était cependant question de bouger le "R" de RSS. Des fois envoyer nos collections en avance via le drapeau "X" et donc
XSS
.

L'espace du rayon demande t'il à être mis à jour à quelle fréquence ? daily ? hebdoly ?
C'est vraiment gentil de proposer les différentes options. Je cherche et magasine pour de l'auto-hebergé. Le concept sur lequel je travaille est révolutionnaire, donc je vise loin des goufram, je cherche mon indépendance.

J'ai tout de même quelques skills surtout en bash de CI, besoins de plusse de retours, je veux prendre la bonne décision pour les ongles ! Smiley lol
Bonjour,

J'aurai besoin d'un conseil concernant la mise en page grid pour comprendre. Conteneur de type basique, j'ai 3 lignes et 3 colonnes dont voici le css :

.container-body-none{
   display: grid;
    height: 100vh;
    grid-template-columns: 15% 1fr 15%;
    grid-template-rows: auto 1fr 0.2fr;
    grid-template-areas: 
    "head head head"
    "left content right"
    "foot foot foot";
}

Mon incompréhension se trouve à la ligne :
grid-template-rows: auto 1fr 0.2fr; 

En effet, si je remplace "0.2fr" par "auto", cela me provoque un leger espace dans le footer et fait apparaitre l'ascenseur. Y a t-il une explication à ce soucis ?

Par avance merci
JLuc

Edit : si je rajoute un padding, meme de 2px, le soucis disparait. Smiley biggrin
Modifié par gesualda (19 May 2024 - 09:12)
Je vous trouve un peu secs, avec sans doute un débutant qui a tenté une page et n'a pas l'habitude du forum. Oui, je sais, il faut lire avant les conditions d'utilisation, mais quand j'ai commencé, je ne les aient même pas lues Smiley ohwell
@ROROG
Il faut nous donner un peu de code, html et css, ou un lien vers un site, même en construction. Même du code imparfait, personne ne le critiquera. On devient très critique seulement chez celui qui propose un site complet et qui est sur le forum depuis longtemps.
Bonne soirée.
Si ça répond aux besoins dans **un premier temps** , je ne vois pas où est le problème. Justement, ce genre de services que propose Google est une aide aux créateurs sans qu'ils aient des connaissances pointues dans le numérique. Je ne connais pas bien ce service. Cependant, j'en ai entendu du bien. Et puis Google est loin d'être un Gargamel. N'oublions pas qu'il propose des services que le monde entier utilise (autres que le moteur de recherche). S'il n'y avait pas les gafam, ce serait monotone. Et s'il n'y avait pas les gafam ce serait un autre acronyme.
Modifié par niuxe (18 May 2024 - 21:41)
lionel_css3 a écrit :

Ben déjà je peux t'inviter à visiter ma chaine Youtube, c'est gratuit en plus, j'avais fait une série sur la création de thèmes WordPress. visite les playlists...

Créer un thème saison 1

Ça date un peu, mais ce que j'explique là est encore valable sur les principe et je me concentre sur le code, les gros principes de base n'ont pas changés.


Je benchmark justement par rapport à Typo3, Spip et consorts. Quelle chouette référence YouTube !

Ma seule question est 7 ans en arrière, est-ce que le service est toujours fourni ? Il est très important pour le nail-art de bénéficier de la meilleure plateforme.
lionel_css3 a écrit :

qu'entends tu par permettre l'édition avec médias attachés ?

Lorsque tu édites un contenu sous WordPress (Article ou Page) tu as accès à la bibliothèque de Médias du site web et avec Gutenberg c'est encore mieux...


Salut, oui je vise cette possibilité de bibliothèque de medias. Que veux-tu dire avec Guttenberg, c'est un gestionnaire avec les médias aussi ? Je suis perdue.
Olivier C a écrit :


Voici donc ma question : comment faire en sorte pour que la carte tourne toujours dans le même sens AVEC UNE TRANSITION (avec une animation il faudrait sans doute s'appuyer sur animation-fill-mode: forwards;) ? Je ne suis pas sûr que cela soit possible, je demande au cas où...


Salut,

Et non, avec une transition, tu ne peux pas faire cela. Tu seras obligé de passer par animation. C'est justement une des différences entre animation et transition.
Bonjour,

Comme je suis un peu juste en 3D je me suis amusé à produire des Flips Cards en m'inspirant de ce que j'ai pu trouver sur CodePen *** : ma solution.

Mon attention porte ici sur l'animation. L'animation actuelle me convient : on clique sur une carte, elle se retourne, on reclique dessus, elle revient à son point initial par le chemin emprunté plus tôt. Mais je voulais tester d'autres solutions en allant un peu plus avant.

Voici donc ma question : comment faire en sorte pour que la carte tourne toujours dans le même sens AVEC UNE TRANSITION (avec une animation il faudrait sans doute s'appuyer sur animation-fill-mode: forwards;) ? Je ne suis pas sûr que cela soit possible, je demande au cas où...

___
*** Les Pens ne sont pas toujours terribles au passage : les devs ont tendances à coder leur dimensions en dur. De plus le verso des cartes (back) est pratiquement toujours codé en position:absolute + inset:0, ce qui fait que la carte au verso dépend du contenu de celle du recto, et jamais l'inverse. De mon côté je le fais en responsive avec grid qui résout très bien ce problème.

Edit : modification du titre du topic.
Modifié par Olivier C (17 May 2024 - 20:59)
salut,

ayant résolu mon problème de theme-switcher grâce à https://forum.alsacreations.com/topic-5-90990-1-Resolu-Theme-switcher.html#p580934, j'ai voulu voir pour adapter ça à mon language-switcher et bien sûr étant nul en javascript ça n'a pas fonctionné, je me permet donc je vous solliciter de nouveau.

mon idée étant :
- https://fr.toto.fr devienne https://en.toto.fr quand je clique sur le bouton english ou encore https://fr.toto.fr/tutoriels.php devienne https://en.toto.fr/tutoriels.php et bien sûr que le choix de la langue soit stocké dans un cookie et réutilisé.

en me basant sur le lien fournit dans mon post de problème de thème j'ai donc fait ceci, le header :
<html lang="fr" data-selected-lang="fr" data-selected-theme="dark">

le menu :
<div aria-label="Changer de langue" class="dropdown-toggle fa-solid fa-language fa-lg fa-fw language-switcher">
    <button-group class="dropdown-menu dropdown-menu-end rollDown">
        <button aria-label="Français" aria-pressed="true" data-lang="fr"><span class="fi fi-fr flag-icon"></span>Français</button>
        <button aria-label="English" aria-pressed="false" data-lang="en"><span class="fi fi-gb flag-icon"></span>English</button>
    </button-group>
</div>

le footer :
<script defer src="../static/js/language-switcher.min.js" type="text/javascript"></script>

dans le js :
const pressedButtonSelector = '[data-lang][aria-pressed="true"]';
const defaultLanguage = 'fr';

const applyLanguage = (language) => {
    const buttons = document.querySelectorAll('.language-switcher button');
    buttons.forEach(button => {
        const lang = button.getAttribute('data-lang');
        if (lang === language) {
            button.setAttribute('aria-pressed', 'true');
        } else {
            button.setAttribute('aria-pressed', 'false');
        }
    });
};

const handleLanguageSelection = (event) => {
    const target = event.target;
    const isPressed = target.getAttribute('aria-pressed');
    const language = target.getAttribute('data-lang');

    if (isPressed !== "true") {
        const currentUrl = window.location.href;
        const newUrl = currentUrl.replace(/\/\/(fr|en)\./, "//" + language + ".");
        window.location.href = newUrl;

        applyLanguage(language);

        localStorage.setItem('selected-language', language);
    }
};

const setInitialLanguage = () => {
    const savedLanguage = localStorage.getItem('selected-language');
    if (savedLanguage && savedLanguage !== defaultLanguage) {
        applyLanguage(savedLanguage);
    }
};

setInitialLanguage();

const langSwitcher = document.querySelector('.language-switcher');
const buttons = langSwitcher.querySelectorAll('button');

buttons.forEach((button) => {
    button.addEventListener('click', handleLanguageSelection);
});

étant une bille en js, j'ai demandé à chatgpt voir s'il ne pouvait pas m'aider à trouver le problème mais sans succès.

petite précision importante :
actuellement je construit ma nouvelle version de site sur https://test.toto.fr, la version française est sur https://test.toto.fr/fr et la version anglaise sur https://test.toto.fr/en.
alors certes si le bouton fonctionnait ça devrait m'emmener sur https://en.toto.fr sauf que comme les sous-domaines https://fr.toto.fr et https://en.toto.fr n'existent pas encore et que mon site est configuré pour renvoyer toute page inexistante vers la page d'accueil je devrais au moins arriver sur https://toto.fr (qui elle existe) or je n'ai actuellement aucune redirection.
Bonjour,

J'ai posé la question à ChatGPT. Il m'a conseillé d'utiliser getBoundingClientRect().
Le conseil est judicieux car maintenant l'affichage fonctionne correctement.

La nouvelle fonction Ouverture_simple est maintenant codée comme suit :

function Ouverture_simple(Id_Section_appelee, decalage)  {			
	var Section_appelee = document.getElementById(Id_Section_appelee);
	Section_appelee.style.display = "block";
	const Rectangle_Section_appelee = Section_appelee.getBoundingClientRect();
	const Position_Section_appelee = Rectangle_Section_appelee.top + window.pageYOffset;
	const Hauteur_Fenetre = window.innerHeight;
	const Position_Affichage = Position_Section_appelee - (Hauteur_Fenetre / 2) - decalage;
	window.scrollTo({ top: Position_Affichage, behavior: 'smooth' });
		}

(La fonction Ouverture_double est codée sur le même modèle. La différence réside seulement dans l'ouverture conjointe de la première section fille de la section appelée.)
Modifié par Beka (17 May 2024 - 09:06)
Bonjour,

Mon texte étant très long, je l'ai fractionné en sections imbriquées, toutes positionnées en mode relatif.
J'utilise un "span onclick" en fin d'une section pour afficher la section suivante.
Je traite deux situations :
- affichage du début de la nouvelle section lorsque celle-ci est au même niveau que la précédente, par exemple section de niveau 2 ouvrant la section de niveau 2 suivante ; j'utilise alors la fonction Ouverture_simple(Id_Section_appelee, decalage) ;
- affichage d'une nouvelle section lorsque celle-ci est la première section fille de la section suivante de même niveau que la section d'appel, par exemple affichage du début de la première section de niveau 3 de la section de niveau 2 suivante ; j'utilise alors la fonction Ouverture_double(Id_Section_appelee, Id_Section_Premiere_fille, decalage)

Les deux fonctions sont codées comme suit :


function Ouverture_simple(Id_Section_appelee, decalage)  {			
			var Section_appelee = document.getElementById(Id_Section_appelee);
			Section_appelee.style.display = "block";			
			const Position_Section_appelee = Section_appelee.offsetTop;
			const Hauteur_Fenetre = window.innerHeight;
			const Position_Affichage = Position_Section_appelee - (Hauteur_Fenetre / 2) - decalage;
			window.scrollTo({ top: Position_Affichage, behavior: 'smooth' });
		}



function Ouverture_double(Id_Section_appelee, Id_Section_Premiere_fille, decalage)  {					
			var Section_appelee = document.getElementById(Id_Section_appelee);
			var Section_fille = document.getElementById(Id_Section_Premiere_fille);
			Section_appelee.style.display = "block";
			Section_fille.style.display = "block";
			const Position_Section_appelee = Section_appelee.offsetTop;
			const Hauteur_Fenetre = window.innerHeight;
			const Position_Affichage = Position_Section_appelee - (Hauteur_Fenetre / 2) - decalage;
			window.scrollTo({ top: Position_Affichage, behavior: 'smooth' });
		}


Les deux fonctions fonctionnent bien pour passer d'une section de niveau 2 à la section de niveau 2 suivante, et pour passer d'une section de niveau 2 à la première section de niveau 3 de la section de niveau 2 suivante.

Par contre, l'affichage remonte très haut lorsque je veux passer de la première section de niveau 3 à la deuxième section de niveau 3 !!??
Pourtant, si j'ai bien compris, la section prise en compte par offsetTop est la section de niveau 2 mère de ces deux sections de niveau 3 ?

Pouvez-vous s'il vous plaît m'aider à résoudre ce mystère, sensiblement bloquant ?
Merci pour votre aide !
Modifié par Beka (16 May 2024 - 21:23)
J'ai trouvé pas mal de pages en doublons qui avaient tendance à se contredire un peu et pas mal d'erreurs 404 aussi au niveau des liens.

Le truc c'est que je ne fais pas de paiement par carte avec Paypal, juste le client se log à son compte, choisi la source d'approvisionnement parmi celles qu'il a déjà enregistrées et basta.
Du coup les tests avec les numéros de carte ça ne correspond pas à mes besoins.
Bonjour
Lors d'une maj, des éléments ont été supprimés : .acfup-item
Cela fonctionne mais plus tout à fait comme initialement bien sûr!

Du coup, je me suis dis qu'il fallait l'enlever, mais j'ai des effets de bords
je fais quelques tests, mais comme c'est un site en production pour lequel on a fait un mailing, j'aimerai que vous me disiez s'il est nécessaire que je supprimer cet élément pour éviter des problèmes?? et si oui comment ?

Article
.com-content-article__body .acfup-item   {
  float: left;
  display: flex;
  align-items: center;
  min-width: 300px;
  /*max-width: 600px; a supprimer si j'enlève .acfup-item */
  max-height: 800px;
  justify-content: center;
  margin: 10px;  
}
/* Img: mise en forme (limité la grandeur, texte mis à droite de l'image, marge ) */
  /*.com-content-article__body div.encadre > img  { test ok mais peut-être effet de bord */
  .com-content-article__body .acfup-item img {
	/*float:left;
  margin: 10px; 
    width: 600px;*/
  height: auto;
  max-height: 800px;
  object-fit: contain; 
}

voir https://alterweb.info/organisation/professionnel-film/kamea-meah

Blog

/* limite la hauteur de l'affichage d'une image dans un affichage d'articles en blog */
div.com-content-category-blog__item span.acfup-item {/**/	
	width: 50%;		
	float:right;
	margin:8px;
}
/*div.com-content-category-blog__item img {	span.acfup-item img*/
div.com-content-category-blog__item span.acfup-item img {	/**/
	object-fit: contain;	
	vertical-align: top;
}
/*div.com-content-category-blog__item span.acfup-item object{*/	
div.com-content-category-blog__item  object{	
	object-fit: contain;	
	vertical-align: top;	
	height: 200px;
}

https://alterweb.info/organisation/professionnel-film
2lwess a écrit :
Penses-tu que Wordpress puisse toujours permettre l'édition avec médias attachés ? Certains locaux, sur le disque, et d'autres distants, comme des embed tik-tok ? Smiley murf



qu'entends tu par permettre l'édition avec médias attachés ?

Lorsque tu édites un contenu sous WordPress (Article ou Page) tu as accès à la bibliothèque de Médias du site web et avec Gutenberg c'est encore mieux...
et dans ce if là

if ($result->num_rows > 0) {
    $_SESSION["loggedin"] = true;
    $_SESSION["Pseudo"] = $pseudo;
    var_dump($_SESSION);die(); 
    //tu peux rajouter ta redirection ici.  ou la gérer en js via ton success true
    echo json_encode(array("success" => true));
}


tu y accède bien ? il faut que ce code soit executer avant ton accès aux crédits

parce que bizarrement tu fait en début de fichier
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
    header("location: welcome.php");
    exit;
}

alors que tu set la session loggedin après ce if...

EDIT: je t'ai envoyé un MP
Modifié par JENCAL (15 May 2024 - 15:23)
La pour tester ta connexion tu dois t'appuyer sur $_SESSION["loggedin"] = true;

session_start();
if($_SESSION["loggedin"] === true){
    $servername = "localhost";
    $username = "id22022299_mto";
    $password = "MTOs123456!";
    $dbname = "id22022299_bdd_tp3";

    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $pseudo = $_SESSION["Pseudo"];

    $result = $conn->query("SELECT Credits FROM Comptes WHERE Pseudo='$pseudo'");

    $row = $result->fetch_assoc();
    $credits = $row["Credits"];
    
    echo json_encode($credits);
}else{
var_dump($_SESSION);die();
}

Modifié par JENCAL (15 May 2024 - 12:05)
Ok donc je vois que vous n'avez pas encore abordée la POO (programmation orienté objet) je vais du coup pas m'avancé sur ce sujet.

Attention au injections SQL (regarde sur google) parce qu'ils vont vous tomber dessus.


Il faudrait voir si ici

if ($result->num_rows > 0) {
    $_SESSION["loggedin"] = true;
    $_SESSION["Pseudo"] = $pseudo;
    echo json_encode(array("success" => true));
} else {
    echo json_encode(array("success"=> false));
}


la connexion fonctionne bien;

est ce que y'a bien quelque chose dans $result et est ce que les sessions sont rempli.



    // tu pourrais faire ceci par exemple, var_dump($result);die();
    // le var dump te permet de debbuger, et le die permet de stoper le programme.
var_dump($result);die();
if ($result->num_rows > 0) {
    $_SESSION["loggedin"] = true;
    $_SESSION["Pseudo"] = $pseudo;
    echo json_encode(array("success" => true));
} else {
    echo json_encode(array("success"=> false));
}


Si tu as quelque chose dans $result alors tes sessions seront bien rempli

et ici pareil
$pseudo = $_SESSION["Pseudo"];

$result = $conn->query("SELECT Credits FROM Comptes WHERE Pseudo='$pseudo'");

$row = $result->fetch_assoc();
var_dump($row);die(); //ne pas oublier d'enlever le die(); dans la connexion pour lui. 
$credits = $row["Credits"];
    
echo json_encode($credits);

Modifié par JENCAL (15 May 2024 - 11:57)
Oui, nous avons un formulaire d'inscription qui fonctionne (la BDD est bel et bien acutalisée après la création d'un utilisateur), et également un formulaire de connexion mais c'est peut être ici qu'il y a un problème je ne sais pas.

code d'inscription :

<?php
session_start();

$servername = "localhost";
$username = "id22022299_mto";
$password = "MTOs123456!";
$dbname = "id22022299_bdd_tp3";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$pseudo = $_POST["signupUsername"];
$email = $_POST["signupEmail"];
$password = $_POST["signupPassword"];

$sql = "SELECT * FROM Comptes WHERE Pseudo='$pseudo' OR Adresse_mail='$email'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo json_encode(array("error" => true, "message" => "Le pseudo ou l'email est déjà pris."));
} elseif (strlen($pseudo) < 3) {
    echo json_encode(array("error" => true, "message" => "Le pseudo fait moins de 3 caractères."));
} elseif (strlen($password) < 8) {
    echo json_encode(array("error" => true, "message" => "Le mot de passe fait moins de 8 caractères."));
} elseif (!preg_match('/[A-Z]/', $password)) {
    echo json_encode(array("error" => true, "message" => "Le mot de passe ne contient pas de majuscule."));
} elseif (!preg_match('/[a-z]/', $password)) {
    echo json_encode(array("error" => true, "message" => "Le mot de passe ne contient pas de minuscule."));
} elseif (!preg_match('/[0-9]/', $password)) {
    echo json_encode(array("error" => true, "message" => "Le mot de passe ne contient pas de chiffre."));
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo json_encode(array("error" => true, "message" => "L'email n'est pas valide."));
} else {
    $sql = "INSERT INTO Comptes (Pseudo, Adresse_mail, Mot_de_passe, Credits) VALUES ('$pseudo', '$email', '$password', 5)";
    if ($conn->query($sql) === TRUE) {
        echo json_encode(array("error" => false, "message" => "Nouveau compte créé avec succès."));
    } else {
        echo json_encode(array("error" => true, "message" => "Erreur lors de la création du compte : " . $conn->error));
    }
}
    
$conn->close();


code de connexion :

<?php
session_start();

$servername = "localhost";
$username = "id22022299_mto";
$password = "MTOs123456!";
$dbname = "id22022299_bdd_tp3";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
    header("location: welcome.php");
    exit;
}

$email = $_POST["loginEmail"];
$password = $_POST["loginPassword"];

$sql = "SELECT * FROM Comptes WHERE Adresse_mail='$email' AND Mot_de_passe='$password'";
$sql_p = "SELECT Pseudo FROM Comptes WHERE Adresse_mail='$email'";
$result = $conn->query($sql);
$pseudo = $conn->query($sql_p);

if ($result->num_rows > 0) {
    $_SESSION["loggedin"] = true;
    $_SESSION["Pseudo"] = $pseudo;
    echo json_encode(array("success" => true));
} else {
    echo json_encode(array("success"=> false));
}


code par rapport aux crédits dans le jeu :

<?php
session_start();


$servername = "localhost";
$username = "id22022299_mto";
$password = "MTOs123456!";
$dbname = "id22022299_bdd_tp3";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$pseudo = $_SESSION["Pseudo"];

$result = $conn->query("SELECT Credits FROM Comptes WHERE Pseudo='$pseudo'");

$row = $result->fetch_assoc();
$credits = $row["Credits"];
    
echo json_encode($credits);
50 Dernières réponses