2011-03-04 182 views
2

我正在开发使用PHP,XHTML严格,和jQuery一个网站,将能够灵活地支持移动设备和桌面设备,使用最小的设备宽度使用Responsive Web Design方法和服务不同的样式表属性。如何交换样式表的链接

<link rel="stylesheet" href="css/960.css" type="text/css" media="screen and (min-device-width: 480px)" /> 

但该网站需要有一个链接来切换“桌面”和“moblie”视图。我有一个关于如何使用jQuery完成这项工作的基本想法,但对于不支持JavaScript的设备,更愿意使用php的解决方案。

回答

3

PHP是不是太难用,以实现这一点。如果你使用一个链接,像这样......

<a href="?view=desktop">Desktop view</a> 
在你的网页脚本

则...

//test for stylesheet parameter 
if(isset($_GET['view'])) 
{ 
    //save and set it in the session 
    $stylesheet = $_GET['view']; 
    $_SESSION['stylesheet'] = $stylesheet; 
} 
elseif(isset($_SESSION['stylesheet'])) 
{ 
    //parameter not sent, so get it from the session 
    $stylesheet = $_SESSION['stylesheet']; 
} 

后来,你在此基础上$stylesheet变量选择的样式表的代码。

if($stylesheet == 'desktop') 
{ 
    echo '<link rel="stylesheet" href="/css/desktop.css" type="text/css" />'; 
} 
elseif($stylesheet == 'mobile') 
{ 
    echo '<link rel="stylesheet" href="/css/mobile.css" type="text/css" />'; 
} 
else 
{ 
    echo'<link rel="stylesheet" href="css/960.css" type="text/css" media="screen and (min-device-width: 480px)" />'; 
} 
+0

的其他人显然是利用媒体查询当前的链接栈。 –

+0

这个工作除了在if语句中缺少“)”字符之外。但我解决了这个问题,这很好。 –

+0

很好的捕捉失踪的“)”,我吮吸计数。 :) –

0

那么,为什么不包括根据查询参数的适当的样式表,或会话变量或UA等等等等

//Code that figures out what type is 
$css = ''; 
switch ($type) { 
    case 'mobile': 
     $css = '<link rel="stylesheet" href="css/960.css" type="text/css" />'; 
     break; 

    case 'touch': 
     $css = '<link rel="stylesheet" href="css/960-mobile.css" type="text/css" />'; 
     break; 

    case 'desktop': 
    default: 
     $css = '<link rel="stylesheet" href="css/960-full.css" type="text/css" />'; 
     break; 
} 

在你看来

echo $css; 

注意这仅仅是一个例。理想情况下,你不应该在PHP中构建你的整个链接html,但不知道你的任何实现细节,这就足够了。这样做是命名您的CSS文件中,只有一个-type以标准的方式在最后区分在使用的每个文件,只是在$type变量传递给视图的最佳方式。

这是你在找什么?

+0

为什么你会在你的链路交换机中包含媒体查询?这只会导致“强制”链接被忽略。你认为他还包括用户代理嗅探(blech)。 –

+1

@Kevin,完全同意有关媒体查询,错过了:S编辑 – JohnP

0

您可以为此使用SESSION变量。下面的示例假定有两个样式mobile.css和desktop.css

测试参数,并建立会话。

<?php 
session_start(); 
    if(isset($_GET['style']))//Tests the argument 
    { 
    if($_GET['style']=="desktop")//This to prevent passing wrong arguments 
    { 
     $_SESSION['style']=$_GET['style']; 
    } 
    if($_GET['style']=="mobile")//This to prevent passing wrong arguments 
    { 
     $_SESSION['style']=$_GET['style']; 
    } 
    } 

    ?> 

<head> 
blah 
<?php 
if(isset($_SESSION['style']) 
{ 
echo '<link rel="stylesheet" href="'.$_SESSION['style'].'.css" type="text/css" media="all" />'; 
} 
?> 
</head> 

您的从/切换到桌面CSS的链接。

<a href="?style=desktop">Desktop version</a> 
<a href="?style=mobile">Mobile version</a>