28172 sujets

CSS et mise en forme, CSS3

Bonjour,

Je cherche des exemples intéressants de :target pour son emploi premier : visualiser l'ancre cible.

Connaissez-vous liens ou ressources ?

Mon idée serait d'associer une animation à un changement de couleur afin de faire disparaître ce dernier au bout de quelques secondes.

Le code est simple, ce sont plutôt des exemples sympas que je cherche.

Je crois qu'il existe aussi des javascript assez simples pour la même fonction.
Modérateur
Salut,

Regarde le résultat, lis ce code et comprends le :

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        #global{font-family: sans-serif;max-width: 800px;margin: 0 auto;}
        div:target{
            background: red;
        }
    </style>
</head>
<body>
    <div id="global">
        <ul>
            <li>
                <a href="http://alsacreations.com">Alsacreations</a>
            </li>
            <li>
                <a href="#ancreInterne">ancre interne</a>
            </li>
        </ul>
        <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed doloremque quod iusto omnis nobis quisquam illum veritatis rerum et eos perspiciatis dolorum quia aliquam necessitatibus dicta qui adipisci quam suscipit? ipsum dolor sit amet, consectetur adipisicing elit. Error eveniet repellendus officiis tempora ratione atque vel mollitia minus eos repudiandae voluptatibus exercitationem enim provident dicta quisquam beatae adipisci. Dolorem ratione! ipsum dolor sit amet, consectetur adipisicing elit. Error similique quo ea suscipit accusantium quas perspiciatis nihil quos delectus qui sunt mollitia ad repellendus inventore magni fugit quisquam nostrum labore. ipsum dolor sit amet, consectetur adipisicing elit. Nemo deserunt inventore eaque labore quas facilis distinctio tempora odio sapiente sint facere dolorum esse iste nesciunt suscipit illum soluta excepturi mollitia.</div>
        <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed doloremque quod iusto omnis nobis quisquam illum veritatis rerum et eos perspiciatis dolorum quia aliquam necessitatibus dicta qui adipisci quam suscipit? ipsum dolor sit amet, consectetur adipisicing elit. Error eveniet repellendus officiis tempora ratione atque vel mollitia minus eos repudiandae voluptatibus exercitationem enim provident dicta quisquam beatae adipisci. Dolorem ratione! ipsum dolor sit amet, consectetur adipisicing elit. Error similique quo ea suscipit accusantium quas perspiciatis nihil quos delectus qui sunt mollitia ad repellendus inventore magni fugit quisquam nostrum labore. ipsum dolor sit amet, consectetur adipisicing elit. Nemo deserunt inventore eaque labore quas facilis distinctio tempora odio sapiente sint facere dolorum esse iste nesciunt suscipit illum soluta excepturi mollitia.</div>
        <div id="ancreInterne">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed doloremque quod iusto omnis nobis quisquam illum veritatis rerum et eos perspiciatis dolorum quia aliquam necessitatibus dicta qui adipisci quam suscipit? ipsum dolor sit amet, consectetur adipisicing elit. Error eveniet repellendus officiis tempora ratione atque vel mollitia minus eos repudiandae voluptatibus exercitationem enim provident dicta quisquam beatae adipisci. Dolorem ratione! ipsum dolor sit amet, consectetur adipisicing elit. Error similique quo ea suscipit accusantium quas perspiciatis nihil quos delectus qui sunt mollitia ad repellendus inventore magni fugit quisquam nostrum labore. ipsum dolor sit amet, consectetur adipisicing elit. Nemo deserunt inventore eaque labore quas facilis distinctio tempora odio sapiente sint facere dolorum esse iste nesciunt suscipit illum soluta excepturi mollitia.</div>
    </div>
</body>
</html>

Modifié par niuxe (10 Jul 2015 - 00:02)
Bonjour,

Merci de ton code, je comprends l'emploi de :target.

Je cherche un emploi un peu sophistiqué de :target, sans doute avec animation.

J'ai quelques idées mais je préfère commencer par voir ce qui existe, donc je cherche des liens vers sites ou ressouirces.
Bonjour,

Prenons un effet très simple, par exemple :

