1485 sujets

Web Mobile et responsive web design

Salut,

J'adapte actuellement un site web classique en responsive.

Tout va bien, j'ai surmonté pas mal de problème mais là je crack !
Ca fais une semaine que je bloque sur un point tout simple (surtout depuis que l'on ne prend plus en charge IE6 Smiley smile ) les loader et les popin.

En fait sur le site il y a des loader qui indique que la page charge en ajax du contenu et des popins qui demande des infos, poseent des questions ... bref.

Les deux était implementé en CSS avec un position:fixed; top:0; bottom:0; left:0 et right:0.

Sur un navigateur desktop ca marche nikel, mais sur les mobiles ou tablettes c'est une horreur. Y en a pas un qui réagi de la même façon.

Soit la div est en haut de la page et non de l'écran, ou alors elle est n'importe ou !! Et pour retrouve c'est galere.

Du coup question, existe il un moyen d'afficher une div centré sur un écran (et non la page entiere) mobile ou tablette ?

PS : en même temps le site passe en HTML5 et CSS3. JQuery et modernize sont également utilisé, mais je voudrais eviter une autre librairie (sinon à la fin je vais avoir plus de librairie que page ! lol) Smiley eek
Salut,

J'ai écrit un solution javascript avec jQuery pour obtenir des images popup positionnées au centre de l'écran et qui se replacent en cas de redimensionnement de la fenêtre ce qui devrait régler les différences entre tablettes et desktop.

Je l'utilise actuellement sur ce site les Choses de l'Astronomie si tu veux voir sur une situation en réel pour des images et pour googlemap.

Je te laisse essayer le code ci-dessous où j'ai mis en situation le javascript

J'espère que ça répond à ton problème Smiley smile


<!DOCTYPE HTML>
<html lang="fr">
<head>
	<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
	<meta charset="UTF-8">
	<title>Centrer les pop-up à l'affichage</title>
	<style type="text/css">
	.btn-close {
		  display: none;
		  position: absolute;
		  top: -10px;
		  right: -10px;
		  height: 30px;
		  width: 30px;
		  line-height: 30px;
		  text-align: center;
		  font-family: arial;
		  font-size: 20px;
		  font-weight: bold;
		  background: #fff;
		  border-radius: 30px;
		  cursor: pointer;
	}
	img {max-width: 100%;}
	</style>
	
</head>
<body>
	<div id="main" >
		<ul>
			<li><a href="http://cdpresse.fr/wp-content/uploads/2010/12/Melies-le-voyage-dans-la-lune.jpg" class="img pop">La Lune</a></li>
			<li><a href="http://system.solaire.free.fr/soleil10.jpg" class="img pop">Le Soleil</a></li>
			<li><a href="http://www.notre-planete.info/actualites/images/planete/globe_west_2048NASA.jpg" class="img pop">La Terre</a></li>
		</ul>
	</div>

	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
	<script type="text/javascript">
		$(document).ready(function() {
			
			//=======================================================
			//  Gestion de l'affichage "popup"
			//=======================================================
			var popup = {
				
				divPop: "",
				
				init : function() {
					
					// Affichage des images à fournir en pop-up désignées par la classe .img
					if ($(".img").length > 0) {
						// Préchargement des images afin d'avoir accès aux dimensions
						var i=0;
						var image = new Array();
						$(".img").each(function(){
							//(new Image()).src = this;
							image[i] = new Image();
							image[i].src = this;
							i++
						});
						console.log(image[0]);
						// Mise en place des gestionnaires d'évènement pour appel à fonction img() lors du click
						$(".img").on('click', function(){
							popup.img($(this).attr("href"));
							return false;
						});
					}
				},
				
				img : function(href) {
					// Ajoute la div dans la div principale
					$("#main").append('<div class="popup img"><img src="'+href+'" alt=" "/></div>');
					popup.divPop = $("div.popup");
					// appel fonction show()
					this.show();
				},

				show : function(){
					// définition des css pour la div d'opacité "wrapFade"
					var cssWrapFade = {
						"position": "fixed",
						"display": "none",
						"height": "100%",
						"width": "100%",
						"z-index": 1000,
						"background": "#000",
						"opacity": "0.5",
						"left": 0,
						"top": 0
					};
					// définition des css temporaires...
					var cssDivPopup = {
						"position": "fixed",
						"z-index":10000,
						"opacity": 1,
						"max-width": "80%",
						"margin": "0"
					};
					
					// insertion de la div d'opacité
					$("body").append('<div id="wrapFade"></div>');
					
					// affichage de la div d'opacité  et insertion du bouton X
					$("#wrapFade").css(cssWrapFade).fadeIn();

					// affichage de la div popup
					popup.divPop.css(cssDivPopup);

					// Appel de la fonction responsive()
					// pour adaptation de la position de la div
					// en fonction de la dimension disponible à l'affichage
					cssRespons = popup.responsive();

					// On cache puis on applique les css et on affiche
					popup.divPop.hide()
								.css(cssRespons).delay(500)
								.fadeIn()
								.prepend('<span class="btn-close">X</span>');
					$("span.btn-close").hide().delay(700)
										.fadeIn();
					// Ajout gestionnaire event close sur fond et X
					$("span.btn-close, #wrapFade").on("click", function(){
						popup.close();
					});
				},

				close : function(){
					$("#wrapFade").fadeOut(function(){
						$(this).remove();
					});
					popup.divPop.fadeOut(function(){
						$(this).remove();
					});
				},

				responsive : function(){
					// On récupère les dimensions avec les bordures en outer
					var width = -(popup.divPop.outerWidth())/2+"px";
					var height = -(popup.divPop.outerHeight())/2+"px";

					return ({
						"left": "50%",
						"top": "50%",			// centrage au milieu
						"margin-top": height,	// puis décalage d'une moitié de hauteur
						"margin-left": width,
						
					});
				}
			};
			
		//=======================================================
		//  Gestion des effets du redimensionnement de la fenêtre
		//=======================================================
			$(window).resize(function(){
				// gestion du redimensionnement du popup
				if (popup.divPop.length !== 0){
					popup.responsive();
				}
			});

		//=======================================================
		//  Lancement s'il y a des éléments à pop-upper !
		//=======================================================
			if ($(".pop").length !== 0){
				popup.init();
			}
		})();
	</script>	

</body>
</html>
[/i][/i]
Modifié par ArnoldM (01 Nov 2012 - 00:31)