Cómo Crear un Conmutador de Estilos CSS Basado en el Tiempo
Spanish (Español) translation by Jorge Montoya (you can also view the original English article)



Los conmutadores de estilo se han convertido en una característica popular en los sitios web en estos días. Las hojas de estilo CSS permiten a un diseñador web cambiar el aspecto y la sensación de un sitio web con poco esfuerzo. Algunos sitios usan el tipo de conmutadores de estilo "Día" y "Noche" que cambian automáticamente el tema del sitio según la hora del día.
Este tutorial le muestra cómo crear un conmutador de hojas de estilo CSS basado en el tiempo con PHP que le permite cambiar varias hojas de estilo a la vez en momentos específicos del día. ¡También se lanzó un poco de jQuery UI adentro sólo por diversión!
¿Por qué PHP en lugar de JavaScript?
El único inconveniente de usar PHP para un conmutador de hojas de estilo CSS basado en el tiempo es que el tiempo se basa en el servidor de alojamiento web o en una "zona horaria" establecida en el script.
Cuando estaba construyendo mi sitio de portafolio personal, creé un conmutador de hojas de estilo basado en el tiempo utilizando JavaScript y jQuery. La función de tiempo del script funcionó correctamente. Sin embargo, siempre había un breve "flash" de la hoja de estilo predeterminada cuando se cargaban las páginas web.
Los sitios web pesados de JavaScript pueden tener problemas con los conflictos entre varios scripts de JavaScript. En vez de eso decidí utilizar PHP para el conmutador de hojas de estilo CSS. Debido a que PHP es del lado del servidor, no hubo conflictos JavaScript y el script funcionó como se esperaba.
El único inconveniente de usar PHP para un conmutador de hojas de estilo CSS basado en el tiempo es que el tiempo se basa en el servidor de alojamiento web o en una "zona horaria" establecida en el script. Con JavaScript puede configurar las funciones de tiempo para que se basen en la computadora de un usuario.
Antes de que Comencemos
Si usted es nuevo en PHP, debe instalar y configurar un entorno de servidor en su computadora local (los archivos PHP no se pueden ver en un navegador web). Mi preferencia personal es XAMPP. Este artículo incluye algunas opciones de software e instrucciones básicas sobre cómo configurar un servidor local.
Aunque puede utilizar el Bloc de notas para crear y editar archivos PHP, un editor de código puede ser muy útil al escribir páginas web en PHP y otros lenguajes de programación. Consulte estos artículos para obtener información adicional sobre cómo elegir un editor de código:
El código utilizado en el tutorial crea un selector de hojas de estilo CSS básico y puede ver la demostración aquí. Los archivos fuente incluyen dos demostraciones adicionales.
¡Ahora, empecemos!
Paso 1: Cree la primera hoja de estilo CSS (Noche)


