May 1, 2005
Hur får jag IE att bortse ifrån vissa attribut som jag har i en CSS?
Exempel:
CSS
.menupopup {
Z-INDEX: 3000;
POSITION: absolute;
DISPLAY: none;
(detta ska inte =<IE7 se)
MARGIN-BOTTOM: 17px
BOTTOM: 0px;
RIGHT: 1px;
(/detta)
(detta ska bara =< IE7 se)
MARGIN-LEFT: 55px;
LEFT: 1px;
TOP: 0px;
(/detta)
}
Jag kan ju givetvis lägga in det som
generic.css
.menupopup {
Z-INDEX: 3000;
POSITION: absolute;
DISPLAY: none;
}
<!--[if !lte IE 7]>
non-ie_crap.css
<![endif]-->
.menupopup {
MARGIN-BOTTOM: 17px
BOTTOM: 0px;
RIGHT: 1px;
}
<!--[if lte IE 7]>
ie_crap.css
<![endif]-->
.menupopup {
MARGIN-LEFT: 55px;
LEFT: 1px;
TOP: 0px;
}
Men det blir så klöddigt med tre filer. En huvudfil som det ska vara i moderna webbläsare och sen en anus-fil för IE7 och äldre vore najs. Går det så att säga radera attribut som har laddats in i en tidigare CSS och bortse ifrån dessa, vilket isf skulle göras i ie_crap.css? För det funkar inte att exempelvis sätta "RIGHT: 0px" i efterhand för då existerar attributet och ställer till problem i renderingen.
Några idéer?
March 14, 2001
Det går ju alltid att lösa det genom att ha två css-filer, en för alla vettiga browser och en annan för IE.
Om jag minns rätt.
<link rel="stylesheet" type="text/css" href="not-ie.css" />
<link rel="stylesheet" type="text/css" href="ie.css" />
Annars ska det inte vara några problem att ha flera css attribut eftersom de skrivs över av nästa, så länge man det specifika för IE sist. Så har jag själv gjort flera gånger.
En annan lösning är att göra tex såhär:
body
{
background: white; /* all browsers */
*background: black; /* black on ie7 only */
_background: blue; /* blue on ie 6 only */
}
May 1, 2005
Snorch wrote: Det går ju alltid att lösa det genom att ha två css-filer, en för alla vettiga browser och en annan för IE.
Om jag minns rätt.
<link rel="stylesheet" type="text/css" href="not-ie.css" />
<link rel="stylesheet" type="text/css" href="ie.css" />
Jo, men då har du en extra CSS för den generiska koden som funkar i båda webbläsarna, därav tre filer totalt. Om man bara har de ovanstående så har man två uppsättningar kod där 99% är identiskt, och det blir extra arbete att underhålla två filer som ska ha samma innehåll.
Snorch wrote: Annars ska det inte vara några problem att ha flera css attribut eftersom de skrivs över av nästa, så länge man det specifika för IE sist. Så har jag själv gjort flera gånger.
En annan lösning är att göra tex såhär:body
{
background: white; /* all browsers */
*background: black; /* black on ie7 only */
_background: blue; /* blue on ie 6 only */
}
Njae, att skriva över ett attribut är inte samma sak som att bortse ifrån det. Säg att den generiska koden har "BOTTOM: 0px;" för en klass, så kan jag inte få ie att bortse ifrån denna i efterhand. Att sätta "BOTTOM: null;" funkar ju inte. För så fort jag sätter ett värde på ett attribut så sätter det ett constraint, och sen går det bara att ändra värde på det, inte få det att försvinna.
March 14, 2001
Nej jag tänkte mer att du använder två filer med allt i, mer arbete blir det såklart (om man nu ändrar så mycket när det väl är klart) men man har å andra sidan allt samlat, inga "include"-filer.
Inser att jag inte läste dina exempel ordentligt.
Ska det inte gå att använda [if IE] före själva css-koden, likt det nedan. Har för mig jag sett något sånt exempel tidigare. Prova släng in det på varje rad i första koden du har i först inlägget.
[if ! IE] MARGIN-BOTTOM: 17px
[if lte IE] MARGIN-LEFT: 55px;
osv.
1 Guest(s)