Импорт CSS или несколько файлов CSS - PullRequest
11 голосов
/ 25 марта 2010

Первоначально я хотел включить в мой HTML-документ файл .css, который загружает несколько других файлов .css, чтобы разделить некоторые фрагменты кода для целей разработки.

Я создал тестовую страницу:

<!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> 

Файл: /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;}

и теперь файл: /css/site_header.css:

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

Проблема:

Когда я использую приведенный выше код, div site_header не имеет никакого форматирования / фона. Когда я удаляю строку ссылки из документа HTML для site_header.css и вместо этого использую URL @import ("/ css / site_header.css"); в моем файле main.css те же результаты - ничего не обрабатывается для того же div.

Теперь, когда я беру разметку CSS из site_header.css и добавляю ее в main.css, div отлично отрисовывается ...

Так что мне интересно, не работает ли несколько css-файлов ... или, может быть, наличие разметки css в конце моего предыдущего css противоречиво, хотя я не могу найти причину, почему это так.

Ответы [ 6 ]

14 голосов
/ 25 марта 2010

Директива @import должна стоять на первом месте в вашем CSS. Как только браузер использует один стиль, все остальные строки импорта будут игнорироваться.

Цитировать WC3:

"любые правила @import должны предшествовать всем другие правила (кроме правила @charset, если есть) "

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

Следует учитывать, что каждый @import по-прежнему вызывает HTTP-запрос, поэтому он не более эффективен, чем использование нескольких тегов ссылок. На самом деле это может быть менее эффективно, поскольку импорт может быть последовательным, а не параллельным запросом. См. Эту статью . IMO также добавляет сложности, потому что вы в конечном итоге управляете ссылками CSS в двух местах (заголовок разметки плюс 1 или более файлов CSS) по сравнению с простым списком тегов ссылок.

Я бы также порекомендовал, где вы можете комбинировать CSS-файлы, когда ваш сайт работает, так как это уменьшит накладные расходы HTTP.

6 голосов
/ 25 марта 2010

Могу ли я просто сказать, погладить здесь, но поместите изображения, связанные с файлом CSS, в саму папку CSS, а не в / images /.

Смысл CSS заключается в разделении стиля и контента, и в / images / должны входить только изображения с контентом. Любые изображения, вызываемые с помощью CSS, должны быть помещены в один и тот же каталог и называться без пути, например ::100100

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

Таким образом, позднее, если речь идет об изменении стиля или создании нескольких стилей, это всего лишь случай обновления одной ссылки и перемещения одной папки (/ css /), а не разброс изображения по всей файловой системе. , Плюс всегда плохая идея использовать абсолютные пути к файлам (например, /images/wallpaper.png).

3 голосов
/ 25 марта 2010

Прежде всего, у вас неверная разметка.Тег ссылки должен быть закрыт ...

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

Во-вторых, почему бы вам не использовать одинарные двойные кавычки для атрибутов элемента (здесь в теге ссылки вы используете одинарную кавычку)?Это не является частью проблемы, но я нахожу утомительным, что вы бы смешали различные синтаксические соглашения, подобные этому.

Наконец, я бы не рекомендовал использовать @import, потому что это не дает убедительных преимуществ.Это должно быть первым делом в файле CSS.Дополнительный HTTP-запрос все еще должен быть сделан для каждого из дополнительных файлов CSS.И, кроме того, IE вызывает, когда вы указываете целевой носитель для импорта.Я придерживаюсь старого доброго классического тега ссылки, потому что он просто работает (учитывая, что у вас есть правильная разметка!).

2 голосов
/ 25 марта 2010

Используйте Firebug, чтобы просмотреть div и посмотреть, какие стили применяются к нему, вы можете получить более глубокое понимание.

0 голосов
/ 28 февраля 2017

используйте @ import правило в ваш main.css файл как:

@import url("css/site_header.css"); (этот код должен быть поверх вашего main.css)

приведенный выше import сниппет свяжет несколько файлов CSS в один CSS затем этот main.css файл используется в вашем HTML.

0 голосов
/ 25 марта 2010

Для любых проблем с CSS, как это, я бы рекомендовал использовать firebug . Вы сможете увидеть, правильно ли загружается ваш site_header.css.

Если он загружается, вы сможете увидеть, какие стили применяются к каким элементам, возможно, некоторые из них перезаписываются?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...