PHP版本的CSS媒体查询


PHP version of CSS Media Queries

在网上找不到这个问题,我想把这个问题提出来。

是一个PHP版本的CSS媒体查询?

我假设您希望这样做是为了检测移动浏览器——如果不是,那么这个答案就有点不相关了。

您可以检查移动ESP的移动用户代理检测库。

没有。

浏览器不向服务器发送任何有关其媒体特性的信息,因此PHP没有实现此功能所需的信息。

我使用了一种方法(在http://php.net/manual/en/faq.html.php示例#4上找到),该方法结合了javascript和php来实现媒体查询的替代方法。我通过在php中嵌入javascript来发布一个变量(screen.width),然后php使用该变量来确定加载样式表的断点来实现这一点。在head标签中包含以下代码片段:

<?php
  if (isset($_GET['width'])) {
    $width = $_GET['width'];
    if ($width <= 480) { //mobile devices
      $style = '<link rel="stylesheet" href="mobile.css" type="text/css">';
    } elseif ($width <= 720){ //tablets
      $style = '<link rel="stylesheet" href="tablet.css" type="text/css">';
    } else { //desktops
      $style = '<link rel="stylesheet" href="desktop.css" type="text/css">';
    }
    echo $style;
  } else {
      echo "<script language='javascript'>'n";
      echo "  location.href='"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}" . "&width='" + screen.width; 'n";
      echo "</script>'n";
      exit();
  }
?>

我发现使用这种方法在页面的内容加载上也更有效,不像媒体查询(即使没有必要,也会为所有设备加载CSS样式-即移动设备仍然会加载桌面样式)。该方法确保只加载特定于设备的样式表,假设您的样式表具有适用于所有媒体设备的通用样式。

您可以查看$_SERVER['HTTP_USER_AGENT']并根据您在那里找到的内容做出决定。可能在某个地方有一个图书馆已经处理了这个问题,但我不知道有一个我的头。

可以使用get_browser php函数来确定某些浏览器功能。但这和媒体提问不一样。css媒体查询是有条件的设备显示测量。php函数不返回这些信息。