2016-04-14 1 views
1

Nous développons une nouvelle interface utilisateur pour un de nos produits et pour un certain nombre de raisons, nous avons besoin de basculer entre deux balises <div> selon que l'appareil soit mobile ou de bureau. Chaque <div> contiendra le contenu approprié pour mobile ou de bureau, mais parce que nous avons seulement une seule page HTML, nous avons besoin de la possibilité d'activer un <div> tout en désactivant l'autre.bascule entre deux DIVs en fonction de la résolution d'écran en utilisant CSS

Cette question fait suite à this SO question qui est très similaire à ce que je demande ici. Pour récapituler la solution s'y trouve, il y a deux <div> s:

<div class="visible-phone"> 
    content for phone 
</div> 

<div class="visible-desktop"> 
    content for desktop 
</div> 

et il y a deux règles CSS qui emploient soit la résolution de l'écran maximum ou minimum:

.visible-phone{ 
    @media (max-width: 480px) { more css } 
} 

.visible-desktop{ 
    @media (min-width: 768px) { more css } 
} 

Pour arriver au point, envisager un appareil avec une largeur minimale de 700px et une largeur maximale de 900px. Cela tomberait à travers les fissures de la logique CSS ci-dessus et n'entraînerait aucun <div> visible. Un autre exemple, un appareil allant de 500px à 750px ne serait pas non plus couvert.

Quelqu'un peut-il suggérer une approche complète pour éviter la faiblesse de la réponse référencée? Des solutions basées sur CSS seraient préférables ici.

+0

Ajoutez une requête multimédia pour la plage intermédiaire et décidez du contenu à afficher (ou créez un contenu supplémentaire pour les tablettes). – Paul

+0

@Paul C'est une idée intelligente, mais laissez-moi jouer le défenseur du diable. Supposons que nous ayons ajouté (480, 768) comme troisième requête média. Mais maintenant, un appareil qui va de (450, 700) ne serait pas couvert. Celui qui a concocté cette question de médias a clairement apprécié le tourment mental :-) –

+0

Pourquoi cela ne serait-il pas couvert? En fonction de divers facteurs, il montrera juste différents 'div's, par exemple lors de la rotation du mode portrait (450) au mode paysage (700). – Paul

Répondre

0

Ce que vous pouvez utiliser est l'absence d'affichage dans la requête média. Utilisez les différentes classes assignées à chaque div comme mobile et de bureau puis dans la requête média pour le poste de travail .visiblephone {display: none;} et la requête pour mobile set .visible-desktop {display: none;}

veiller à ce que, dans votre support recommandé recherche un div sera toujours caché, vous avez juste pour obtenir vos valeurs de taille de l'écran =)

0

si je vous comprends bien, vous essayez de faire:

CSS

@media screen and (max-width: 480px) { 
    .visible-phone{ 
    display: block !important; 
    } 
    .visible-desktop{ 
    display: none !important; 
    } 
} 
@media screen and (min-width: 480px) { 
    .visible-phone{ 
    display: none !important; 
    } 
    .visible-desktop{ 
    display: block !important; 
    } 
} 
+0

J'essaie actuellement quelque chose dans ce sens, mais je vois un problème potentiel ici. Supposons qu'un périphérique ait une largeur minimale de 400 pixels et une largeur maximale de 800 pixels. Le premier style ne serait pas rencontré parce que le 'max-width' de 800px est trop grand. Mais le deuxième style _also_ ne serait pas rencontré, parce que la «min-width» de 400px est trop petite. Ainsi, il pourrait éventuellement y avoir des dispositifs qui tomberaient dans un no man's land. –

+1

Je ne suis pas sûr, mais peut-être qu'il y a un malentendu de votre part.Tout périphérique/viewport à un moment donné ne peut avoir qu'une largeur. Cette valeur _single_ width (opposée à une plage) détermine la requête multimédia à utiliser. – Paul

+0

@TimBiegeleisen J'essaie d'imaginer le problème comme ça. "J'ai une fenêtre de navigateur, dont je peux changer la largeur entre 400px et 800px.Le premier style fonctionne entre 400px et 480px, et après 480px le second fonctionnera. – Tanbi