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.