Cree una hoja de estilo CSS denominada style-1.css e incluya el siguiente código:
1 |
|
2 |
|
3 |
/* Default Styles
|
4 |
--------------------------------------------------- */
|
5 |
|
6 |
body { |
7 |
margin: 0px; |
8 |
padding: 0px; |
9 |
background: url("../images/bokeh_2.jpg"); |
10 |
background-position: top left; |
11 |
background-repeat: no-repeat; |
12 |
background-attachment: fixed; |
13 |
background-color: #666; |
14 |
font-size: 20px; |
15 |
font-family: Arial, Helvetica, sans-serif; |
16 |
color: #fff; |
17 |
text-align: left; |
18 |
}
|
19 |
|
20 |
#wrapper { |
21 |
width: 965px; |
22 |
margin: 0 auto; |
23 |
position: relative; |
24 |
}
|
25 |
|
26 |
a:link, a:visited, a:active { |
27 |
color: #99ccff; |
28 |
}
|
29 |
|
30 |
a:hover { |
31 |
color: #0073ea; |
32 |
}
|
33 |
|
34 |
.content_container_1 { |
35 |
float: left; |
36 |
width: 650px; |
37 |
margin: 0px 0px 60px 0px; |
38 |
}
|
39 |
|
40 |
p.main_description { |
41 |
margin: 5px 0px 50px 0px; |
42 |
text-align: center; |
43 |
}
|
44 |
|
45 |
|
46 |
/* Main Image
|
47 |
--------------------------------------------------- */
|
48 |
|
49 |
.main_image { |
50 |
background: url("../images/main_image_1.jpg"); |
51 |
background-repeat: no-repeat; |
52 |
width: 630px; |
53 |
height: 425px; |
54 |
border: #fff solid 10px; |
55 |
margin: 40px 0px 10px 0px; |
56 |
}
|
57 |
|
58 |
|
59 |
/* Tabs
|
60 |
--------------------------------------------------- */
|
61 |
|
62 |
#tabs p { |
63 |
font-family: Arial, Helvetica, sans-serif; |
64 |
font-size: 20px; |
65 |
}
|
66 |
|
67 |
a.tabs_link_1:link, a.tabs_link_1:visited, a.tabs_link_1:active { |
68 |
text-decoration: underline; |
69 |
color: #0073ea; |
70 |
font-weight: bold; |
71 |
}
|
72 |
|
73 |
a.tabs_link_1:hover { |
74 |
text-decoration: underline; |
75 |
color: #ff0084; |
76 |
font-weight: bold; |
77 |
}
|
78 |
|
79 |
#tabs .tabs_img { |
80 |
float: left; |
81 |
background-color: #ddd; |
82 |
padding: 8px; |
83 |
margin: 0px 12px 0px 0px; |
84 |
}
|
Paso 2: Cree la segunda hoja de estilo CSS (Mañana)


Abra style-1.css y guárdelo como style-2.css. Cambie la imagen de fondo del cuerpo de bokeh_2.jpg a bokeh_4.jpg. Cambie main_image_1.jpg a main_image_4.jpg.
Paso 3: Cree la tercera hoja de estilo CSS (Tarde)


Use style-1.css o style-2.css para crear una tercera hoja de estilo style-3.css. Cambie la imagen de fondo del cuerpo a bokeh_3.jpg y la imagen principal a main_image_5.jpg
Paso 4: Cree la cuarta hoja de estilo CSS (Tarde Noche)


Cree una cuarta hoja de estilo style-4.css. Cambie la imagen de fondo del cuerpo a bokeh_1.jpg y la imagen principal a main_image_8.jpg
Para los pasos del 2 al 4, no dude en cambiar otros elementos como los colores de las fuentes y los bordes de la imagen. En lugar de utilizar las imágenes proporcionadas en los archivos de origen, puede utilizar sus propias imágenes para crear estilos CSS personalizados.
Paso 5: Descargue jQuery y jQuery UI


