サイトが他のナビゲーション リンクの横にある「デスクトップ」ビュー (画面の利用可能な幅 > 768) の場合、単純なドロップダウン ログイン メニューを持つレスポンシブ サイトがあります。画面の幅が 768 を下回ると、ナビゲーション リンクは最終的に選択オプションになります。問題は、ドロップダウン ログイン メニューが選択オプション内から機能しないことです。
<a href>
画面幅が 768 より小さくなったときに、PHP を使用して、ドロップダウン ログイン メニューをシンプルなリンクに変更したいと考えています。
今、私は自分のページに持っています<head>
:
<?
$screenWidth = '<script type="text/javascript">document.write(screen.availWidth);</script>';
?>
で<body>
:
<?
if($screenWidth <= "768") {
echo '<li><a href="login.php">Log in</a></li>';
} else {
?>
<div id="fancy">
<li id="login">
<a id="login-trigger" href="#">Log in <span>▼</span></a>
<div id="login-content">
<form>
<fieldset id="inputs">
<input id="username" type="email" name="Email" placeholder="Your email address" required>
<input id="password" type="password" name="Password" placeholder="Password" required>
</fieldset>
<fieldset id="actions">
<input type="submit" id="submit" value="Log in">
<label><input type="checkbox" checked="checked"> Keep me signed in</label>
</fieldset>
</form>
</div>
</li>
<? } ?>
私のデスクトップでは、1920 を与える $screenWidth をエコーしました。したがって、「派手な」ドロップダウン ログイン メニューが表示されることを期待します。(そしてそうです)。
<a href>
私のモバイルでは、$screenWidth エコーは 320 を返します。リンクが表示されることを期待します。(そうではなく、代わりに「ファンシー」メニューが表示されます)。
本体でエコーされたときに変数が異なる数値を与えるのは奇妙に思えますが、if ステートメントで比較すると出力は変わりません。
出力を変更するより良い方法はありますか?
編集:jqueryレスポンシブメニューコード
jquery.responsivemenu.js:
(function($) {
$.fn.responsiveMenu = function(options) {
var defaults = {autoArrows: false}
var options = $.extend(defaults, options);
return this.each(function() {
var $this = $(this);
var $window = $(window);
var setClass = function() {
if ($window.width() > 768) {$this.addClass('dropdown').removeClass('accordion').find('li:has(ul)').removeClass('accorChild');}
else {$this.addClass('accordion').find('li:has(ul)').addClass('accorChild').parent().removeClass('dropdown');}
}
$window.resize(function() {
setClass();
$this.find('ul').css('display', 'none');
});
setClass();
$this
.addClass('responsive-menu')
.find('li.current a')
.live('click', function(e) {
var $a = $(this);
var container = $a.next('ul,div');
if ($this.hasClass('accordion') && container.length > 0) {
container.slideToggle();
return false;
}
})
.stop()
.siblings('ul').parent('li').addClass('hasChild');
if (options.autoArrows) {
$('.hasChild > a', $this)
.find('strong').append('<span class="arrow"> </span>');
}
});
}
})(jQuery);