Question sur le dispaly:none

Theophile76 Messages postés 1817 Date d'inscription   Statut Membre Dernière intervention   -  
Theophile76 Messages postés 1817 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j'ai un problème au niveau d'un attribue, et je ne sais pas si c'est normal ou pas.
Voilà en fait quand je mes l'atribue "display:none" dans ma feuille de style, il n'est pas prix en compte alors que quand il est mis directement dans le code html ( style="display:none;" )
là il est prix en compte.
Je ne comprend pas pourquoi c'est comme ça et comme j'aime bien que ma page html soit la plus propre possible je me pose la question :D
Donc si vous savez pourquoi ... merci ;)



7 réponses

jalalnet Messages postés 293 Date d'inscription   Statut Membre Dernière intervention   10
 
tu peut mettre le bout du code HTML du balise que tu essaye de la rend invisible
est sa partie CSS aussi
0
biboo_ Messages postés 1249 Date d'inscription   Statut Membre Dernière intervention   106
 
Salut,

Quel est code que tu as mis dans ta CSS?
(Puis un petit effort sur l'orthographe, ça serait sympa ;-))

A+,
0
Theophile76 Messages postés 1817 Date d'inscription   Statut Membre Dernière intervention   372
 
Merci.

HTML

<script language="javascript" type="text/javascript">          
function visibilite(thingId)          
{          
var targetElement;          
targetElement = document.getElementById(thingId) ;          
if (targetElement.style.display == "none")          
{          
targetElement.style.display = "" ;          
} else {          
targetElement.style.display = "none" ;          
}          
}          
</script>          

...          

<td style="background-image:url(icon/modifier.png)" id="modifier" OnClick="javascript:visibilite('entre');">Modifier</td>         
...          

<tr id="entre" style="display:none"><td>blablabla</td></tr>


Y'a pas de CSS car ça marche pas mais j'ai essayé en mettant ce code dans ma feuille de style et rien. :

tr#entre          
{          
 display:none;          
}          



PS : on est pas tous bon en orthographe x) et en plus j'en ai pas fait tant que ça oO

On s'ennuie pas avec l'informatique :)
0
Eastchild Messages postés 319 Date d'inscription   Statut Membre Dernière intervention   31
 
bonjour,

Mets plutôt :
if (targetElement.style.display == "none")          
{          
targetElement.style.display = "block" ;


dans ton javascript pour que ce soit plus compatible.

Pour le CSS essaye en mettant juste :
#entre{
  display:none;
}   
0
Theophile76 Messages postés 1817 Date d'inscription   Statut Membre Dernière intervention   372
 
Ok merci.
Donc j'ai essayé ce que tu m'a proposé :
Pour le CSS ça ne fonctionne toujours pas. De plus j'ai vue dans de nombreux code source ce le "display:none" directement dans la page html, c'est peut être car ils ont le même problème que moi.
Pour le javascript je l'ai fait mais du coup ça deviens plus large et ça se décale un peu, ça ne faisait pas ça avant.

Et puisque tu me parle du code javascript, serais tu comment faire pour que la ligne "tr" se déroule progressivement et non pas "d'un coup" ?
Et aussi, est-il possible de changer le contenu de ma case "Modifier" pour qu'au moment où con clique dessus, un "fermer" apparaisse ?
0
Eastchild Messages postés 319 Date d'inscription   Statut Membre Dernière intervention   31
 
Alors pour le déroulement progressif je ne sais pas du tout, par contre pour le changement de modifier en ferme il faut faire :

