【问题标题】:swap stylesheet for jquerymobile with a link使用链接交换 jquerymobile 的样式表
【发布时间】:2013-08-27 13:25:33
【问题描述】:

我在 URL 中有一个名为 $cat(代表“类别”)的变量。

根据是“a”还是“b”,我使用链接交换样式表:

<?php
if($cat == "a") { ?> 
   <link rel="stylesheet" href="/css/styleA.css"> 
<?php }
elseif($cat == "b") { ?>
   <link rel="stylesheet" href="/css/styleB.css"> 
<?php } ?>

styleA.css 将标题的background-color 设为蓝色,styleB.css 将其设为红色

&lt;div id="header" data-role="header" data-position='fixed'&gt;...&lt;/div&gt;

如果我点击如下所示的链接:

<a href="index.php?cat=a">Click for red</a>
<a href="index.php?cat=b">Click for blue</a>

URL 确实有效(内容取决于 $cat),我确实得到了 $cat 的值,但样式表似乎没有交换,因为颜色没有改变。但是如果我重新加载页面(使用之前链接给出的 URL)样式表交换并且一切正常。

我对我正在开发的网站的桌面版本使用了相同的方法,并且一切正常。 这个问题似乎只有在我使用 jquery mobile 时才会出现。

有人知道为什么这不能正常工作吗?

编辑(添加 html): 差不多就这些了,剩下的就在这里:

头部:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<title></title>
<link rel="stylesheet" href="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.css">
<!-- Extra Codiqa features -->
<link rel="stylesheet" href="/css/codiqa.ext.css">
<link rel="stylesheet" href="/css/style.css">
<?php if($cat == "a") { ?>  <link rel="stylesheet" href="/css/styleASS.css"> <?php } 
      if($cat == "b")   { ?> <link rel="stylesheet" href="/css/styleBB.css"> <?php }
?>
<!-- jQuery and jQuery Mobile -->
<script src="https://d10ajoocuyu32n.cloudfront.net/jquery-1.9.1.min.js"></script>
<script src="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
<!-- Extra Codiqa features -->
<script src="https://d10ajoocuyu32n.cloudfront.net/codiqa.ext.js"></script>
</head>


<div data-role="page" id="page">
   <div id="panel_menu" data-role="panel" data-display="overlay">
        <ul data-role="listview">
            <li role="heading">Navigation</li>
            <li><a href="#">Home</a></li>
            <li><a href="#">Products</a></li>
            <li><a href="#">Service</a></li>
            <li><a href="#">Contact</a></li>
            <li><a href="#">Login</a></li>
        </ul>
    </div>
    <div id="header" data-role="header" data-position='fixed'>
        <h1>Header</h1>
        <a href="#panel_menu">Menu</a>
    </div>
     <div data-role="content">

     <?php include "$menu_page_content";?>

     <a href="?cat=a&lang=en&menu=home">a</a>
      <a href="?cat=b&lang=en&menu=home">b</a>

    </div>
    <div data-role="footer" data-position="fixed" data-theme="d">
        <div data-role="navbar" class="ui-icon-nodisc">
          <ul>
            <li><a href="#" id='language' data-icon='custom'>Change Language</a></li>
            <li><a href="#" id='category' data-icon="custom" >Change Category</a></li>
            <li><a href="#" id='contact' data-icon="custom" >Contact</a></li>
          </ul>
        </div>
    </div>
</div><!-- page -->

编辑: 将其上传到免费主机:here 您可以单击内容区域中的链接之一,也可以单击页脚区域中的“类别”。点击并重新加载页面。

【问题讨论】:

    标签: php css hyperlink stylesheet


    【解决方案1】:

    如果您的大多数样式除了颜色之外都相同,我建议将它们放在一个样式表中,并在一个类中写入正文。

    举例

     .header {
          /* general header styles margins paddings and whatnot */
     }
    
     .cat-a .header {
          background-color: red;
     }
     .cat-b .header {
          background-color: blue;
     }
    

    然后在body上可变写类

     <body class='cat-<?php echo $cat; ?>'>
    

    【讨论】:

      【解决方案2】:

      这必须取决于数据在您使用的浏览器上的缓存方式。

      有几种可能的解决方案。

      您不能交换 CSS 样式表,而是使用 PhP 或 Javascript 添加样式属性。这样你就可以 100% 确定它会改变。 (顺便说一句,只要用户有 javascript,PhP 就可以做到 100% 确定)

      或者强制浏览器每次都重新加载 CSS 表格,但这不是带宽友好的解决方案,我不建议这样做。


      如果您想使用它来保存用户的选择并每次都重新加载正确的背景,请看一下: http://www.dynamicdrive.com/forums/archive/index.php/t-44389.html

      虽然没有找到任何 SO 链接

      【讨论】:

      • 我不认为这取决于我使用的设备,因为我在使用的所有设备(IE、FF、GC、iPhone/Pod/Pad、HTC)上都有问题一, ...)。当然你是对的,我可能只使用 JS,但我仍然想了解为什么这不适用于 PHP
      • 设备并不是我真正的意思抱歉。更多的是关于浏览器。大多数浏览器都有相同的行为,它们不会一直重新加载样式表。我认为移动浏览器尝试下载它的频率比计算机浏览器要少,因为可用带宽不一样。
      • 这个问题出现在我能够测试的每个浏览器中的每个设备上,此外我在本网站的桌面版本上使用了完全相同的方法,它似乎在那里完美运行。编辑:桌面版本也适用于所有移动设备(到目前为止)
      • 好吧,This issue seems to only appear if I use jquery mobile. 这让我失望了。您能否将 HTML 代码添加到您的问题或将其上传到任何在线工具以便我们查看?
      • 问题现在包含完整的 HTML(页面)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 2012-12-26
      • 2019-01-28
      • 1970-01-01
      相关资源
      最近更新 更多