Para mostrar cómo el script PHP cambia varias hojas de estilo a la vez, se usan Temas de jQuery Themeroller para diseñar el área de contenido con pestañas de la página web.
Vaya a la Página de Descarga de jQuery UI y descargue los temas "Flick" y "Start".
A continuación, vaya al sitio oficial de jQuery y descargue jQuery.
Paso 6: El Marcado
Cree un archivo PHP que incluya el siguiente código:
1 |
|
2 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
3 |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
4 |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
5 |
<head>
|
6 |
|
7 |
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> |
8 |
|
9 |
<!-- CSS style sheets -->
|
10 |
<?php include("style sheets.php"); ?>
|
11 |
|
12 |
|
13 |
<!-- jQuery / JavaScript -->
|
14 |
<script type="text/javascript" src="js/jquery-1.6.3.min.js"></script> |
15 |
<script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js">></script> |
16 |
<script type="text/javascript"> |
17 |
$(function() { |
18 |
$( "#tabs" ).tabs(); |
19 |
});
|
20 |
</script>
|
21 |
|
22 |
<meta name="description" content="This demo uses PHP to change multiple CSS style sheets (Main CSS and jQuery UI Theme) at specific times during a 24 hour period. The timezone for this demo is set to Australia/Melbourne." /> |
23 |
<meta name="keywords" content="time,based,css,stylesheet,switcher,php" /> |
24 |
<title>Simple Time Based CSS Style Sheet Switcher</title> |
25 |
|
26 |
</head>
|
27 |
<body>
|
28 |
|
29 |
<!-- Begin Wrapper -->
|
30 |
<div id="wrapper"> |
31 |
|
32 |
<!-- Begin Content Container 1 -->
|
33 |
<div class="content_container_1"> |
34 |
|
35 |
<!-- Main Image Switches at Set Times -->
|
36 |
<div class="main_image"></div> |
37 |
<p class="main_description"> |
38 |
Main Image changes at the times set in PHP Script (Australia/Melbourne). |
39 |
</p>
|
40 |
|
41 |
<!-- Begin Tabs Area -->
|
42 |
<div id="tabs"> |
43 |
<ul>
|
44 |
<li><a href="#tabs-1">About Envato</a></li> |
45 |
<li><a href="#tabs-2">Marketplaces</a></li> |
46 |
<li><a href="#tabs-3">Tuts+ Network</a></li> |
47 |
</ul>
|
48 |
|
49 |
<div id="tabs-1"> |
50 |
<p>
|
51 |
<img class="tabs_img" src="images/envato_1.jpg" width="300" height="195" alt="About Envato" /> |
52 |
Envato is a startup based out of Australia with people around the world and sites serving pages every second. We started in a living room in 2006 and have been steadily working to build our company into a world-class contender. Our background is creative, we love open source, we believe that work is about way more than just making money, and we're totally committed to making products that are awesome! |
53 |
</p>
|
54 |
<p>
|
55 |
<a class="tabs_link_1" href="http://envato.com/" target="_blank" title="Visit The Envato Website">Visit The Envato Website</a> |
56 |
</p>
|
57 |
</div>
|
58 |
|
59 |
<div id="tabs-2"> |
60 |
<p>
|
61 |
<img class="tabs_img" src="images/marketplace_1.jpg" width="300" height="195" alt="Marketplaces" /> |
62 |
The Envato Marketplaces allow anyone to buy or sell digital goods like WordPress themes, background music, After Effects project files, Flash templates and much more. The marketplaces are home to a thriving community of over 500,000 users, authors and buyers and every day hundreds of new files are added. |
63 |
</p>
|
64 |
<p>
|
65 |
<a class="tabs_link_1" href="http://themeforest.net/" target="_blank" title="Visit the Theme Marketplace">Visit the Theme Marketplace</a> |
66 |
</p>
|
67 |
</div>
|
68 |
|
69 |
<div id="tabs-3"> |
70 |
<p>
|
71 |
<img class="tabs_img" src="images/psdtuts_1.jpg" width="300" height="195" alt="Tuts+ Network" /> |
72 |
At Envato we're very passionate about education, that's why we've created one of the most popular networks of educational blogs around. Tuts+ serves up over 18 million pageviews a month across its many subsites on subjects like graphics, web development, audio production, iPhone development and motion graphics. |
73 |
</p>
|
74 |
<p>
|
75 |
<a class="tabs_link_1" href="http://tutsplus.com/" target="_blank" title="Visit Tuts+ Hub">Visit Tuts+ Hub</a> |
76 |
</p>
|
77 |
</div>
|
78 |
|
79 |
</div>
|
80 |
<!-- End Tabs Area -->
|
81 |
|
82 |
</div>
|
83 |
<!-- End Content Container 1 -->
|
84 |
|
85 |
</div>
|
86 |
<!-- End Wrapper -->
|
87 |
|
88 |
</body>
|
89 |
</html>
|
Paso 7: Código de Conmutador de Hojas de Estilo CSS de PHP
Cree un archivo PHP que incluya el siguiente código:
1 |
|
2 |
<?php
|
3 |
|
4 |
date_default_timezone_set("Australia/Melbourne"); // Set default time zone |
5 |
|
6 |
$time = date("H"); // Set the time in 24 hour format |
7 |
|
8 |
if (00 <= $time && $time < 07) // 12:00am to 7:00am Night |
9 |
{
|
10 |
echo
|
11 |
'<link href="css/style-1.css" rel="stylesheet" type="text/css" media="screen" /><link href="css/flick/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" media="screen" />'; |
12 |
}
|
13 |
|
14 |
elseif (07 <= $time && $time < 12) // 7:00am to 12:00pm Morning |
15 |
{
|
16 |
echo
|
17 |
'<link href="css/style-2.css" rel="stylesheet" type="text/css" media="screen" /><link href="css/start/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" media="screen" />'; |
18 |
}
|
19 |
|
20 |
elseif (12 <= $time && $time < 18) // 12:00pm to 6:00pm Afternoon |
21 |
{
|
22 |
echo
|
23 |
'<link href="css/style-3.css" rel="stylesheet" type="text/css" media="screen" /><link href="css/start/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" media="screen" />'; |
24 |
}
|
25 |
|
26 |
else // all other hours Evening |
27 |
{
|
28 |
echo
|
29 |
'<link href="css/style-4.css" rel="stylesheet" type="text/css" media="screen" /><link href="css/flick/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" media="screen" />'; |
30 |
}
|
31 |
|
32 |
?>
|
Desglose del Marcado
Include PHP para los enlaces rel="stylesheet"
El script para el conmutador de hojas de estilo CSS va a estar contenido en un archivo include de PHP llamado stylesheets.php.
Una declaración include() de PHP incluye y evalúa un archivo específico. El archivo stylesheets.php es referenciado por este código:
1 |
|
2 |
<!-- CSS style sheets -->
|
3 |
<?php include("style sheets.php"); ?> |
Debido a que estamos utilizando un script PHP para cambiar las hojas de estilo CSS en tiempos establecidos, los vínculos rel="stylesheet" serán generados por el script PHP.
Referencie bibliotecas jQuery y jQuery UI
Necesitamos asegurarnos de que la página web hace referencia a las bibliotecas jQuery y jQuery UI.
Entre las etiquetas head de la página web se ha añadido el siguiente código:
1 |
|
2 |
<!-- jQuery / JavaScript -->
|
3 |
<script type="text/javascript" src="js/jquery-1.6.3.min.js"></script> |
4 |
<script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script> |
Inicialice jQuery UI Tabs
Este tutorial incluye jQuery UI Tabs utilizando la funcionalidad por defecto. El código siguiente inicializa las pestañas:
1 |
|
2 |
<script type="text/javascript"> |
3 |
$(function() { |
4 |
$( "#tabs" ).tabs(); |
5 |
});
|
6 |
</script> |
Div Contenedor para jQuery UI Tabs
1 |
|
2 |
<!-- Begin Wrapper -->
|
3 |
<div id="wrapper"> |
4 |
|
5 |
<!-- Begin Content Container 1 -->
|
6 |
<div class="content_container_1"> |
(</div> de cierre para Wrapper y Contenedor de Contenido 1 se muestran en el bloque de código para el marcado de las pestañas de jQuery UI)
La mayoría de los Widgets de jQuery UI están programados para expandirse al ancho del 100% del área de contenido donde se colocan.
El contenedor content_container_1 se ha establecido en un ancho fijo de 650px en el CSS para que el área de contenido con pestañas no se expanda el ancho completo de la pantalla.
Marcado de Imagen Principal
Para que la imagen principal también cambie a tiempos establecidos usando el script PHP, necesita ser incluida en la página web como una imagen de fondo CSS.
Así que en lugar de agregar la imagen a la página web usando un marcado como este:
1 |
|
2 |
<img src="main_image_1.jpg" width="630" height="425" alt="Image" /> |
Se agregó a la página web como una imagen de fondo CSS de un <div> con la clase "main_image", así:
1 |
|
2 |
<!-- Main Image Switches at Set Times -->
|
3 |
<div class="main_image"></div> |
4 |
<p class="main_description"> |
5 |
Main Image changes at the times indicated. |
6 |
</p>
|
Marcado para las pestañas de jQuery UI
El siguiente marcado añade el área de contenido tabulado que está alimentado por jQuery UI y ha sido diseñado utilizando los Temas de jQuery Themeroller.
1 |
|
2 |
<!-- Begin Tabs Area -->
|
3 |
<div id="tabs"> |
4 |
<ul>
|
5 |
<li><a href="#tabs-1">About Envato</a></li> |
6 |
<li><a href="#tabs-2">Marketplaces</a></li> |
7 |
<li><a href="#tabs-3">Tuts+ Network</a></li> |
8 |
</ul>
|
9 |
|
10 |
<div id="tabs-1"> |
11 |
<p>
|
12 |
<img class="tabs_img" src="images/envato_1.jpg" width="300" height="195" alt="About Envato" /> |
13 |
Envato is a startup based out of Australia with people around the world and sites serving pages every second. We started in a living room in 2006 and have been steadily working to build our company into a world-class contender. Our background is creative, we love open source, we believe that work is about way more than just making money, and we're totally committed to making products that are awesome! |
14 |
</p>
|
15 |
<p>
|
16 |
<a class="tabs_link_1" href="http://envato.com/" target="_blank" title="Visit The Envato Website">Visit The Envato Website</a> |
17 |
</p>
|
18 |
</div>
|
19 |
|
20 |
<div id="tabs-2"> |
21 |
<p>
|
22 |
<img class="tabs_img" src="images/marketplace_1.jpg" width="300" height="195" alt="Marketplaces" /> |
23 |
The Envato Marketplaces allow anyone to buy or sell digital goods like WordPress themes, background music, After Effects project files, Flash templates and much more. The marketplaces are home to a thriving community of over 500,000 users, authors and buyers and every day hundreds of new files are added. |
24 |
</p>
|
25 |
<p>
|
26 |
<a class="tabs_link_1" href="http://themeforest.net/" target="_blank" title="Visit the Theme Marketplace">Visit the Theme Marketplace</a> |
27 |
</p>
|
28 |
</div>
|
29 |
|
30 |
<div id="tabs-3"> |
31 |
<p>
|
32 |
<img class="tabs_img" src="images/psdtuts_1.jpg" width="300" height="195" alt="Tuts+ Network" /> |
33 |
At Envato we're very passionate about education, that's why we've created one of the most popular networks of educational blogs around. Tuts+ serves up over 18 million pageviews a month across its many subsites on subjects like graphics, web development, audio production, iPhone development and motion graphics. |
34 |
</p>
|
35 |
<p>
|
36 |
<a class="tabs_link_1" href="http://tutsplus.com/" target="_blank" title="Visit Tuts+ Hub">Visit Tuts+ Hub</a> |
37 |
</p>
|
38 |
</div>
|
39 |
|
40 |
</div>
|
41 |
<!-- End Tabs Area -->
|
42 |
|
43 |
</div>
|
44 |
<!-- End Content Container 1 -->
|
45 |
|
46 |
</div>
|
47 |
<!-- End Wrapper -->
|
Las "Pestañas" del menú son generadas por una lista no ordenada. Las secciones de contenido se generan mediante etiquetas <div> que tienen identificadores únicos los cuales corresponden a vínculos de anclaje en las etiquetas <li></li>.
Por ejemplo: <div id="tabs-1"> corresponde con <a href="#tabs-1">
Desglose del Código de Conmutador de Hojas de Estilo de PHP
Establecer la Zona Horaria por Defecto:
1 |
|
2 |
date_default_timezone_set("Australia/Melbourne"); // Set default time zone |
El código date_default_timezone_set establece la zona horaria predeterminada utilizada por todas las funciones de fecha/hora en un script.
Si el script no incluye date_default_timezone_set, el tiempo del servidor de alojamiento web se utilizará para todas las funciones de fecha/hora en el script.
Consulte la Lista de Zonas Horarias Compatibles para encontrar el huso horario apropiado para su ubicación.
Las versiones más recientes de PHP incorporan "Tiempos de Ahorro de Luz Solar" en la funcionalidad de date_default_timezone_set. Algunas versiones anteriores de PHP no toman en cuenta los "Tiempos de Ahorro de Luz Solar".
Establezca la Hora en el Formato de 24 horas:
1 |
|
2 |
$time = date("H"); // Set the hour in 24 hour format |
date("H") formatea la hora/fecha local en un formato de 24 horas de una hora, con ceros a la izquierda. Haga clic aquí para ver información sobre el reloj de 24 horas.
Desglose de las Declaraciones If, Elseif, Else
He partido el resto del código PHP para mostrar cómo el script PHP funcionará línea por línea. Hay varias funciones que se utilizan en el código, incluyendo:
if
1 |
|
2 |
if (00 <= $time && $time < 07) // 12:00am to 7:00am Night |
3 |
{
|
4 |
echo
|
5 |
'<link href="css/style-1.css" rel="stylesheet" type="text/css" media="screen" /><link href="css/flick/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" media="screen" />'; |
6 |
}
|
Si 00 (medianoche) es Menor que o igual que la hora actual Y la hora actual es Menor que 07 (7:00 am) Entonces, el script aplicará style-1.css y las hojas de estilo CSS flick.
elseif
1 |
|
2 |
elseif (07 <= $time && $time < 12) // 7:00am to 12:00pm Morning |
3 |
{
|
4 |
echo
|
5 |
'<link href="css/style-2.css" rel="stylesheet" type="text/css" media="screen" /><link href="css/start/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" media="screen" />'; |
6 |
}
|
Si 07 (7:00 am) es Menor que o igual que la hora actual Y la hora actual es Menor que 12 (12:00 pm) Entonces el script aplicará style-2.css y las hojas de estilo CSS start.
elseif
1 |
|
2 |
elseif (12 <= $time && $time < 18) // 12:00pm to 6:00pm Afternoon |
3 |
{
|
4 |
echo
|
5 |
'<link href="css/style-3.css" rel="stylesheet" type="text/css" media="screen" /><link href="css/start/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" media="screen" />'; |
6 |
}
|
Si 12 (12:00 pm) es Menor que o igual que la hora actual Y la hora actual es Menor que 18 (6:00 pm) Entonces el script aplicará style-3.css y las hojas de estilo CSS start.
else
1 |
|
2 |
else // all other hours Evening |
3 |
{
|
4 |
echo
|
5 |
'<link href="css/style-4.css" rel="stylesheet" type="text/css" media="screen" /><link href="css/flick/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" media="screen" />'; |
6 |
}
|
Si NINGUNA de las condiciones se cumple en las declaraciones "if ... elseif", Entonces el script aplicará style-4.css y las hojas de estilo CSS flick.
Conclusión
Con CSS, usted puede crear muchos estilos diferentes para sus páginas web. Utilizando PHP puede aplicar esos estilos dinámicamente a su sitio web. Lance un poco de jQuery UI y sus páginas web no sólo serán divertidas de crear para que usted, ¡sino que serán divertidas para sus visitantes también!
Si tiene preguntas sobre este tutorial, por favor hágalas a continuación, ¡Muchas gracias por leer!



