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

Mise en page CSS Discussion :

Forcer une mise en page


Sujet :

CSS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut Forcer une mise en page
    Salut

    J'ai fait une boite de dialogue paramétrable que je voudrai pouvoir utiliser dans différents programmes.
    Cette boite de dialogue est composé de 2 fichiers, un JavaScript et l'autre le CSS, il sont communs pour chaque programme ou je les utilises.

    Code JavaScript : 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
    97
    98
    99
    100
    //BtDial.js
    let BtDiCmpt, BtDiIdxInterval, NumfctRet;
    //****************************************************************************************************************
    function AfficherBt(titre,message="aucun",bouton,type,LefTT,TopP,modale,tempo,fctRetNum=0) {
    	let StyleTypeDial, TypDial, TypCoul, btn, DivCtnDial, ConfDial;
    	NumfctRet = fctRetNum;// drapeau a enclencher le code suite à la fermeture de la boite de dialogue
    	if(message===undefined){message=""};// cela ne devrait pas arriver, mais ...
    	if(titre===undefined){titre=""};// cela ne devrait pas arriver, mais ...
    	//boutons, 0=aucun, 1=ok, 2=ok et annuler ou 3=oui et non 
    	if(bouton===undefined){bouton=0};// bouton(s) ou aucun
    	if(bouton!==0){
    		btn = "<div id='TheBouton'><button id='btn1' onclick='AnalyseRep(this)'>";
    	}else{
    		btn = "";//"</div>";
    	}
    	switch (bouton)
    	{
    		case 0:bouton = btn;break;
    		case 1:bouton = btn+"Ok</button></div>";break;
    		case 2:bouton = btn+"Ok</button> <button id='btn2' onclick='AnalyseRep(this)'>Annuler</button></div>";break;
    		case 3:bouton = btn+"Oui</button> <button id='btn2' onclick='AnalyseRep(this)'>Non</button></div>";
    	}
    	//0=Critique, 1=Exclamation, 2=Interrogation et 3=Information
    	if(type===undefined){type=3};
    	//LefTT et TopP sont des chiffres
    	if(LefTT===undefined||LefTT===""){LefTT=((Number(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)-200)/2)+"px";}else{LefTT=String(LefTT)+"px";}//LefTT
    	if(TopP===undefined||TopP===""){TopP=((Number(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)-150)/2)+"px";}else{TopP=String(TopP)+"px";}//TopP
    	// soit true, soit false
    	if(modale===undefined){modale=true;}
    	TypDial = "⚠,❕,❔,👀".split(",");//caractères icon de la boite de dialogue
    	TypCoul = "#ff9f80,#ffc266,#fff3c6,#b3ffb3".split(",");//couleur de la boite de dialogue
    	//gestion de tempo ou non, tempo étant toujours un multiple de 1000 (soit 1 Sc)
    	if(tempo===undefined){tempo="non";};
    	if (tempo!=="non"){tempo = Number(tempo);};
    	if (bouton==="" && tempo=="non"){tempo = 5;};//créer quand même une tempo de 5Sc pour fermer la boite de dialogue car il n'y a pas de bouton
    	// commencement de la construction de la boite de dialogue
    	DivCtnDial = document.createElement("div");//div conteneur de la boite de dialogue nécessaire pour le cas modale
    	DivCtnDial.setAttribute('id','CntBtDial');
    	DivCtnDial.style.position='absolute';
    	DivCtnDial.style.zIndex=5000;//pour assurer en premier plan, surtout en mode modale
    	if (modale===true){
    		DivCtnDial.style.height = "99%";//pour prendre toute la hauteur
    		DivCtnDial.style.width = "99%";//pour prendre toute la largeur
    		DivCtnDial.style.left = "0px";
    		DivCtnDial.style.top = "0px";
    		StyleTypeDial = " style='left:"+LefTT+";top:"+TopP+";background-color:"+TypCoul[type]+"'";
    	}else{
    		DivCtnDial.style.left = LefTT;
    		DivCtnDial.style.top = TopP;
    		StyleTypeDial = " style='background-color:"+TypCoul[type]+"'";
    	}
    	//création du contenu de la boite de dialogue
    	ConfDial = "<div id='TheBoiteDialogue'"+StyleTypeDial+">";// La boite de dialogue
    	ConfDial += "<div id='TheDivTitre'><h4><span id='h4Span'>"+TypDial[type]+"</span> "+titre+"</h4></div>";
    	message = message.replace(/\n/g,"<br />");//pour permettre du texte sur plusieurs lignes
    	if(message!==""){ConfDial += "<article id='TheMessage'>"+message+"</article>";}
    	ConfDial += bouton;
    	if (tempo!=="non"){ConfDial += "<div id='TheCompteur'></div>";}// pour décomptage si temporisation 
    	ConfDial += "</div>";
    	DivCtnDial.innerHTML = ConfDial; // affecter les éléments au conteneur
    	//console.log("ConfDial = ",ConfDial);
    	document.body.appendChild(DivCtnDial, document.body);// création du conteneur dans la partie body, la boite de dialogue est affichée
     
    	if (bouton===""){
    		document.getElementById("CntBtDial").focus();
    	}else{
    		document.getElementById("btn1").focus();// donne le focus au bouton s'il existe	
    	}
     
    	if (tempo!=="non"){// lancer la tempo pour fermeture de la boite de dialogue
    		BtDiCmpt = tempo;
    		document.getElementById("TheCompteur").innerHTML =  "&thinsp;"+BtDiCmpt+"&thinsp;";
    		BtDiIdxInterval = setInterval(GereTempo,1000);// GereTempo appelé toute les secondes
    	}
    }// ---------------------------------------------------------------------------------------------------
    function GereTempo() {
    	BtDiCmpt--;
    	if(BtDiCmpt == 0){
    		finTempo();
    		// la fonction RecupeReponse() est dans le fichier.js du programme principal.
    		RecupeReponse("NO",NumfctRet);// pas d'utilisation de bouton
    	}else{
    		document.getElementById("TheCompteur").innerHTML = "&thinsp;"+BtDiCmpt+"&thinsp;"; // seconde(s) restante(s)";
    	}
    }// ---------------------------------------------------------------------------------------------------
    function finTempo() {
    	clearInterval(BtDiIdxInterval);
    	BtDiIdxInterval = null;
    	KillDialogue();
    }// ---------------------------------------------------------------------------------------------------
    function KillDialogue() {document.getElementById("CntBtDial").remove();}//ferme la fenêtre de dialogue
    // ---------------------------------------------------------------------------------------------------
    function AnalyseRep(elem){
    	KillDialogue(); 
    	if (BtDiIdxInterval!==null){//la boite de dialogue a été fermée par bouton avant la fin de la temporisation
    		clearInterval(BtDiIdxInterval);//supprime la temporisation 
    		BtDiIdxInterval = null;
    	}
    	RecupeReponse(elem.textContent,NumfctRet);
    }// ---------------------------------------------------------------------------------------------------
    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
    /* BtDial.css */
    			/* #CntBtDial{position:absolute;} */
     
    			#TheBoiteDialogue {
    				position:relative;
    				height:auto;
    				width:200px;
    				border: 1px solid black;
    				border-radius:8px;
    				padding: 0px 5px 5px 5px;
    				box-shadow: 10px 10px 5px black
    			}
    			#TheDivTitre {
    				position:relative;
    				margin-top:-20px;
    			}
    			#h4Span{
    				font-size:30px;
    				text-align:center
    			}
    			#TheMessage{
    				position:relative;
    				margin-top:-12px;
    				border: 1px solid black;
    				border-radius:4px;
    				padding-left:3px;
    				padding-right:3px;
    				padding-bottom:1px;
    				background-color:white
    			}
    			 #TheBouton {
    				position:relative;
    				margin-top:5px;
    			}	
    			#TheCompteur{
    				position:absolute;
    				top:3px;
    				right:3px;
    				color:blue;
    				background-color:white;
    				font-weight:bold;
    				border: 1px solid black;
    				border-radius:5px
    			}
    vous pouvez voir/essayer son fonctionnement ICI,
    en enlevant la mise en commentaire ligne 9 du HTML, on peut voir mon problème.

    Dans mon programme Carte radioamateur du 74+ j'ai une ligne dans son CSS *{ margin:3px 0 0 0; padding:0 0 0 0;}, le margin fait perdre la mise en page de la boite de dialogue.
    Tous les positionnements margin-top et le top sont décale dans la boite de dialogue.
    J'ai essayé d'ajouter !important dans le fichier BtDial.css, mais cela ne fait pas.
    J'ai dut modifier le fichier commun BtDial.css en supprimant tous les margin-top et le top, mais du coup dans d'autre programmes, ben je n'ai plus la bonne mise en page.

    Ma question est comment forcer la bonne mise en page de BtDial.css quelque soit les CSS des programmes qui l'utilise.

    Merci de m'avoir lut et de vos futures propositions.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Bonjour,
    voilà la limite d'un reset CSS, tu annules toutes les valeurs par défaut. Ton <h4> perd ses marges, et par effet de bord la fusion des marges en est impactée.

    Il te faut donc dans ta feuille de style spéciale reprendre les propriétés que tu veux rétablir, dans ton cas de marge tu peux essayer margin: revert.

    Une chose également importante est de bien cibler les éléments auxquels tu veux que cela s'applique en affinant le sélecteur, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #CntBtDial * {
      margin: revert;
    }
    .. il te faudra quand même faire un minimum de vérification !


  3. #3
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Merci de cette réponse, je regarde cela et fait un retour au plus vite.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    NoSmoking
    C'est tout bon, encore une commande CSS (parmi tant d'autres) que je ne connaissais pas.
    Les différents programmes qui utilisent la même boite de dialogue (même fichier JS et CSS) fonctionnent correctement.
    Le but est donc atteint, me passer d'alert() et de confirm().
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

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

Discussions similaires

  1. Forcer la mise en page d'une text box?
    Par jolzeviking dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/09/2008, 16h10
  2. Forcer la mise en page d'une diapositive
    Par aptagud dans le forum Powerpoint
    Réponses: 2
    Dernier message: 25/01/2008, 18h14
  3. Mémoriser une mise en page d'une requête
    Par floadd dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/09/2006, 09h40
  4. Etat Existe t il une mise en page tabulaire verticale ?
    Par antoine0207 dans le forum Access
    Réponses: 12
    Dernier message: 21/07/2006, 16h24
  5. [XHTML] Une mise en page un peu complexe
    Par psychoBob dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 27/05/2006, 18h09

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