CSS - detekce prohlizece vs. hack

Co je podle vas lepsi,

a) detekovat prohlizec a poslat mu soubor se styly upraveny specialne pro nej (opera.css , ie.css);

b)nebo pouzivat jeden soubor se styly pro vsechny prohlizece s hack-y napr. pro IE !validita

Co pouzivate vy? ja bych preferoval prvni zpusob.
Detekce prohlížeče mi přijde zbytečně složitá, a pokud závisí na javascriptu, je navíc nespolehlivá.

Odřezávací CSS hacky nemusí být nutně nevalidní. Hezká sbírka je třeba tady:
http://imfo.ru/csstest/css_hacks/import.php
>> Detekce prohlížeče mi přijde zbytečně složitá, a pokud závisí na javascriptu, je navíc nespolehlivá.

Proc JS? Staci vzit UserAgenta a PHP podstrci stylesheet. Pokud user-agent bude mozilla 4.0, bude to nejspis IE, pokud 5.0, bude to gecko browser.

<link rel="stylesheet" type="text/css" href="css.php">

css.php:

<?
if (strpos($_SERVER['HTTP_USER_AGENT'],"Mozilla/4.0") != false):
include ("ie.css"); // styl pro IE
elseif (strpos($_SERVER['HTTP_USER_AGENT'],"Mozilla/5.0") != false):
include ("gecko.css"); // styl pro gecko
else:
include ("hacked.css"); // styl s hacky
endif;
?>

Urcite by se to jeste dalo zlepsit, napr. uzitim regexp, ktery neumim, atp. :-(
Sojkovec: Takto bych to nedelal, user agent by se mohl fakovat. Spis jine zpusoby, co treba vytahnout, zda prohlizec umi XHTML? Pokud ano, je to Gecko, Opera nebo Safari. Pro zbytek se hodi jinej stylesheet.
A jak vytáhneš, zda prohlížeč umí tu zbytečnou XHTML šílenost?
jj. HTTP_ACCEPT se dá použít.
< ALL >
Co tadhle :
..
< h2>Jaký je váš prohlížeč?< /h2>
< a href="homepage.php?browser=ie">Internet Explorer</a>< br />
< a href="homepage.php?browser=gecko">Mozilla/Opera</a>
< a href="homepage.php?browser=other">Jiný</a>
..

Homepage :
...
< ? if ($browser=="ie"): echo "< link rel="stylesheet" media="screen, projection" type="text/css" href="ie.css" />";
elseif ($browser=="gecko"): echo "< link rel="stylesheet" media="screen, projection" type="text/css" href="gecko.css" />";
elseif ($browser=="other"): echo "< link rel="stylesheet" media="screen, projection" type="text/css" href="other.css" />";
else: echo "< link rel="stylesheet" media="screen, projection" type="text/css" href="other.css" />";
endif;
? >
...

Tak co? ;-)
Chybí ti tam možnost : Vůbec netuším ... Co to je prohlížeč ? ?
a možnost "Jsem blbá sekretářka, jak se tudy dostanu na xChat?"
Navrhuji toto:

<?php

if ($browser=="ie") { echo "
Vas internetovy prohlizec obsahuje mnoho chyb. Stahnete si novejsi verzi -
<a href=\"http://www.opera.com/download/\"> ZDE </a> ";

else include("styl.css");
?>

;-)
hehe, souhlasím!

nebo bych to dokonce přepsal na "váš prohlížeč je příliš zastaralý a obsahuje příliš mnoho chyb"
< Nípal & Hanyz >
A taky možnost "Počkejte; 'Miláčku, jakej máme prohlížeč?' ".
Kyk a Nípal : Bezva Finta ! ;-)

Trochu bych upravil ten Sojkovcův skript:

if (strpos($_SERVER['COMPUTER_USER_AGENT'],"Blba_sekretarka/4.0") != false):
include ("ie.css"); // styl pro IE
>> Chybí ti tam možnost : Vůbec netuším ... Co to je prohlížeč ? ?

V tom případě to bude asi IE ne?:)))
Ja pouzivam tak akorat podrzitkovy hack. Predstava, ze bych mel psat pro kazdy browser samostatny stylesheet se mi nezamlouva. Navic alternativni prohlizece casto zasilaji falesne hlavicky, tak je to stejnak na houby. Ackoliv uznavam, ze bych mel vypracovat alespon jeden styl navic pro archaicke prohlizece typu IE 3.0, Opera 4.0, ale nejak se k tomu nemuzu dokopat :-/.
Styly v praxi...
Na svojí online hře (někdo by řekl pokusu, ehm...:)) jsem prostě dal zaregistrovaným lidem na výběr. Prosím vyberte si menu:
Postranní menu (CSS) - pro prohlížeče
Postranní menu (MSIE) - (no comment)

a je to ;-) Jenže tohle neřeší vaše problémy ;-(
>> Takto bych to nedelal, user agent by se mohl fakovat.

To vsechno jsou vyjimecny pripady. Ono je pitomost prohlizec nejak fakovat.

Kyk: ;-)
MLe: a co treba $_POST['browser'] hm?
f ($browser=="ie") { echo "
Vas internetovy prohlizec obsahuje mnoho chyb. Stahnete si novejsi verzi -
<a href=\"http://www.opera.com/download/\"> ZDE </a> ";

Opera (pokud vím) taky obsahuje mnoho chyb
if ($browser=="ie" || $browser=="opera") { echo "
Vas internetovy prohlizec obsahuje mnoho chyb. Stahnete si novejsi verzi -
<a href=\"http://www.czilla.cz/\"> ZDE </a> ";
if ($os == "windows")

{echo "Vas system je nutne zaplatovat.\n
<a href=\"http://www.slax.cz\">Patch stahnete zde.</a>"; }
opera a mnoho chyb? lol, a mozilla jich má jako míň? tady se někdo snaží někoho vyprovokovat k flamewar, ale já to nejsem.
když na nějkaý stránky koukám v mozille a nezobrazí se správně,tak je to většinou chyba stránek. když na stránky koukám v opeře a nezobrazí se správně,bývýá to chyba opery...

btw. co mam dělat abych tam moh napsat zavináč a nesputila se mi validovací stránka? (ctrl alt v)? Proč tam nefungujou acceskeye?
eh, já s psaním zavináče problém nemám. Alt Gr + 2, nebo přepnout na EN klávesnici a Shift + 2, nebo Ctrl + Alt + 2 (tohle možná je tím, že přepínání jazyků mám na Shift + Ctrl)... nespouští se mi validovací stránka ani v jednom případě.

pokud se mi zobrazí stránka špatně v opeře, není to chyba opery, ale taktéž těch webdyzajnérů, protože třeba nevěděj, že správný box model je kvůli kompatibilitě počítán v opeře až od html 4.01 strict ;) což je snad i korektněji, než mozilla, protože mám dokonce pocit, že ke starším verzím html správný box model nepatří, protože se asi počítal tak jak počítá ie.
co třeba Alt + 64 :)
Podobný problém v C++ Builderu - pitomci dali shortcut na českou složenou závorku... tak musím psát Alt + 123 (a už to dělám i v PSPadu... :))