48 votes

Emulation des bordures et des zones de contour CSS3 dans IE7 / 8

Je suis en train de travailler sur le format HTML pour une petite application web; la conception des appels d'une zone de contenu avec des coins arrondis et une ombre portée. J'ai été en mesure de produire ce avec CSS3, et il fonctionne parfaitement sur Firefox et Chrome:

CSS3 Version

Toutefois, Internet Explorer 7 et 8 (pas de soutien CSS3) est une autre histoire:

Internet Explorer Version

Est-il facile, léger JavaScript solution qui me permettrait de 1) IE utilisation de fonctionnalités spécifiques pour atteindre cet objectif, ou 2) la modification du DOM (par programmation), de telle manière qui ajoute des images personnalisées autour de la zone de contenu pour émuler l'effet?

30voto

Jordan Arron Points 20994

Consultez cet article: http://www.smashingmagazine.com/2010/04/28/css3-solutions-for-internet-explorer/

Il couvre spécifiquement les coins arrondis et l'ombre de la boîte pour CSS3 dans IE7 / 8.

27voto

Braxo Points 550

C'est ma méthode, j'utilise le conditionnel pour cible les fichiers CSS pour IE navigateurs.

Disons que vous avez votre div avec l'id #page_container. Dans votre maîtrise régulière.css et css3.fichier css, vous donnez la largeur, la hauteur, des coins arrondis et une ombre portée avec les styles.

Maintenant, quand IE frappe votre page, il va tirer dans la condition de css que vous aviez mis en place. Pour la même div#page_container, vous pouvez modifier la largeur d'un bit, la hauteur, peut-être que certains remplissage, puis de lui donner une image de fond d'écran pour la faire ressembler à l'ombre, arrondi d'angle version.

De sorte que votre tête va avoir ceci:

<head>
<link rel="stylesheet" type="text/css" href="master.css" />
<!--[if lte IE 8]> <link rel="stylesheet" type="text/css" href="ie.css" /> <![endif]-->
</head>

Dans le maître.fichier css, vous avez cette définition pour votre div principale:

div#page_container {
  width: 960px;
  height: auto;
  padding: 10px 10px 10px 10px;
  background: #ccc;
  drop-shadow: whatever...
  rounded-corner: whatever...
}

Maintenant, dans votre ie.fichier css, et parce qu'il est référencé dans le deuxième, la définition de la cascade vers le bas de sorte que vous pouvez le modifier un peu:

div#page_container {
  width: 960px;
  height: auto;
  padding: 15px 15px 15px 15px; /* this is key */
  background: #ccc url(/path/to/image.file) no-repeat top left;
}

Ajouter juste assez de rembourrage supplémentaire ainsi les ombres portées s'inscrivent dans votre background-image. Car il des cascades vers le bas, il va remplacer l'original 10px padding-vous eu, d'élargir le modèle de boîte pour s'adapter dans votre extra ombre graphiques.

Quelques avantages de cette méthode sont:

  • Seulement IE va voir à cette définition, et l'appel à l'image. Si c'est un fort volume de l'app, qui vous permettra d'économiser de la bande passante et les retards associés à l'appel.
  • De même, parce que vous n'avez pas coder en dur dans le coin arrondi graphiques que chaque navigateur voir, vos utilisateurs de Firefox et Safari n'aurez pas besoin de frapper le serveur avec image supplémentaire des appels.
  • Pas besoin d'ajouter encore un autre plug-in javascript qui vérifie pour IE, crée de nouvelles de balisage, de temps, etc...

24voto

meo Points 10534

Tout d'abord, je tiens à mentionner qu'il n'existe pas de solution parfaite pour ce jusqu'à ce que IE9, où le CSS border-radius va être mis en œuvre.

Voici les différentes solutions que vous avez jusqu'alors:

