2011-08-24 1 views
2

Je résous habituellement mes doutes de programmation avant que je fantasme de faire une question dans SO, mais c'est la première fois que je n'arrive pas à trouver la réponse .... donc ... voici ma première question sur le site après des heures d'essayer de résoudre ce problème:CSS - Comment faire: "ONE-TIME CSS EXPRESSION" dans css? (par exemple max-height/max-width pour IE)

Comment avoir une expression css unique?


POURQUOI expression unique ?: si nous faisons quelques tests comme (attention, provoquer IE6 & IE7 affichera l'alerte encore et encore ...):

<div style="height:expression(alert('this alert repeats itself'));"> 
    content with infinite alert... 
</div> 

l'expression est évaluée jusqu'à la fin des temps ... c'est pourquoi je voudrais comprendre une façon de le faire arriver une seule fois, comme pour écraser le style lui-même comme le 2 ° article tente d'expliquer, mais je ne peux pas vraiment mettez-le au travail ....


que nous pouvons lire dans cet article:

http://developer.yahoo.com/blogs/ydn/posts/2007/07/high_performanc_6/

expressions se répètent et qui pourraient être un problème de performance ...

alors cet article:

http://vacskamati.blogspot.com/2008/10/one-time-execution-of-ie-css.html

ce qui est génial parce que c'est le seul que j'ai trouvé ies pour résoudre ceci ... mais je ne peux pas sembler le faire correctement ....

Ce que j'ESSAIE FAIRE ... émule les "max-width" et "max-height" dans IE ... Je sais FF et evyerthing autre peut le faire directement avec CSS .. Je dois le faire en quelque sorte dans IE6 et IE7 ...

Je sais que je pourrais utiliser JS à l'extérieur, mais comme vous le ferez voir dans mon code ... Je vais essayer de mettre des valeurs php ... donc j'ai besoin d'avoir un peu de contrôle directement dans l'expression pour qu'il ne s'exécute automatiquement qu'une seule fois et que je n'aie pas besoin d'écrire des fonctions JS ailleurs. ..Je pense que cela devrait être très simple ... mais je peux juste l'obtenir ... de toute façon ... mon code est quelque chose liek cela ....:

<div id="div_id" 
    style=" 
      max-height:<?php echo $height_var; ?>; 
      -$height: 
       expression( 
          if(document.getElementById('div_id').offsetHeight><?php echo $height_var; ?>){ 
          document.getElementById('div_id').style.height = '400px' 
          } 

         ); 
      overflow:scroll; 
      " > 
    content--lbalbalbalbalblablablalb 
</div> 

Sooo ... mmm c'est l'idée de base ... J'ai déjà essayé différentes façons dont l'article ci-dessus tente d'expliquer, j'ai déjà essayé d'envoyer un mail au mec, mais en attendant la réponse possible , J'expose ce problème à la communauté SO parce qu'il est très étrange de ne pas pouvoir trouver une réponse pour quelque chose que je pense pourrait être simple ...

Donc pour l'instant ... pour autant que je connaisse les répétitions EXPRESSION lui-même .. et je reçois le SCROLL si le contenu original est plus grand que 400px .... mais je sais qu'il se répète cause ... si j'envoie un "alerte()" il apparaît tout le temps .... donc. ... encore une fois COMMENT PUIS-JE OBTENIR UNE EXPRESSION UNE FOIS ... donc IE ne l'évalue pas mousemove ou toute action ....

Merci d'avance =) (et désolé pour mon code en retrait bizarre ...= P)

+0

Pardonnez mon ignorance, mais pourquoi '- $ height: 'au lieu de' height: '? – shanethehat

+0

ah, ouais, mmm, j'ai lu dans les commentaires du deuxième article, que l'utilisation du hack - $ était que IE6 et IE7 seulement lisent l'expression = P, mais je suppose que c'est un peu optionnel? – Edward

+0

Qu'espérez-vous que le contenu occupe plus d'espace que l'élément parent? – Dor

Répondre

0

Je ne sais pas exactement ce que vous voulez, mais j'espère que cela aidera:

Emuler max-width:

* html div#division 
{ 
    width: expression(document.body.clientWidth > 776 ? "777px" : "auto"); /* sets max-width for IE */ 
} 
div#division 
{ 
    max-width: 777px; /* this sets the max-width value for all standards-compliant browsers */ 
} 

Emuler max hauteur

* html div#division 
{ 
    height: expression(this.scrollHeight > 332 ? "333px" : "auto"); /* sets max-height for IE */ 
} 
div#division 
{ 
    max-height: 333px; /* sets max-height value for all standards-compliant browsers */ 
} 

http://perishablepress.com/press/2007/01/16/maximum-and-minimum-height-and-width-in-internet-explorer/

Notez que l'expression CSS d'une seule fois n'est plus prise en charge. http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx

+0

Salut, merci pour la réponse, malheureusement j'ai déjà été sur ce site, et j'ai essayé de contacter le gars pour poser la même question, il explique même dans les commentaires que IE "se poursuit" vous mettez les mêmes valeurs, c'est pourquoi vous mettez un "-1" à la valeur que vous voulez, comme "332? 333" ... Alors merci, mais cela ne résout pas la question originale sur la façon de ne faire que l'expression une seule fois = P – Edward

0

max-width et max-hauteur DO travail dans IE (buggy 6). Assurez-vous de:

  • Ajouter importante: style="max-height: 200px !important"
  • Ajouter DOCTYPE "- // W3C // DTD XHTML 1.0"

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"> <div style="border: red thin dotted; max-height: 40px !important; overflow: hidden"><pre>qwerty qwerty qwerty</pre></div>

+0

mmm ... merci je suppose, je vais essayer plus tard parce que maintenant je ne suis pas à cet ordinateur, mais, je vais devoir à travers deux choses à vous espérer que vous pouvez répondre, mmm: 1- cela fonctionne sans le doctype? parce que je ne peux pas l'utiliser, désolé, et je suppose que ça ne va pas aller sans ça? .. IDK 2- Je pense qu'il ne répond pas à l'original "comment faire une seule fois l'expression CSS", mais si cela fonctionne pour la hauteur maximale puis je vais voter = = – Edward

+1

http://msdn.microsoft.com/fr-fr/library/ms530809(VS.85).aspx "Cette propriété est activée seulement dans la section strict! DOCTYPE. " Je n'ai pas répondu à la question initiale, mais j'ai résolu le problème original (: – friendzis