Was WENN du das nicht kennst?
Beat
- css
1 LX- meinung
0 Cheatah0 Beat0 ChrisB0 Beat
0 Texter mit x
1 Sven Rautenberg
Wer hat uns das denn eingebrockt?
Da erdichtet man eine Sprache, und hofft, dass alle so freundlich sind, das zu verstehen. Was aber WENN du das nicht verstehst?
Wir wissen. CSS Regeln, die einem Browser unbekannt sind, darf dieser einfach ignorieren. Warum Können wir aber nicht sagen:
p.special{ display: block; }
@IF display: inline-block {
p.special{ display: inline-block; }
}
Ein Browser, der die @IF Regel nicht versteht, sollte den ganzen @Block ignorieren.
Ein Browser, der @IF versteht, muss so ehrlich sein, den Block zu überspringen, wenn er die der IF folgenden Frage nicht beantworten kann.
Nur ein Browser, der @IF versteht, und die nächste Frage positiv beantworten kann, soll den Block interpretieren.
Ist doch klar oder? Gehört doch zu den normalen Regeln der Kommunikation.
Schreibt es ihnen ins CSS3 Lehrbuch für Anstandsregeln.
Nun ja.
Da gibt es anscheinend [if] Klauseln
http://www.conditional-css.com/
Trotzdem meine Frage: Kann doch nicht der Weisheit letzter Schluss sein, Borwser zu matchen, wenn ich wissen will ob XY (=mir unbekanntes CSS Parser Objekt) eine Eigenschaft kennt.
mfg Beat
Es gibt da eine Firma in Redmond, die ungeachtet der Tatsache, dass die Software, die sie als Browser vertreibt, nur in begrenztem Maße standardkonform ist, durch geschickte Geschäftspolitik und Lobbyismus zum Quasi-Monopolisten aufgestiegen ist... natürlich wissen wir das alle schon.
Wenn sich alle an die Standards halten würden, bräuchten wir keine Conditional Comments, Conditional CSS, Browserhacks und sonstige Auswüchse, die eine große Anzahl sehr unterschiedlicher Clients vom Entwickler fordert.
Andererseits wäre die Mehrzahl von uns dann wahrscheinlich arbeitslos.
Gruß, LX
Hi,
Wir wissen. CSS Regeln, die einem Browser unbekannt sind, darf dieser einfach ignorieren. Warum Können wir aber nicht sagen:
p.special{ display: block; }
@IF display: inline-block {
p.special{ display: inline-block; }
}
warum kannst Du nicht einfach display:inline-block sagen? Wenn der Browser es nicht versteht, wird er es ignorieren. Wo ist das Problem, wozu sollte ein "IF" nützen?
Ein Browser, der @IF versteht, muss so ehrlich sein, den Block zu überspringen, wenn er die der IF folgenden Frage nicht beantworten kann.
Nur ein Browser, der @IF versteht, und die nächste Frage positiv beantworten kann, soll den Block interpretieren.
Und Du glaubst wirklich, bei der aktuellen Unterstützung - siehe LX' Antwort - würden gewisse Browserhersteller so nett sein, dies auch tatsächlich in Deinem Sinne zu implementieren? Genauer gefragt: ... in Deinem Sinne vor fast einem Jahrzehnt implementiert zu haben?
Trotzdem meine Frage: Kann doch nicht der Weisheit letzter Schluss sein, Borwser zu matchen, wenn ich wissen will ob XY (=mir unbekanntes CSS Parser Objekt) eine Eigenschaft kennt.
Spare Dir das Gerede von "der Weisheit letzter Schluss", wenn wir noch an der Weisheit letzten Schuss ins Knie knabbern.
Cheatah
Wir wissen. CSS Regeln, die einem Browser unbekannt sind, darf dieser einfach ignorieren. Warum Können wir aber nicht sagen:
p.special{ display: block; }
@IF display: inline-block {
p.special{ display: inline-block; }
}warum kannst Du nicht einfach display:inline-block sagen? Wenn der Browser es nicht versteht, wird er es ignorieren. Wo ist das Problem, wozu sollte ein "IF" nützen?
Weil ich im If Block jene Browser ansprechen will, die eine Eigenschaft verstehen, damit diese Anweisung eine vorherige überschreibt.
Ich kann nicht einfach sagen:
p.special{
float:left;
display:inline-block;
}
Da komm ich nirgends hin.
Ich muss sagen können:
p.special{
float:left;
}
@IF display;inline-block{
p.special{
float:none;
display:inline-block;
}
}
Ein Browser, der @IF versteht, muss so ehrlich sein, den Block zu überspringen, wenn er die der IF folgenden Frage nicht beantworten kann.
Nur ein Browser, der @IF versteht, und die nächste Frage positiv beantworten kann, soll den Block interpretieren.Und Du glaubst wirklich, bei der aktuellen Unterstützung - siehe LX' Antwort - würden gewisse Browserhersteller so nett sein, dies auch tatsächlich in Deinem Sinne zu implementieren? Genauer gefragt: ... in Deinem Sinne vor fast einem Jahrzehnt implementiert zu haben?
Ja hätt ich gerne von Geckos etc.
Bei MSIE kann ich ja conditional comments verwenden.
Es hat definitiv nichts mit Redmond zu tun, sondern mit Grundsätzen von Sprachen, die nicht die Fähigkeit eines Interpreters dokumentieren, sondern die Unfähigkeit der Interpreter mit ein kalkuieren müssen.
Wie wollen die denn die CSS3 Module je gesteuert implementieren. Das wird ein endloses Gewurschtel.
mfg Beat
Hi,
Ich kann nicht einfach sagen:
p.special{
float:left;
display:inline-block;
}
Doch, kannst du sagen.
Da komm ich nirgends hin.
Wo willst du denn ueberhaupt hin?
Ich muss sagen können:
p.special{
float:left;
}
@IF display;inline-block{
p.special{
float:none;
display:inline-block;
}
}
Und was soll das letztendlich bewirken?
Wenn float einen von none abweichenden Wert hat - dann fuehrt inline-block sowieso zu einem computed value von block fuer display.
Das taugt als Beispiel also mal irgendwie ueberhaupt nichts.
MfG ChrisB
Ich kann nicht einfach sagen:
p.special{
float:left;
display:inline-block;
}Doch, kannst du sagen.
Da komm ich nirgends hin.
Wo willst du denn ueberhaupt hin?
Ich will mit den Eigenschaften von mir unbekannten Browsern arbeiten können.
Ich will eine Eigenschaft nutzenm aber nur dann, wenn sie bekannt ist.
An diese Egenschaftskenntnis können dann noch ganz andere Definitionen gebunden sein. Ergo muss ich einen ganzen Block selektieren können mit einer @IF Regel.
Ich muss sagen können:
p.special{
float:left;
}
@IF display;inline-block{
p.special{
float:none;
display:inline-block;
}
}Und was soll das letztendlich bewirken?
Wenn float einen von none abweichenden Wert hat - dann fuehrt
inline-block sowieso zu einem computed value von block fuer display.
Und warum setze ich im IF block extra float:none?
Das taugt als Beispiel also mal irgendwie ueberhaupt nichts.
Nicht überall wo der Leser versagt, taugt das Beispiel nichts.
Situation 1.
Browser A versteht @IF nicht
Browser B versteht @IF aber er versteht nicht display:inline-block
Browser C versteht beides.
Browser A macht:
p.special{
float:left;
}
aber verwirft
@IF ...{ }
ergebnis:
float.left wie gewpnscht
Browser B macht:
p.special{
float:left;
}
aber versteht
@IF { }
aber kennt de Eigenschaft display:inline-block nicht.
@IF evaluiert zu NULL, ergo verwirft er den Block
Ergebnis: float:left wie gewünscht.
Browser C versteht alles, und wird float:none und display:inline-block als letztes an diesem Punkt gültiges CSS evaluieren.
mfg Beat
Hi,
Und warum setze ich im IF block extra float:none?
Oh, das hatte ich in der Tat uebersehen.
Browser A macht:
float.left wie gewpnscht
Browser B macht:
Ergebnis: float:left wie gewünscht.
Browser C versteht alles, und wird float:none und display:inline-block als letztes an diesem Punkt gültiges CSS evaluieren.
Und welchen Gewinn hast du jetzt daraus?
Warum soll Browser C nicht auch float:left bekommen, wenn das offenbar den Effekt erzielt, den du haben willst?
Jetzt sag nicht, weil er float:left nicht verstuende - danach hat dein IF ja nicht mal gefragt.
MfG ChrisB
Moin!
Ich muss sagen können:
p.special{
float:left;
}
@IF display;inline-block{
p.special{
float:none;
display:inline-block;
}
}
Situation 1.
Browser A versteht @IF nicht
Browser B versteht @IF aber er versteht nicht display:inline-block
Browser C versteht beides.Browser A macht:
p.special{
float:left;
}aber verwirft
@IF ...{ }
ergebnis:
float.left wie gewpnschtBrowser B macht:
p.special{
float:left;
}
aber versteht
@IF { }
aber kennt de Eigenschaft display:inline-block nicht.
@IF evaluiert zu NULL, ergo verwirft er den BlockErgebnis: float:left wie gewünscht.
Browser C versteht alles, und wird float:none und display:inline-block als letztes an diesem Punkt gültiges CSS evaluieren.
Situation 2: Browser versteht zwar inline-block, aber nicht float. Ergebnis: Zusammenbruch.
Situation 3: Browser versteht inline-block und float, hat aber einen Darstellungsbug bei deren Kombination. Ergebnis: Zusammenbruch.
Unter dem Strich: Deine IF-Abfrage in CSS ist genauso uncool wie die existierenden IF-Abfragen in Javascript:
if (document.all) {
// hier nehmen wir an, dass wir es mit einem IE zu tun haben, der alles kann, was IEs so können, auch wenn diese Idee falsch ist, weil Alternativbrower Versuche unternommen haben, document.all nachzubilden...
}
Das Resultat deines Vorschlages müsste realistisch betrachtet dazu führen, dass für jede verwendete Eigenschaft im CSS eine IF-Abfrage prüft, ob diese Eigenschaft vom Browser verstanden wird. Das passiert aber ja bereits jetzt. Der einzige Vorteil wäre, dass man Kombinationen von Eigenschaften abhängig vom Prüfungsergebnis verwenden könnte. Das Problem dabei bliebe, dass jede dieser Kombinationen eigentlich vollständig geprüft und mit IF abgedeckt werden müsste, andernfalls ginge der Vorteil des "Ich muss mich nicht um die Fähigkeiten des Browsers kümmern, der ignoriert den Teil im Zweifel einfach" verloren. Solche IF-Konstrukte würden dann aber so aufwendig, dass sie nicht mehr überschaubar wären.
Im Gegensatz dazu kann man mit den bekannten Browser-Hacks, die auf dem (Un-)Verständnis der Browser für spezielle CSS-Selektoren aufsetzen, sehr gut leben - so zumindest mein Praxis-Erfahrungswert.
- Sven Rautenberg
Im Gegensatz dazu kann man mit den bekannten Browser-Hacks, die auf dem (Un-)Verständnis der Browser für spezielle CSS-Selektoren aufsetzen, sehr gut leben - so zumindest mein Praxis-Erfahrungswert.
Und mit welchem Selektorhack kann ich ich die Gleichung vollstrecken
Wenn du diesen Selektor richtig anwendest: display:inline-block?
Hinweis. ich kann MSIE immer separat steuern über eine nur ihm sichtbare #msie ID. Das ist nicht das Problem. Aber es geht um Geckos < 1.9.
mfg Beat;
Hi,
Und mit welchem Selektorhack kann ich ich die Gleichung vollstrecken
Wenn du diesen Selektor richtig anwendest: display:inline-block?
Mit gar keinem, weil display:inline-block kein Selektor ist.
Hinweis. ich kann MSIE immer separat steuern über eine nur ihm sichtbare #msie ID. Das ist nicht das Problem. Aber es geht um Geckos < 1.9.
Bei denen kann man's mit -moz-inline-block probieren.
Und wenn's damit auch nicht funktioniert - dann laesst man's eben bleiben, und nimmt in Kauf, dass es in einem veralteten Browser nicht wie gewuenscht aussieht.
MfG ChrisB
Hi,
Bei denen kann man's mit -moz-inline-block probieren.
-moz-inline-box oder -moz-inline-stack liefern hier oft bessere, wenn auch nicht unbedingt voll zufriedenstellende, Resultate.
Bei denen kann man's mit -moz-inline-block probieren.
-moz-inline-box oder -moz-inline-stack liefern hier oft bessere, wenn auch nicht unbedingt voll zufriedenstellende, Resultate.
Problem ist, wenn ein solches Element einen position:relative Anker darstellen für ein absolut positioniertes Child-Element.
Der Positions-Anker wird einfach auf das nachst höhere parent Element verschoben.
mfg Beat
Hallo,
Aber es geht um Geckos < 1.9.
Ein Auslaufmodell. Mit Firefox 2 wurde ja bereits der am weitesten verbreitete Gecko-1.8-Browser aus dem Verkehr gezogen. Die nächste Monate sollte der Marktanteil damit auf faktisch Null fallen.
Eventuell kannst du dir zu nutze machen, dass momentan Gecko die einzige Engine ist, die nicht als text/css versendete Stylesheets, nicht verarbeiten.
Heißt in etwa, du schreibst deine Stylesheets zuerst für Gecko und dann mit einer text/plain-CSS-Datei für alle anderen.
Ok, das löst leider nicht das Problem der Unterscheidung 1.8 oder 1.9 ..
Zudem musst du beachten, dass dank Acid3 Opera 10 und Safari 4 nicht-text/css-Stylesheets ebenfalls ignorieren werden. Bis diese beiden jedoch veröffentlicht sind ist der Gecko 1.8 Marktanteil ohnehin vernachlässigbar.
@@Beat:
Aber es geht um Geckos < 1.9.
Dann ist wohl der Thread Selektor nur für Firefox 2? was für dich.
Live long and prosper,
Gunnar
@@Beat:
Aber es geht um Geckos < 1.9.
Dann ist wohl der Thread Selektor nur für Firefox 2? was für dich.
#foo[id="FOO"], x:-moz-any-link {bar: baz}
dürfte den FF2 ansprechen (Gross-Kleinschreibung in der ID)
Ich kann es selber zur Zeit nicht testen. Müsste mir den FF2 noch installieren.
:default als sichtbares Kriterium zwischen FF2 und FF3 hat den Schönheitsfehler, dass es nur begrenzt anwendbar ist, und praktisch für meinen Fall nicht anwendbar.
Nach der diversen Lektüre finde ich meinen ursprünglichen Vorschlag mit @IF überlegenswert. CSS Hacks sind generell eine schlechte Sache.
mfg Beat
... mit ein kalkuieren müssen.
Wenn es schon um Grundsätze von Sprachen geht, das tut mir in den Augen weh (und ich meine nicht das fehlende L). Ich hoffe, es war nur vertippt.
Moin!
Nun ja.
Da gibt es anscheinend [if] Klauseln
http://www.conditional-css.com/
Ein serverseitiges Skript, welches die inhaltlich unsichere Angabe HTTP_USER_AGENT auswertet und das CSS dann entsprechend dynamisch zurechtstutzt. Genauso könntest du mit Javascript dahergehen, und Eigenschaften des navigator-Objekts auswerten, um darauf aufbauend am CSS zu werkeln.
Ist alles nicht wirklich vernünftig - man sollte von solchen Basteleien die Finger lassen. Zumal die Fragestellung "Was kann der Browser" damit ja auch noch gar nicht beantwortet ist - diese Info muss man immer noch selbst hinzufügen.
- Sven Rautenberg