2010-03-25 27 views
11

Originalmente quería incluir un .css en mi documento HTML que carga muchos otros archivos .css para dividir algunos fragmentos de código con fines de desarrollo.Importar CSS o múltiples archivos CSS

He creado una página de prueba:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>The Recipe Site</title> 
<link rel='stylesheet' href='/css/main.css'> 
<link rel='stylesheet' href='/css/site_header.css'> 
<!-- Let google host jQuery for us, maybeb replace with their api --> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script> 
<script type="text/javascript" src="/js/main.js"></script> 
</head> 
<body> 
    <div id="site_container"> 
    <div id="site_header"><?php include_once($r->base_dir . "inc/site_header.inc.php"); ?><!-- Include File, Update on ajax request. --></div> 
    <div id="site_content"> 
    Some main content. 
    </div> 
    <div id="site_footer"><?php include_once($r->base_dir . "inc/site_footer.inc.php"); ?><!-- Include File, Update on ajax request. --></div> 
    </div> 
</body> 
</html> 

del archivo: /css/main.css

/* Reset Default Padding & Margin */ 
* { 
margin: 0; 
padding: 0; 
border: 0; 
} 


/* Set Our Float Classes */ 
.clear { clear: both; } 
.right { float: right; } 
.left { float: left; } 


/* Setup the main body/site container */ 
body { 
background: url(/images/wallpaper.png) repeat; 
color: #000000;  
text-align: center; 
font: 62.5%/1.5 "Lucida Grande", "Lucida Sans", Tahoma, Verdana, sans-serif; 
} 

#site_container { 
background-color: #FFFFFF; 
height: 100%; 
margin-left: auto; 
margin-right: auto; 
text-align: left; 
width: 100%; 
} 


/* Some style sheet includes */ 
/* @import "/css/site_header.css"; */ 


/* Default Font Sizes */ 
h1 { font-size: 2.2em; } 
h2 { font-size: 2.0em; } 
h3 { font-size: 1.8em; } 
h4 { font-size: 1.6em; } 
h5 { font-size: 1.4em; } 
p { font-size: 1.2em; } 


/* Default Form Layout */ 
input.text { 
padding: 3px; 
border: 1px solid #999999;  
} 


/* Default Table Reset */ 
table { 
border-spacing: 0; 
border-collapse: collapse; 
} 

td{ 
text-align: left; 
font-weight: normal; 
} 


/* Cause not all browsers know what HTML5 is... */ 
header { display:block;} 
footer { display:block;} 

y ahora el archivo: /css/site_header.css:

#site_header { 
background-color: #c0c0c0; 
height: 100px; 
position: absolute; 
top: 100px; 
width: 100%; 
} 

Problema:

Cuando uso el código anterior, el site_header div no tiene ningún formato/fondo. Cuando elimino la línea de enlace del documento HTML para site_header.css y en su lugar uso una @import url ("/ css/site_header.css"); en mi archivo main.css, los mismos resultados: nada se representa para el mismo div.

Ahora cuando tomo el marcado CSS de site_header.css y añadirlo a main.css, el div se refina ...

Así que me pregunto si tener varios archivos CSS no es de alguna manera trabajar .. . o tal vez tener ese marcado css al final de mi css anterior es de alguna manera conflictivo, aunque no puedo encontrar una razón por la que lo haga.

+1

Permítanme agregar un enlace para un artículo que demuestre el uso de varias CSS a través de la importación: [Uso de CSS @import Rule] (http://www.cssnewbie.com/css-import-rule/) – sumid

Respuesta

2

Use firebug para inspeccionar el div y ver qué estilos se le están aplicando, puede obtener más información.

0

Para cualquier problema con CSS como este, le recomendaría usar firebug. Podrá ver si su site_header.css se está cargando correctamente.

Si se está cargando, podrá ver qué estilos se están aplicando a qué elementos, quizás algunos se sobrescriben?

13

La directiva @import tiene que ser lo primero en su CSS. Tan pronto como el explorador toque un estilo, se ignorarán todas las demás líneas de importación.

Para citar WC3:

"toda norma @import debe preceder a todas las demás reglas (excepto la regla @charset, si está presente)"

Ver http://www.w3.org/TR/CSS2/cascade.html#at-import

Una cosa a tener en cuenta, es que cada @import todavía causa una solicitud HTTP, por lo que no es más eficiente que usar una etiqueta de enlace múltiple s. De hecho, puede ser menos eficiente ya que las importaciones pueden ser secuenciales en lugar de solicitudes paralelas. See this article. IMO también agrega complejidad porque termina administrando referencias CSS en dos lugares (etiqueta principal de marcado más 1 o más archivos CSS) frente a una lista simple de etiquetas de enlace.

También recomendaría dónde puede combinar archivos CSS cuando su sitio está en producción, ya que reducirá la sobrecarga de HTTP.

+0

Ese es un gran artículo ! –

3

En primer lugar, tiene un marcado no válido.La etiqueta de enlace debe estar cerrada ...

<link rel="stylesheet" href="/css/main.css" /> 

En segundo lugar, ¿por qué no usar comillas dobles constantemente por atributos de elemento (aquí en la etiqueta de enlace le sucede a utilizar una sola cita)? Esto no es parte del problema, pero me parece desalentador que se mezclen varias convenciones de sintaxis como esta.

Por último, no recomendaría usar @import porque no ofrece un beneficio convincente. Debe ser lo primero en el archivo CSS. Aún se debe realizar una solicitud HTTP adicional para cada uno de los archivos CSS adicionales. Y además de eso, IE coke cuando se especifica un medio de destino para las importaciones. Me atengo a la buena y antigua etiqueta de enlace clásica porque simplemente funciona (¡dado que tienes un marcado válido!).

6

¿Puedo decir, molesto aquí, pero coloque imágenes relacionadas con el archivo CSS en la carpeta CSS, no en/images /.

El objetivo de CSS es la separación de estilo y contenido, y solo las imágenes de contenido deben ir en/images /. Las imágenes llamados por el CSS deben ser colocados en el mismo directorio y llamaron pathlessly, por ejemplo:

body { 
background: url(wallpaper.png) repeat; 
} 

esa manera en una fecha posterior si se trata de cambiar el estilo, o realizar varias estilos es sólo un caso de actualización un enlace y mover una carpeta (/ css /) en lugar de tener un desorden de imágenes dispersas por todo el sistema de archivos. Además, siempre es una mala idea usar rutas absolutas a los archivos (como /images/wallpaper.png).

+0

Buena idea, nunca pensé en eso ... – Yarin

+1

Twitter Bootstrap coloca todas sus imágenes en "img" y no en su propio directorio "css". El archivo CSS hace referencia a ellos como "../img/ ..". – ChrisCantrell

0

uso @import regla en su main.css archivo como:

@import url("css/site_header.css"); (este código debe estar en la cima de su main.css)

la importación fragmento anterior se unirá a su múltiple css archivos en un solo css luego ese archivo main.css utiliza en su HTML.