Vous pouvez utiliser l'un des nombreux scripts JS qui simule des coins arrondis. Mais aucun d'entre eux de mettre en œuvre l'ombre correctement. Voici la liste des scripts que j'ai essayé et mes conclusions. Tous ces scripts ont quelque chose en commun, ils sont à placer des éléments supplémentaires dans votre code HTML afin de vous donner l'illusion de coins arrondis.

  • DD Roundies: Ce script est très léger, une marche plutôt bien. Il fonctionne sans aucun cadre et joue de nice avec jQuery & Prototype (je suppose que sa fonctionne bien avec les autres, mais je ne peux pas dire pour sûr). Il utilise les propriétés CSS3 sur les navigateurs qui supportent CSS3. Et utilise le même hack comme tous les autres, pour IE. Le antialiazing sur celui-ci fonctionne très bien. edit je dois corriger mon auto ici. Celui-ci fonctionne avec un Fichier HTC. Il n'est pas de placer des éléments supplémentaires dans votre code HTML.

  • Curvy Coins et le jQuery Plugin Curvy Coins: je l'aime. Le antialiazing de travail est très bonne. Et il joue de nice avec des images de fond. Mais il n'a pas jouer gentil avec CSS3 ombres. Il ne permet pas de vérifier si votre Navigateur prend en charge CSS3 et utilise toujours le vilain solution d'ajouter des éléments à votre dom.

  • Chouette Coins & jquery Coin: les Deux ont une mauvaise antialiazing et les coins look très audacieux. jQuery coins a de la difficulté à gérer les images de fond.

Voici la raison pour laquelle aucun d'eux n'est une bonne solution, à mon avis:

curvy corners dom messing screenshot curvy dom mess

nifty dom mess chouette dom mess

Il y a quelques autres, mais je pense qu'ils ne sont pas empêche presque totalement à cet endroit.

Comme vous pouvez le voir, ils sont en ajoutant beaucoup d'éléments à votre dom. Cela peut causer des problèmes si vous souhaitez ajouter des coins arrondis pour une grande quantité d'éléments. Il peut faire quelques anciens navigateur / les ordinateurs plantent. Pour les ombres à peu près le même problème. Il est un plugin jQuery qui gère les ombres sur les boîtes et les polices: http://dropshadow.webvex.limebits.com/

Ma conclusion: Si je fais un petit budget, de l'emploi, c'est à dire les utilisateurs ont des bords et sans ombres. Si le client a de l'argent à dépenser, donc je l'ai fait avec CSS et je fais des images pour chaque coin de rue. Si ils ont absolument besoin d'être là mais il n'y a pas de temps ou pas d'argent pour le faire, j'utilise l'un de ces Scripts JS DD_roundies avec de préférence. Maintenant son jusqu'à vous.

PS: les utilisateurs de IE sont utilisés pour laid interfaces, ils ne vont pas voir que les coins et les ombres sont manquant de toute façon :P

22voto

CTarczon Points 642

Il vient de sortir et il est en version bêta, mais jetez-y un œil : http://css3pie.com/

8voto

MikeM Points 14711

J'ai commencé à utiliser le script .htc trouvé ici: Prise en charge CSS3 pour Internet Explorer 6, 7 et 8

C'est la plus simple implémentation de CSS3 pour IE6 + que j'ai vue.

 
.box {
  -moz-border-radius: 15px; /* Firefox */
  -webkit-border-radius: 15px; /* Safari and Chrome */
  border-radius: 15px; /* Opera 10.5+, future browsers, and now also Internet Explorer 6+ using IE-CSS3 */

  -moz-box-shadow: 10px 10px 20px #000; /* Firefox */
  -webkit-box-shadow: 10px 10px 20px #000; /* Safari and Chrome */
  box-shadow: 10px 10px 20px #000; /* Opera 10.5+, future browsers and IE6+ using IE-CSS3 */

  behavior: url(ie-css3.htc); /* This lets IE know to call the script on all elements which get the 'box' class */
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X