2011-04-06 32 views
8

在網上找不到任何東西,想把問題拋出去。PHP版本的CSS媒體查詢

CSS Media Queries是PHP版本嗎?

+2

雖然我很好奇,你想達到什麼目的? – whoughton 2011-04-06 17:53:10

+0

使用MobileESP並希望針對特定的分辨率,而不僅僅是設備本身與PHP – 2011-04-06 19:30:09

+0

我認爲你不得不在這個階段恢復到JavaScript。用特定的方法向服務器發出異步請求,然後理論上可以根據這些數據加載新的/更新的/環境特定的樣式表。但是你仍然必須收集你自己想要的參數,將它們發送到服務器,並決定在它後面交換什麼。因此沒有像CSS那樣乾淨利落的媒體查詢。但我覺得更靈活和可定製。 – whoughton 2011-04-06 22:07:47

回答

2

我假設你想這樣做的目的是檢測移動瀏覽器 - 如果沒有,那麼這個答案是略有不相關的。

您可以檢出Mobile ESP移動用戶代理檢測庫。使用起來非常簡單,在我的經驗中運作良好。

+0

是的,我看過這個,我喜歡它,但它不提供特定的設備檢測。希望將其與CSS Media Queries結合使用,爲移動設備提供特定功能,例如iPhone 4視網膜顯示。我知道我可以用CSS做到這一點,但我想動態加載它以減小文件大小 – 2011-04-06 19:28:23

+0

爲了防止其他人想要使用此路線,請查看https://github.com/serbanghita/Mobile-Detect – 2013-02-04 20:15:27

1

您或許可以查看$_SERVER['HTTP_USER_AGENT']並根據您在該處找到的內容做出決定。可能有一個圖書館在那裏已經照顧到了這一點,但我並沒有意識到我的頭頂有一個。

2

不,沒有。

瀏覽器不會將其任何media features的信息發送到服務器,所以PHP沒有實現這個所需的信息。

1

您可以使用get_browser php函數來確定某些瀏覽器功能。但這與媒體查詢不一樣。 CSS媒體查詢是有條件的設備顯示測量。 php函數不會返回這些信息。

2

我已經使用了一種方法(在http://php.net/manual/en/faq.html.php示例#4上找到),它結合了javascript和php來實現媒體查詢的替代方法。我通過使用嵌入在我的PHP內的JavaScript來實現這一點,以發佈一個變量(screen.width),然後由php使用該變量來確定加載樣式表的斷點。包括下面的代碼片段到你的頭標記:

<?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樣式必要的 - 即移動設備仍然可以加載桌面樣式)。這種方法可以確保樣式表只會被裝載到特定的設備上,前提是您的樣式表具有所有媒體設備的通用樣式。

+0

Suvi Vignarahah謝謝你分享這個。我一直在尋找一種方法來檢測使用php的媒體查詢。真棒! – 2015-07-05 15:07:24