function visibilite(thingId)            
{            
var targetElement;            
targetElement = document.getElementById(thingId) ;            
if (targetElement.style.display == "none")            
{            
 targetElement.style.display = "block" ;  
 document.getElementById('modifier).innerHTML = "fermer";            
} else {            
 targetElement.style.display = "none" ;  
 document.getElementById('modifier).innerHTML = "modifier";            
}            
} 
0
coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   119
 
Ouais bizarre tout ça...
J'assume que tu as mis ton CSS directement sur ta page HTML pour faire tes tests ? Sinon c'est sûr que ça pourrait être une erreur d'appel de la feuille de style externe... Mais je lis ta dernière question, et je ne vois pas comment le CSS peut être "moins bon" parce qu'il est mis directement sur une page HTML. Je le fais couramment pour des pages uniques, et je n'ai jamais de problème. Tant que tu as ta balise
<style type="text/css">...</style>
dans on <head>, il ne peut rien se passer de si bizarre...

Pour répondre à tes dernières questions :
Pour faire en sorte que le tr se déroule, je te recommande d'utiliser des bibliothèques Javascript telles que YUI. Ils ont des fonctions pour ça qui sont assez assurées de bien fonctionner ;)
Et pour changer le bouton modifier, je te conseille de mettre deux boutons, un Modifier, un Fermer, dont l'un est à display:none; et pas l'autre. Tu alternes les display quand on appuie sur un bouton ou l'autre.

Et aussi, tu ne devrais pas mettre ton tr à display:block; pour le rendre visible. Mets-le plutôt à display:table-row; qui est son display par défaut, sinon il ne se comportera pas comme un tr mais comme un div et ta table va planter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   119
 
Je pense à ça...
Essaie de préciser ton CSS autant que possible.
Au lieu de pointer à tr#entre, supposons que tu as le code suivant :
<div id="contenu">
	<div class="cadre">
		<table>
			<tr id="entre"></tr>
		</table>
	</div>
</div>

Mets :
#contenu .cadre table tr#entre { display:none; }

C'est peut-être juste un conflit dans la hiérarchie de ton CSS. Ce serait bizarre vu que d'habitude les ID ont priorité, mais ça peut arriver...
0
Theophile76 Messages postés 1817 Date d'inscription   Statut Membre Dernière intervention   372
 
Merci pour vos réponse, donc pour le bouton modifier, j'ai fait comme proposé et ça fonctionne : DIV qui s'intervertissent en DISPLAY:NONE.
Par contre j'ai une petite question sur ça, y-a t-il un moyen de raccourcir ceci :

<div OnClick="javascript:visibilite('ligne'); javascript:visibilite('annuler'); javascript:visibilite('modifier');" id="valider">Valider</div>


En quelle que chose de ce genre (bien sur ça ne fonctionne pas mon code hein ^^) :

<div OnClick="javascript:visibilite('ligne, annuler, modifier'');id="valider">Valider</div>


Pour le problème du CSS DISPLAY:NONE j'ai laissé tombé, ça me prend de temps finalement tant que ça fonctionne, c'est l'important.
Même si ta solution est peut être viable Coeus, je suis encore novis en la matière et j'ai pas envie de trop bidouiller mon code lol

Pour le déroulement TR, je vais chercher grâce à vos piste :)

merci.

0
coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   119
 
Pour simplifier ton code, tu peux simplement faire :

<div onclick="visibilite('ligne'); visibilite('annuler'); visibilite('modifier');" id="valider">Valider</div>

Ou alors, faire :

<div onclick="visibilite_tout();" id="valider">Valider</div>
<script>
function visibilite_tout() {
visibilite('ligne');
visibilite('annuler');
visibilite('modifier');
}
</script>

Ou encore mieux, je ne sais pas à quoi ressemble ta fonction visibilite, mais dedans, tu peux faire :

function visibilite() {
var liste = ["ligne","annuler","modifier"];
for (x in liste) {
// le reste de ta fonction, tu remplaces "ligne","annuler" ou "modifier" par liste[x].
}
}

Un petit lien pour t'aider à visualiser la bouclew for in :
www.w3schools.com/js/js_loop_for_in.asp

Et pour le déroulement de tes TR, si tu emploies des bibliothèques genre YUI, je veux juste t'avertir que ça peut être compliqué pour quelqu'un qui se prétend "novice". Loin de moi l'idée de te décourager, mais aie dans l'idée de passer du temps là-dessus, sinon tu risques d'être déçu. Et n'hésite pas à redemander de l'aide ! ;)
0
Theophile76 Messages postés 1817 Date d'inscription   Statut Membre Dernière intervention   372
 
merci beaucoup je vais tester tout ça :)
0