Perl,打印标题包含多个样式表和媒体查询

时间:2014-03-19 14:21:47

标签: perl header media-queries

我正在尝试使用CGI通过perl打印网页的标题。

我需要获得像

这样的东西
<link href="css/mob.css" rel="stylesheet" type="text/css" media="only screen and (max-width:749px)" />
<link href="css/main.css" rel="stylesheet" type="text/css" media="only screen and (min-width:750px)" />
<link href="css/print.css" rel="stylesheet" type="text/css" media="print" />
<!--[if lt IE 9]>
    <link href="css/main.css" rel="stylesheet" type="text/css" />
<![endif]-->

但是我遇到了“媒体”属性的问题 我试过

-style=> {
   -src=> [
      '../css/main.css',
      '../css/print.css',
      '../css/mob.css'
   ],
   -media=> [
      'only screen and (min-width:750px)',
      'print',
      'only screen and (max-width:749px)'
   ]
 }

但结果是

<link rel="stylesheet" type="text/css" href="../css/main.css" media="ARRAY(0x1ae6bb0)"/>
<link rel="stylesheet" type="text/css" href="../css/print.css" media="ARRAY(0x1ae6bb0)"/>
<link rel="stylesheet" type="text/css" href="../css/mob.css" media="ARRAY(0x1ae6bb0)"/>

(如果我使用单个媒体参数,一切正常,但我需要每个css的媒体) 相反,如果我使用多样式的文字,他们会互相覆盖。

&lt; - if - &gt;怎么样?部分?我想我应该写任意内容(因此也解决了以前的问题),但我无法编译。

提前致谢。

2 个答案:

答案 0 :(得分:3)

-media选项只接受单个字符串,但您传递的是数组引用。 CGI documentation介绍了如何使用<link>函数生成更复杂的Link代码:

#!/usr/bin/perl

use strict;
use warnings;

use CGI qw(Link);

my $q = CGI->new;

my @head = (
    Link({ -rel => 'stylesheet', -type => 'text/css', -src => '../css/main.css',
           -media => 'only screen and (min-width:750px)' }),
    Link({ -rel => 'stylesheet', -type => 'text/css', -src => '../css/print.css',
           -media => 'print' }),
    Link({ -rel => 'stylesheet', -type => 'text/css', -src => '../css/mob.css',
           -media => 'only screen and (max-width:749px)' }),
);

print $q->header,
      $q->start_html({ -head => \@head }),
      $q->h1('foo'),
      $q->end_html;

输出:

<!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" lang="en-US" xml:lang="en-US">
<head>
<title>Untitled Document</title>
<link type="text/css" media="only screen and (min-width:750px)" src="../css/main.css" rel="stylesheet" />
<link type="text/css" media="print" src="../css/print.css" rel="stylesheet" />
<link type="text/css" media="only screen and (max-width:749px)" src="../css/mob.css" rel="stylesheet" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>foo</h1>
</body>
</html>

请注意,尽管CGI.pm 可以生成HTML,但它很难以维护。我建议使用像Template Toolkit这样的模板系统。

答案 1 :(得分:1)

不要这样做。 CGI.pm中的HTML生成方法已被普遍认为是十五年来的一个坏主意。请改用templating system