基本上,我想知道@import
将样式表导入到现有样式表中而不是仅添加另一个样式表的优点/目的是什么?
<link rel="stylesheet" type="text/css" href="" />
到文件头?
<link rel="stylesheet" type="text/css" href="theme.css">
。
基本上,我想知道@import
将样式表导入到现有样式表中而不是仅添加另一个样式表的优点/目的是什么?
<link rel="stylesheet" type="text/css" href="" />
到文件头?
<link rel="stylesheet" type="text/css" href="theme.css">
。
Answers:
从页面速度的角度来看,@import
几乎不应该使用CSS文件,因为它可以防止样式表被同时下载。例如,如果样式表A包含以下文本:
@import url("stylesheetB.css");
那么在下载第一个样式表之前,可能无法开始下载第二个样式表。另一方面,如果两个样式表都在<link>
主HTML页面的元素中引用,则可以同时下载两个样式表。如果两个样式表总是一起加载,将它们简单地组合到一个文件中也很有帮助。
有时在某些情况下@import
适当,但通常是例外,而不是规则。
There are occasionally situations where @import is appropriate
喜欢@media
用来将不同的样式应用于不同的设备。
@import
在样式表(例如@import url(http://fonts.googleapis.com/css?family=Archivo+Narrow);
)中添加一个Google字体,这样您就不必link
使用该样式表将其粘贴到每个页面中。
@import
是当您使用诸如的设置来建立构建过程时grunt-concat-css
。在开发过程中,@import
语句正常工作,页面加载速度无关紧要。然后,在为生产而构建时,类似这样的工具将适当地连接所有CSS文件并删除@import
。我使用来对我的JavaScript文件执行类似的操作grunt-browserify
。
@import
要应用设备特定的样式,为什么不只使用<link>
带有媒体属性的标签呢?
@import
会更快。您可能正在查看某种测量工件。
我将扮演恶魔的拥护者,因为当人们一致同意时我会讨厌它。
您随时可以针对两个变量进行优化-代码性能和开发人员性能。在大多数情况下(即使不是大多数情况),使开发人员更高效,然后使代码更高效,这一点更为重要。
如果您有一个样式表依赖于另一个样式表,那么最合乎逻辑的事情是将它们放在两个单独的文件中,并使用@import。这对于下一个查看代码的人来说是最合乎逻辑的。
(何时会发生这种依赖关系?在我看来,这种情况很少见-通常一个样式表就足够了。但是,有一些逻辑上的地方可以将它们放置在不同的CSS文件中:)
- 主题:如果您在同一页面上使用不同的配色方案或主题,则它们可能共享一些组件,但不是全部组件。
- 子组件:一个人为的示例-假设您有一个包含菜单的餐厅页面。如果菜单与页面的其余部分有很大不同,则如果菜单位于其自己的文件中,则维护起来会更容易。
通常,样式表是独立的,因此使用将它们全部包括在内是合理的<link href>
。但是,如果它们是从属层次结构,则应该执行最合乎逻辑的事情。
Python使用import; C用途包括;JavaScript有要求。CSS已导入;在需要时使用它!
对于高性能网站,任何形式的多个CSS请求(无论是通过链接还是通过@imports)都是不好的做法。一旦您到达了最重要的优化点,所有CSS都应该流过一个压缩器。Cssmin合并导入语句;正如@Brandon指出的那样,grunt也有多种选择。(另请参阅此问题)。
<link>
正如人们所指出的那样,一旦进入最小化阶段,速度就会更快,因此最多只能链接到一些样式表,并且尽可能不要@import任何样式表。
不过,在站点达到生产规模之前,组织代码和逻辑性要比加快代码执行速度更为重要。
@import
出于速度原因,最好不要在页面中使用CSS。看到这篇出色的文章以了解为什么不这样做:http : //www.stevesouders.com/blog/2009/04/09/dont-use-import/
而且,通过@import标记提供服务的css文件的最小化和合并通常比较困难,因为minify脚本无法从其他css文件中“剥离” @import行。当将它们包含为<link标记时,可以使用现有的minify php / dotnet / java模块进行缩小。
因此:使用<link />
代替@import
。
@Nebo IznadMišoGrgur
以下是使用@import的所有正确方法
@import url("fineprint.css") print;
@import url("bluish.css") projection, tv;
@import 'custom.css';
@import url("chrome://communicator/skin/");
@import "common.css" screen, projection;
@import url('landscape.css') screen and (orientation:landscape);
来源:https : //developer.mozilla.org/en-US/docs/Web/CSS/@import
引用自http://webdesign.about.com/od/beginningcss/f/css_import_link.htm
@import方法的主要目的是在页面上使用多个样式表,但是<head>中只有一个链接。例如,一家公司可能对站点上的每个页面都有一个全局样式表,其中子部分具有仅适用于该子部分的其他样式。通过链接到子节样式表并在该样式表的顶部导入全局样式,您不必维护一个巨大的样式表,其中包含站点和每个子节的所有样式。唯一的要求是,所有@import规则都必须位于其余样式规则之前。请记住,继承仍然是一个问题。
使用@import的理由很多。
使用@import的一个重要原因是进行跨浏览器设计。通常,已导入的工作表在许多较旧的浏览器中都是隐藏的,这使您可以将特定格式应用于非常古老的浏览器,例如Netscape 4或更旧的系列,适用于Mac的Internet Explorer 5.2,适用于Opera 6或更旧的版本以及适用于PC的IE 3和4。
为此,在base.css文件中,您可以具有以下内容:
@import 'newerbrowsers.css';
body {
font-size:13px;
}
在导入的自定义工作表(newerbrowsers.css)中,只需应用较新的级联样式即可:
html body {
font-size:1em;
}
使用“ em”单位优于“ px”单位,因为它可以根据用户设置扩展字体和设计,而随着旧版浏览器使用基于像素的效果更好(刚性且不能在浏览器用户设置中更改) 。大多数较旧的浏览器将看不到导入的工作表。
您可能会这样,谁在乎!尝试使用一些过时的大型政府或公司系统,您仍然会看到那些使用较旧的浏览器。但是它确实是一个很好的设计,因为您今天喜欢的浏览器也有一天会过时和过时。而且以有限的方式使用CSS意味着您现在有越来越多的用户代理,它们与您的网站无法很好地配合工作。
现在,使用@import可以使跨浏览器的网站兼容性达到99.9%的饱和度,这仅仅是因为许多旧版浏览器无法读取导入的工作表。它可以保证您为其html应用基本的简单字体集,但较新的代理会使用更高级的CSS。这使得较旧的代理可以访问内容,而不会损害较新的桌面浏览器所需的丰富视觉显示。
请记住,现代浏览器在首次访问网站后就非常好地缓存HTML结构和CSS。多次调用服务器已不再是瓶颈。
上百万字节的Javascript API和JSON已上传到智能设备,以及设计得不好的HTML标记(页面之间不一致)是当今缓慢渲染的主要驱动力。您的平均Google新闻页面的ECMAScript大小超过6 MB,仅用于呈现少量文本!大声笑
几千字节的缓存CSS和具有较小javascript足迹的一致的干净HTML将以闪电般的速度呈现在用户代理中,这仅仅是因为浏览器同时缓存了一致的DOM标记和CSS,除非您选择通过javascript马戏团技巧来进行操纵和更改。
我认为其中的关键是您实际上编写多个CSS样式表的两个原因。
出于第一个原因,<link>
将应用附加标签,因为这允许您为不同页面加载不同的CSS文件集。
由于第二个原因,该@import
语句似乎最方便,因为您获得了多个CSS文件,但是加载的文件始终相同。
从加载时间的角度来看,没有什么不同。无论如何实现,浏览器都必须检查并下载单独的CSS文件。
几乎没有理由使用@import,因为它会分别加载每个导入的CSS文件,并且会大大降低您的网站速度。如果您对处理CSS的最佳方式感兴趣(涉及页面速度),则应采用以下方式处理所有 CSS代码:
此处提供更多详细信息:http : //www.giftofspeed.com/optimize-css-delivery/
上面的方法效果最好的原因是,它为浏览器创建的请求更少,并且可以立即开始呈现CSS,而无需下载单独的文件。
<HEAD>
这可能会帮助PHP开发人员。以下功能将删除空格,删除注释并连接所有CSS文件。然后<style>
在页面加载之前将其插入头部的标签中。
下面的函数将删除注释并最小化传入的CSS。它与下一个功能配对。
<?php
function minifyCSS($string)
{
// Minify CSS and strip comments
# Strips Comments
$string = preg_replace('!/\*.*?\*/!s','', $string);
$string = preg_replace('/\n\s*\n/',"\n", $string);
# Minifies
$string = preg_replace('/[\n\r \t]/',' ', $string);
$string = preg_replace('/ +/',' ', $string);
$string = preg_replace('/ ?([,:;{}]) ?/','$1',$string);
# Remove semicolon
$string = preg_replace('/;}/','}',$string);
# Return Minified CSS
return $string;
}
?>
您将在文档的开头调用此函数。
<?php
function concatenateCSS($cssFiles)
{
// Load all relevant css files
# concatenate all relevant css files
$css = '';
foreach ($cssFiles as $cssFile)
{
$css = $css . file_get_contents("$cssFile.css");
}
# minify all css
$css = minifyCSS($css);
echo "<style>$css</style>";
}
?>
将功能包括concatenateCSS()
在文件头中。通过与您的样式与它的路径IE名称的数组:css/styles.css
。您不需要添加扩展名,.css
因为该扩展名是在上述功能中自动添加的。
<head>
<title></title>
<?php
$stylesheets = array(
"bootstrap/css/bootstrap.min",
"css/owl-carousel.min",
"css/style"
);
concatenateCSS( $stylesheets );
?>
</head>
file_get_contents()
比使用cURL慢得多。