LessCSS 中的@media 和 @font-face 支持

Posted

技术标签:

【中文标题】LessCSS 中的@media 和 @font-face 支持【英文标题】:@media and @font-face support in LessCSS 【发布时间】:2011-05-27 08:17:21 【问题描述】:

您好,有人知道如何使用 LessCSS 进行媒体查询吗?

  @media screen and (max-width: 600px) 
      #container
          width: 480px;
      
  

给我以下错误:

! Syntax Error: on line 23: expected one of :: : . # * - [ @media @font-face ,  ; got ( after:

@media screen and

同样,@font-face 和任何带有 @ 的 CSS3 查询与 LessCSS 的编译器冲突。

谢谢!

【问题讨论】:

【参考方案1】:

据我了解,LessCSS 不支持@media,你可以在他们的 github 主页上找到开放票。

我认为在您的情况下唯一可行的方法是:

<link rel="stylesheet" media="screen and (max-width: 480px)" href="smartphone.css" />

自接受答案以来,LessCSS 版本中的问题似乎已得到修复。

【讨论】:

我很欣赏这个答案,但我听说这是可能的,但没有人能举个例子。正如您在上面指出的,这是一个简单的解决方法,我们也可以只添加一个非少 css 文件,但这并不是赏金的真正意义。 :) 见下面@Colin 的回答。我可以证明 LESS 1.5.5.js 确实支持开箱即用的媒体查询,因为它们没有被剥离。它们只是不能在嵌套规则中使用。所以这取决于你所说的“支持”是什么意思。【参考方案2】:

所以我在以下引用的 .less 文件中添加了一个简单的 @media print .no-print display:none;:

<link rel="stylesheet/less" href="http://worldMaps.org/maps/styles/growth.less">

它不会工作。但是,我们的 css 大师指出 .lesses 默认是使用媒体类型的屏幕,所以如果您将引用的 less 链接更改为

<link rel="stylesheet/less" href="http://worldMaps.org/maps/styles/growth.less" media="all">

然后突然间,less 文件中的@media 打印将被拾取并开始正常工作。

希望这可以帮助像我一样困惑的其他人。

【讨论】:

【参考方案3】:

以上所有答案都已过时。

less.js 和lessCss/dotless 都支持@media 和@font-face。

它们现在还支持带有嵌套规则的@media,例如

.cl 
 @media screen and (max-width: 600px) 
  .d 
   .e 
     background: none;
   
  
 

变成

@media screen and (max-width: 600px) 
 .cl .d .e 
   background: none;
 

请参阅less.js documentation 和dotless documentation 了解更多信息。

【讨论】:

需要顶一下,这个是对的,上面好多老的。 他们可能已经添加了这个功能,但是链接的项目都没有在他们当前的文档中引用它。还是我错过了什么? @IMSop:lesscss.org 现在在“语言”下有一个“嵌套媒体查询”部分。【参考方案4】:

LESS 目前不为媒体查询提供任何特殊支持。这意味着在 LESS 的嵌套规则中嵌入媒体查询是不可能的,这迫使开发人员将他们的响应式样式单独放置在 LESS 文档的单独部分中,而不是将它们保留在上下文中。让我举一个例子说明它是如何工作的:

来自A Call for LESS to Embrace Responsive Design

所以是的,您现在可以使用媒体查询,但不能用嵌套语法编写它们。

查看该博客文章中的 cmets,了解一些建议的解决方案,这些解决方案看起来迟早会在 less.js 中推出。

【讨论】:

+1 因为你可以在 LESS 样式表中使用@media,你只需要确保它是最外层的元素。这可以避免您加载不必要的文件。【参考方案5】:

如果您可以使用less.js,它可以直接使用。我尝试了同样的例子:

@media screen and (max-width: 600px) 
    #container
        width: 480px;
    

它在 .css 文件中完全复制了它。 less.js 中还有一个转义功能,但它似乎只对值起作用,所以我认为你不能为此使用它。

body 
    color: e('red');

我猜你使用的是原始的 Ruby LessCSS?如果你不能切换到新的,我唯一能想到的另一件事就是使用@include。这可能比 html 中的另一个链接标签稍好,如果您压缩所有 CSS 文件,您可能能够避免额外的 HTTP 请求。

【讨论】:

感谢 Robbles,我一直在 LessCSS 的网站上抱怨,看来我不是唯一一个有这个愿望的人。事实证明,Ruby gem 中也缺少父选择器,但在 js 版本中可用。似乎他们放弃了红宝石......【参考方案6】:

我们在项目中使用它,但从未发现它可以工作。

创建一个不受less管理的外部css文件。 less css 文件将能够访问字体。

【讨论】:

以上是关于LessCSS 中的@media 和 @font-face 支持的主要内容,如果未能解决你的问题,请参考以下文章

手机端自适应字体大小和元素宽度自适应

移动端

移动端开发适配总结

H5移动端知识点总结

Chrome 打印预览不加载 @media only print font-face

移动端开发适配的2中方案