Cita:
Iniciado por Mikmoro No, me refiero a que se complica cuando quieres cambiar algo de un elemento que funciona bien en todos los navegadores. Por ejemplo, si quieres cambiar un fondo, tendrás que editar las tres hojas de estilo, mientras que si cargas la hoja general, y luego según el navegador cargas una hoja sólo con las diferencias con vuestro sistema, al cambiar ese fondo sólo habría que cambiar la hoja general. Vamos, digo yo
Mikel.
Pues sí. Es un problemita serio.
Lo que se me ocurre es trasladar toda esa carga dinámica a la hoja de estilos en lugar del HTML. Para esto tenemos que darle extensión
.php a nuestra hoja de estilos.
En el html se incluye como una hoja normal, pero con la extensión distinta:
Código PHP:
<link href="estilos.php" rel="stylesheet" type="text/css" media="screen" />
En
estilos.php (la hoja de estilos dinámica) comenzar definiendo el header para que el servidor lo interprete como tal:
Código PHP:
<?php
header("Content-type: text/css");
?>
Luego incluir la función y proceder a cambiar los estilos según vayan presentándose:
Código PHP:
<?php
header("Content-type: text/css");
function ObtenerNavegador($user_agent) {
$navegadores = array(
'Opera' => 'Opera',
'Safari' => 'Safari',
'Mozilla Firefox'=> '(Firebird)|(Firefox)',
'Galeon' => 'Galeon',
'Mozilla'=>'Gecko',
'MyIE'=>'MyIE',
'Lynx' => 'Lynx',
'Netscape' => '(Mozilla/4\.75)|(Netscape6)|(Mozilla/4\.08)|(Mozilla/4\.5)|(Mozilla/4\.6)|(Mozilla/4\.79)',
'Konqueror'=>'Konqueror',
'Internet Explorer 7' => '(MSIE 7\.[0-9]+)',
'Internet Explorer 6' => '(MSIE 6\.[0-9]+)',
'Internet Explorer 5' => '(MSIE 5\.[0-9]+)',
'Internet Explorer 4' => '(MSIE 4\.[0-9]+)',
);
foreach($navegadores as $navegador=>$pattern){
if (eregi($pattern, $user_agent))
return $navegador;
}
return 'Desconocido';
}
$navegador = ObtenerNavegador($_SERVER['HTTP_USER_AGENT']);
?>
/* Comienzan los estilos normalmente */
div.enlace {
font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: bold;
background: #777;
<?php if($navegador == 'Internet Explorer 6') { ?>
width: 121px;
<?php } elseif($navegador == 'Opera') { ?>
width: 123px;
<?php } else { ?>
width: 120px;
<?php } ?>
height: 30px;
line-height: 30px;
margin: 20px auto;
}
Explicando mejor la propuesta: se incluiría una sola hoja de estilos en lugar de varias. Luego se trabajaría toda esa parte dinámica en la misma. Eso solucionaría el problema. Creo