h6:target {background-color: infoBackground}


J'aimerais que cet effet ne dure que 2 secondes mais là je ne vois pas commetn faire.

h6:target {transition: background-color 2s linear}


J'ai essayé sans succès et je crois comprendre la raison, c'est la présence de la pseudo-classe :target

Je ne connais pas bien les animations et transitions mais l'anoncé du problème est simple.

Merci d'avance.
Bonjour,

J'ai compris, c'est une animation qu'il faut, pas une transition.

J'essaye ce code :

@keyframes trg
{
0% {color: #696969}
50% {color: #F00}
100% {color: #696969}
}

table:target th {animation-name : trg; animation-duration : 4s; animation-iteration-count : 2; animation-fill-mode: both; color: #F00}


De cette manière.
Les navigateurs qui ne connaissent pas !target ne font rien.
Les navigateurs qui conniassetn :target mais pas les animations vont colorer th en #F00
Et ceux qui connaissent l'animation vont l'exécuter pendant 8 secondes ( 2 fois 4 secontdes).

C'est une animation très simple, il y a sans doute mieux à faire mais je n'ai pas trouvé de démonstrations intéressantes.
Bonjour,

Un comportement de :target qui m'étonne.

Quand on clique sur le lien, l'effet souhaité sur l'ancre se produit.

Après l'animation, cela revient à l'état initial, très bien c'est prévu par l'animation.

Quand on reclique sur le même lien il ne se produit rien.

Si l'on clique sur un autre lien menant à une autre ancre en :targer, l'effet se produit.

Si on clique sur le premier lien, l'effet se produit.

Autrement dit, il n'est pas possible de produire l'effet deux fois de suite sur le même lien.

Je trouve cela un peu étrange.
Avec :hover l'effet se produit à chaque survol du lien et on aimerait qu'il en soit de même avec :target.

Peut-être y a-t-il quelque chose à faire pour réinitialiser :target ?
Modérateur
Salut,

Désolé de t'écrire aussi tardivement. Je n'avais pas vu ta réponse et cette semaine j'ai été occupé. J'ai du mal à te suivre dans ta description. Peux tu nous dire ce que tu souhaites faire ?

Je pense que tu devrais oublier :target et exposer ta problématique. Peux tu editer sur le forum un petit code html avec le css qui va bien. Ainsi je/on pourra/i voir ton petit souci.
Bonjour,


@keyframes trg
{
0% {background-color: #FFF; border-bottom-color: #F2F2F2}
50% {background-color: #EDF0F1; border-bottom-color: white}
100% {background-color: #FFF; border-bottom-color: #F2F2F2}
}

table#ore:target th {animation: trg 6s step-start both; background-color: #EDF0F1; border-bottom-color: white}


Si tu cliques sur le lien href="#ore", l'animation s'exécute.
Si tu re-cliques il ne se passe rien.

Je pense que c'est lié à la façon dont :target est géré par les navigateurs.
Il n'y a pas de reset.
Cela n'a rien à voir avec l'animation ou le code.
Si je suppirme l'animation le même problème persiste :

table#ore:target th {background-color: #EDF0F1; border-bottom-color: white}


Est-ce clair ?

Si non je t'envoie un lien vers le site.
Modérateur
Tu n'as pas besoin d'utiliser les keyframes dans ce que tu veux faire :

boteha_2 a écrit :

Je pense que c'est lié à la façon dont :target est géré par les navigateurs.
Il n'y a pas de reset.

Tout le CSS est géré par le/s navigateur/s Smiley cligne

Comment :target fonctionne ?
C'est un lien interne (avec une url bien spécifique et très précise) lié à sa cible (:target) dans la même page.

Lorsque tu supprimeras l'ancre (ex : http://mon-super-projet.com#cible), tu vas t'apercevoir que l'élément :target revient à l'état initial.

Tu es bien d'accord avec moi que nous sommes dans un cas où l'élément change de comportement lorsque survient un évènement dans le document, n'est ce pas ? De ce fait, les transitions sont plus appropriées Smiley cligne

Ton réel souci maintenant est lorsque Mme Michu clique pour lire le contenu de :target, il faut qu'au bout d'un moment, l'élément target revienne à l'état initial. Il suffit dans ce cas, supprimer le hash dans l'url. Là, le JS devient nécessaire. je te donne une petite piste à suivre. Ce n'est pas parfait (loin de là) mais tu vois où je veux en venir. Je reprends mon exemple initial avec ton idée. Tu vas devoir jouer au jeu des 7 erreurs et comprendre ce que je t'écris :

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        #global{font-family: sans-serif;max-width: 800px;margin: 0 auto;}
        div{
            background: transparent;
            transition: background .5s;
        }
        div:target{
            background: red;
        }
    </style>
</head>
<body>
    <div id="global">
        <ul>
            <li>
                <a href="http://alsacreations.com">Alsacreations</a>
            </li>
            <li>
                <a href="#ancreInterne">ancre interne</a>
            </li>
        </ul>
        <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed doloremque quod iusto omnis nobis quisquam illum veritatis rerum et eos perspiciatis dolorum quia aliquam necessitatibus dicta qui adipisci quam suscipit? ipsum dolor sit amet, consectetur adipisicing elit. Error eveniet repellendus officiis tempora ratione atque vel mollitia minus eos repudiandae voluptatibus exercitationem enim provident dicta quisquam beatae adipisci. Dolorem ratione! ipsum dolor sit amet, consectetur adipisicing elit. Error similique quo ea suscipit accusantium quas perspiciatis nihil quos delectus qui sunt mollitia ad repellendus inventore magni fugit quisquam nostrum labore. ipsum dolor sit amet, consectetur adipisicing elit. Nemo deserunt inventore eaque labore quas facilis distinctio tempora odio sapiente sint facere dolorum esse iste nesciunt suscipit illum soluta excepturi mollitia.</div>
        <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed doloremque quod iusto omnis nobis quisquam illum veritatis rerum et eos perspiciatis dolorum quia aliquam necessitatibus dicta qui adipisci quam suscipit? ipsum dolor sit amet, consectetur adipisicing elit. Error eveniet repellendus officiis tempora ratione atque vel mollitia minus eos repudiandae voluptatibus exercitationem enim provident dicta quisquam beatae adipisci. Dolorem ratione! ipsum dolor sit amet, consectetur adipisicing elit. Error similique quo ea suscipit accusantium quas perspiciatis nihil quos delectus qui sunt mollitia ad repellendus inventore magni fugit quisquam nostrum labore. ipsum dolor sit amet, consectetur adipisicing elit. Nemo deserunt inventore eaque labore quas facilis distinctio tempora odio sapiente sint facere dolorum esse iste nesciunt suscipit illum soluta excepturi mollitia.</div>
        <div id="ancreInterne">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed doloremque quod iusto omnis nobis quisquam illum veritatis rerum et eos perspiciatis dolorum quia aliquam necessitatibus dicta qui adipisci quam suscipit? ipsum dolor sit amet, consectetur adipisicing elit. Error eveniet repellendus officiis tempora ratione atque vel mollitia minus eos repudiandae voluptatibus exercitationem enim provident dicta quisquam beatae adipisci. Dolorem ratione! ipsum dolor sit amet, consectetur adipisicing elit. Error similique quo ea suscipit accusantium quas perspiciatis nihil quos delectus qui sunt mollitia ad repellendus inventore magni fugit quisquam nostrum labore. ipsum dolor sit amet, consectetur adipisicing elit. Nemo deserunt inventore eaque labore quas facilis distinctio tempora odio sapiente sint facere dolorum esse iste nesciunt suscipit illum soluta excepturi mollitia.</div>
    </div>
    <script>
    window.addEventListener('load',function(){
        var elsA = document.getElementsByTagName('a');
        
        for (var i = 0, nb = elsA.length; i < nb ; i++) {
            var a = elsA[ i ];
            
            if (a.href.indexOf('#') >= 0) {
                a.addEventListener('click',function(){
                    setTimeout(function(){
                        window.location.hash = '';
                    },1000);
                });
            }            
        }        
    });
    
    </script>
    
    
</body>
</html>



<<<EDIT
ton idée initiale (utilisée le :target) n'est peut être pas adaptée à ton souci (comportement initial navigateur avec ancre interne). De mon côté, j'injecterai une classe à la cible et je lui enlèverai au bout d'un moment.
http://codepen.io/niuxe/pen/QbBObo

EDIT;
Modifié par niuxe (17 Jul 2015 - 21:28)
Bonjour,

Merci beaucoup de ta réponse mais il y a pas mal de choses que je comprends pas.

a écrit :
ton idée initiale (utilisée le :target) n'est peut être pas adaptée à ton souci (comportement initial navigateur avec ancre interne). De mon côté, j'injecterai une classe à la cible et je lui enlèverai au bout d'un moment.


:target est fait pour cela non ?

:hover, tu passes sur le lien, le comportement se fait, tu repasses tout de suite sur le même lien, il se refait.

Pourquoi pas avec :target ?

Voir ligne fixe en bas de page

a écrit :

Tu es bien d'accord avec moi que nous sommes dans un cas où l'élément change de comportement lorsque survient un évènement dans le document, n'est ce pas ? De ce fait, les transitions sont plus appropriées


Je ne vois pas bien ce que tu veux dire mais les transitions sont quelque chose de nouveau pour moi.

S'il faut mettre du javascript c'est quand même dommage alors que l'on si proche du résultat en CSS.
Modérateur
Bonsoir,

boteha_2 a écrit :

:target est fait pour cela non ?

:hover, tu passes sur le lien, le comportement se fait, tu repasses tout de suite sur le même lien, il se refait.

Pourquoi pas avec :target ?

Voir ligne fixe en bas de page


+1000..... pour le lien. Maintenant, je commence à bien comprendre ce que tu veux faire. Sache que dans tes réponses je vois une méconnaissance mais surtout je vois que tu acquiers de bonnes pratiques (je vais développer mes propos). Si c'est toi qui a intégré cette page, ça a l'air pas mal. Il y a un petit souci h2 avant h1. Après je me suis pas plongé dans le code. La question initiale n'est pas tout à fait là, n'est ce pas ?

Bref, ton problème est complexe est simple à la fois. je vais essayer de t'expliquer la différence entre les transitions, animations et :target. Ensuite tu vas comprendre où je veux en venir :

:target (pseudo class css 3).
Comme je te l'ai dit target se base sur l'url (!) Si tu retires l'id dans l'url, la page et ton élément html ciblé reviennent à l'état initial.

animation (css 3) :
C'est une manière simple pour animer un élement dans la page suivant un évènement "ou pas" (J'ai mis "ou pas" entre guillemets parce qu'il y a de toute manière un évènement : chargement de la page). Le gros bémol, animation-name est lié étroitement à une autre règle css qui est : animation-iteration-count. Cette règle définit le nombre de fois qu'une animation doit être lancer. Par défaut la valeur est de 1. Ci dessous, je t'indique les principaux paramètres que cette règle accepte (sache que j'en oublie surement. Je t'invite à faire un tour sur la mdn par exemple afin de regarder de plus près cette règle).

animation-iteration-count:5; //l'animation se lancera 5 fois


animation-iteration-count:infinite; //répété indéfiniment


animation-iteration-count:2.3; //répété 2 fois et 30% de l'animatiion


transition (css 3) :
Premièrement je te conseille de lire cet article : Transitions CSS3
et ensuite relire ce que je t'ai dit à ce sujet :
niuxe a écrit :

Tu es bien d'accord avec moi que nous sommes dans un cas où l'élément change de comportement lorsque survient un évènement dans le document, n'est ce pas ? De ce fait, les transitions sont plus appropriées

niuxe a écrit :

Ton réel souci maintenant est lorsque Mme Michu clique (évènement) pour lire le contenu de :target (élément cible), il faut qu'au bout d'un moment, l'élément target (élément cible) revienne à l'état initial.

* J'ai rajouté des commentaires entre parenthèses afin que tu vois ce que je veux dire.

boteha_2 a écrit :

S'il faut mettre du javascript c'est quand même dommage alors que l'on si proche du résultat en CSS.


+100... pour cet argument. Comme je t'ai dit plus haut tu acquiers des bonnes pratiques. Pourquoi ? Tu penses d'abords html et css avant de penser au js.

Quand plus haut je te parle de complexité nous y venons. Tu souhaites que lorsque madame michu clique sur une ancre interne, il y ait comme une mise en évidence éphémère sur la zone de lecture. Fait attention que ça ne fasse pas sapin de noël. Noël c'est dans un peu moins de 6 mois et j'ai pas encore écrit ma lettre pour le vieux barbu.

Si tu commences à comprendre le fonctionnement de target, des animations et des transtions, tu vois que ces règles et ce ciblage ne répondent pas vraiment à l'effet que tu veux obtenir. Mon approche js répond à ton besoin mais cela nécessite cette technologie. En css, tu ne pourras que cibler et appliquer du static (pratiquement aucune règle attrait à l'interaction).

Ton idée générale pour implémenter cette fonctionnalité est bonne. Mais attention :
Au fur et à mesure que le sujet évolue, je m'aperçois que tu devrais prendre connaissance de ce sujet et de ses liens annexes : [Résolu] La beauté d'une police participe-t-elle à sa lisibilité . Tu vas comprendre pourquoi je te mets en garde.
Modifié par niuxe (19 Jul 2015 - 04:31)
Bonjour,

Merci pour toutes tes remarques et informations.

Je vais méditer tout cela.

L'alternative est entre :target et un javascript.

Merci de m'avertir contre les sapins de Noel mais je ne pense pas que mon animation soit un sapin de Noel, cela reste sobre.

Néanmoins, à propos de :target, personne ne semble remarquer ce comportement étrange dont j'ai déjà parlé.

L'effet n'est pas répété si l'on re-clique sur le même lien.
Pour réiniitialiser il faut cliquer sur un autre lien vers une autre ancre.

Ce n'est pas signalé dans la norme :

Lien W3C :target
Bonjour,

Petit détail, tu signales :

"niuxe" a écrit :
Il y a un petit souci h2 avant h1


Quel est le problème ?
N'a-t-on pas le droit d'avoir un surtitre au-dessus d'un titre ?

<h2>Dernières nouvelles</h2>
<h1>Bill Gates s'excuse</h1>

Modifié par boteha_2 (19 Jul 2015 - 15:42)
Modérateur
boteha_2 a écrit :

Merci de m'avertir contre les sapins de Noel mais je ne pense pas que mon animation soit un sapin de Noel, cela reste sobre.


J'ai grossi le trait et développer mes propos pour te mettre en garde. Sinon, je me doute que tu vas éviter de créer un feux d'artifice, sinon mme michu va péter un câble... Ça il le faut surtout pas, sinon ce serait prit comme un acte terroriste. Alors fait attention que le GIGN ne débarque pas ! Smiley biggol

boteha_2 a écrit :

Néanmoins, à propos de :target, personne ne semble remarquer ce comportement étrange dont j'ai déjà parlé.

L'effet n'est pas répété si l'on re-clique sur le même lien.
Pour réiniitialiser il faut cliquer sur un autre lien vers une autre ancre.

Ce n'est pas signalé dans la norme :

Comme je t'ai dit :target est lié à l'url. Smiley cligne

boteha_2 a écrit :

Quel est le problème ?
N'a-t-on pas le droit d'avoir un surtitre au-dessus d'un titre ?


le souci vient de la sémantique. Tu as le droit de faire un titre et un sous titre, mais en respectant l'ordre chronologique. D'ailleurs au début de l'HTML5, il y avait un élément html qui permettait de réunir un groupe de titre : <hgroup>

Tu peux faire ceci :

<h1 class="h2like">Dernières nouvelles</h1>
<h2 class="h1like">Bill Gates s'excuse</h2>

Modifié par niuxe (20 Jul 2015 - 00:39)
Bonjour,

Merci de tes réponses.

h1 avant h2
Est-ce écrit quelque part dans la norme W3C ?
Ou est-ce pris en compte par Google ?

Si oui je m'incline mais c'est idiot.
Ou alors il ne faut pas l'employer pour des titres.