IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Changement/Ajout d'une classe avec le responsive


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 200
    Par défaut Changement/Ajout d'une classe avec le responsive
    Bonjour !

    J'aimerais changer ou ajouter dynamiquement une classe dans mon code au niveau de ma nav quand la taille de l'écran change !
    J'ai une nav qui change de comportement en fonction de la taille de l'écran.

    Voici le js qui gère le comportements de la nav avec le scroll :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    window.onscroll = function(){
        if (document.documentElement.scrollTop > 40){
          document.getElementById("headbar").style.boxShadow = "0px 4px 50px 0px rgba(0,0,0,0.75)";
          document.getElementById("headbar").style.position = "fixed";
          document.getElementById("head_menu").style.position = "fixed";
        }else{
            document.getElementById("headbar").style.boxShadow = "none";
            document.getElementById("headbar").style.position = "relative";
            document.getElementById("head_menu").style.position = "absolute";
        }
    }
    Le souci avec ce code c'est qu'il est bien pour le format smartphone et tablette car le menu de ma navigation reste bien en place mais au format desktop, cela pose un souci avec la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("head_menu").style.position = "fixed";
    J'ai trouvé sur le net la méthode matchMédia, mais j'ai pas trop saisie la manière de l'utiliser...

    Voici le reste de mon code (c'est du wordpress):
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <header id="main_head" class="main_header">
    			<div id="headbar" class="headbar">
    				<div class="logoCR">
    					<?php if(!is_front_page()){?>
    						<a href="<?php echo home_url(); ?>">
    					<?php } ?>
    						<img src="<?= get_stylesheet_directory_uri();?>/pics/COL-CPIAS.png" alt="logo" width="50"/>
    					</a>
    				</div>
    				<div class="log_seek">				
    					<?php echo do_shortcode('[ivory-search id="201" title="Default Search Form"]'); ?>
    				</div>
    			</div>
    			<nav id="navbar" class="main_nav">
    				<button aria-expanded="false" aria-controls="main-menu" class="togle">Menu</button>
    				<?php 
                                    wp_nav_menu(
                                            [
                                                    'theme_location'=>"header_nav",
                                                    'items_wrap'    =>'<ul id="head_menu" class="head_menu" hidden>%3$s</ul>'
                                            ]
                                    );
                                    ?>
    			</nav>
           	</header>

    JS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    const toggleMenu = document.querySelector('.main_nav button');
    const menu = document.querySelector('#head_menu');
     
    toggleMenu.addEventListener('click', function() {
      const open = JSON.parse(toggleMenu.getAttribute('aria-expanded'));
      toggleMenu.setAttribute('aria-expanded', !open);
      menu.hidden = !menu.hidden;
    });
    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    .main_header{
        grid-column: span 12;
        display: grid;
        grid-template-columns: repeat(12, 1fr);
        grid-column-gap: 5px;
    }
    .headbar{
        grid-column: span 12;
        display: flex;
        flex-direction: row;
        justify-content: space-between;
        align-items: center;
        padding: 1rem 2rem;
        z-index: 10;
        width: 100%;
        top: 0;
        background: red;
    }
    .main_nav{
        display: flex;
        flex-direction: column;
        grid-column: span 12;
        z-index: 10;
    }
    .togle{
        position: fixed;
        top: 12.5%;
        left: 3%;
        width: 4rem;
        height: 2.4rem;
        padding: 1rem 0;
        transition: .3s;
        font: 0/0 a;
        text-shadow: none;
        border: 0;
        color: transparent;
        background-color: var(--bluenavy);
        background-clip: content-box;
    }
    .togle::before,
    .togle::after{
        content: '';
        position: absolute;
        left: 0;
        right: 0;
        height: .4rem;
        background-color: var(--bluenavy);
        transition: .3s;
        transform-origin: left;
    }
    .togle::before{
        top: 0;
    }
    .togle::after{
        bottom: 0;
    }
    .togle[aria-expanded=true]{
        background-color: rgba(0,0,0,0);
    }
    .togle[aria-expanded=true]::before {
        transform: translate(.5rem, -.375rem) rotate(45deg);
    }
    .togle[aria-expanded=true]::after {
        transform: translate(.5rem, .375rem) rotate(-45deg);
    }
    .head_menu{
        display: flex;
        flex-direction: column;
        transform: translateX(-110%);
        margin-top: 4rem !important;
        transition: .3s;
        position: absolute;
        width: 100%;
        top: 12rem;
    }
    .head_menu:not([hidden]){
        transform: translateX(0);
    }
    .head_menu li{
        height: 5rem;
        background-color: var(--blueeth);
        transition: all 300ms ease-in-out;
        display: flex;
        align-items: center;
        margin: 0.1rem;
        justify-content: center;
    }
    .head_menu li a{
        display: flex;
        flex-direction: row-reverse;
        align-items: center;
        text-decoration: none;
        color: white;
        margin: 0;
        padding: 0;
    }

    Merci

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    d'habitude la classe css reste fixe et c'est dans le code css que vous allez indiquer les différences d'affichage suivant la largeur de l'écran par exemple.
    regardez ici pour plus d'informations :
    https://viseo.developpez.com/tutorie...ive-design/#LV

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 200
    Par défaut
    hummmm ok... Mais je ne vois pas comment changer de position avec le scroll en plus....

    En gros le menu reste en position : absolute quand le scrollTop est en dessous de 40 mais passe en fixed quand il est au dessus de 40 ET uniquement quand la taille de l'écran est en dessous de 64em

    Alors oui effectivement changer la position en css au changement de taille je sais faire mais ajouter le scroll en plus je sais pas faire :/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/03/2015, 16h34
  2. Ajouter une classe avec un identifiant unique
    Par Pierrea4564 dans le forum jQuery
    Réponses: 2
    Dernier message: 27/09/2011, 11h08
  3. [VBA-E] ajout d'une ligne avec ordre alphabétique
    Par Yaone dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/04/2006, 16h52
  4. Ajout dans une liste avec un bouton
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 07/12/2005, 08h27
  5. Réponses: 5
    Dernier message: 26/05/2005, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo