ナビゲーションバーの1行のアイテムの最大数を変更する変数を検索できませんでした。
私はjQueryMobileから始めて、約7つの1文字のアイテムでナビゲーションバーを作成しようとしています。 5つを超えるアイテムが存在する場合、ナビゲーションバーは自動的にラップします。これは私のプロジェクトには望ましくありません。
誰かがこの動作を規制するコードまたはCSSの一部を私に指摘できますか?
JQuery mobile 1.4.0を使用して、私がしなければならなかったのは、独自のCSSクラスを作成することだけです。
.mytab {
width: 12.5% !important; /* 12.5% for 8 tabs wide */
clear: none !important; /* Prevent line break caused by ui-block-a */
}
..そしてそれを私のリストに含めてください:
<ul id='tabsList'>
<li class="mytab"><a href="#tab1" data-ajax="false">One</a></li>
<li class="mytab"><a href="#tab2" data-ajax="false">Two</a></li>
<li class="mytab"><a href="#tab3" data-ajax="false">Three</a></li>
<li class="mytab"><a href="#tab4" data-ajax="false">Four</a></li>
<li class="mytab"><a href="#tab5" data-ajax="false">Five</a></li>
<li class="mytab"><a href="#tab6" data-ajax="false">Six</a></li>
<li class="mytab"><a href="#tab7" data-ajax="false">Seven</a></li>
<li class="mytab"><a href="#tab8" data-ajax="false">Eight</a></li>
</ul>
(元の回答ではjQuery mobileのバージョンが間違っていました)
そうです、jQMは列を5に制限します。コードを見ると、これは関数のようです。
/*
* jQuery Mobile Framework : plugin for creating CSS grids
* Copyright (c) jQuery Project
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*/
(function($, undefined ) {
$.fn.grid = function(options){
return this.each(function(){
var o = $.extend({
grid: null
},options);
var $kids = $(this).children(),
gridCols = {solo:1, a:2, b:3, c:4, d:5},
grid = o.grid,
iterator;
if( !grid ){
if( $kids.length <= 5 ){
for(var letter in gridCols){
if(gridCols[letter] == $kids.length){ grid = letter; }
}
}
else{
grid = 'a';
}
}
iterator = gridCols[grid];
$(this).addClass('ui-grid-' + grid);
$kids.filter(':nth-child(' + iterator + 'n+1)').addClass('ui-block-a');
if(iterator > 1){
$kids.filter(':nth-child(' + iterator + 'n+2)').addClass('ui-block-b');
}
if(iterator > 2){
$kids.filter(':nth-child(3n+3)').addClass('ui-block-c');
}
if(iterator > 3){
$kids.filter(':nth-child(4n+4)').addClass('ui-block-d');
}
if(iterator > 4){
$kids.filter(':nth-child(5n+5)').addClass('ui-block-e');
}
});
};
多少の作業が必要ですが、これを目的の7列レイアウトに拡張できます。また、新しい列を処理するためにカスタムCSSも追加する必要があるため、新しい関数は次のようになります。
/*
* jQuery Mobile Framework : plugin for creating CSS grids
* Copyright (c) jQuery Project
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*/
(function($, undefined ) {
$.fn.grid = function(options){
return this.each(function(){
var o = $.extend({
grid: null
},options);
var $kids = $(this).children(),
gridCols = {solo:1, a:2, b:3, c:4, d:5, e:6, f:7},
grid = o.grid,
iterator;
if( !grid ){
if( $kids.length <= 7 ){
for(var letter in gridCols){
if(gridCols[letter] == $kids.length){ grid = letter; }
}
}
else{
grid = 'a';
}
}
iterator = gridCols[grid];
$(this).addClass('ui-grid-' + grid);
$kids.filter(':nth-child(' + iterator + 'n+1)').addClass('ui-block-a');
if(iterator > 1){
$kids.filter(':nth-child(' + iterator + 'n+2)').addClass('ui-block-b');
}
if(iterator > 2){
$kids.filter(':nth-child(3n+3)').addClass('ui-block-c');
}
if(iterator > 3){
$kids.filter(':nth-child(4n+4)').addClass('ui-block-d');
}
if(iterator > 4){
$kids.filter(':nth-child(5n+5)').addClass('ui-block-e');
}
if(iterator > 5){
$kids.filter(':nth-child(6n+6)').addClass('ui-block-f');
}
if(iterator > 6){
$kids.filter(':nth-child(7n+7)').addClass('ui-block-g');
}
});
};
}); // end
CSSの場合:
これを変える:
.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height:1px;}
これに:
.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e, .ui-block-f, .ui-block-g { margin: 0; padding: 0; border: 0; float: left; min-height:1px;}
そしてこれらを追加します:
/* grid e: 16/16/16/16/16/16 */
.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e .ui-block-f { width: 16%; }
.ui-grid-d .ui-block-a { clear: left; }
/* grid f: 14/14/14/14/14/14/14 */
.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e .ui-block-f .ui-block-g { width: 14%; }
.ui-grid-d .ui-block-a { clear: left; }
他の変更もあるかもしれませんが、これらは現在目立っているものです。
失敗したナビゲーションバーのボタンを使用しようとしましたが、それらも互いにスタックしています: ライブリンク
フィルパフォードから
"そしてこれらを追加します:...." {css code}
...に変更してください(注:幅は16.65%に変更されました。StackOverflowでは1文字の編集が許可されていないため、このメモが追加されました。)
/*グリッドe:16/16/16/16/16/16 * / 。ui-grid-e.ui-block-a、.ui-grid-e .ui- block-b、.ui-grid-e .ui-block-c、.ui-grid-e .ui-block-d、.ui-grid-e .ui-block-e、.ui-grid-e。 ui-block-f {幅:16.65%; } 。ui-grid-e.ui-block-a {クリア:左; } /*グリッドf:14/14/14/14/14/14/14 */ 。ui-grid-f.ui-block-a、。 ui-grid-f .ui-block-b、.ui-grid-f .ui-block-c、.ui-grid-f .ui-block-d、.ui-grid-f .ui-block-e 、.ui-grid-f .ui-block-f、.ui-grid-f .ui-block-g {幅:14.2857%; } 。ui-grid-f.ui-block-a {クリア:左; }
必要な数だけナビゲーションバーにアイテムを追加する別の方法を試すことができます。説明させてください。
NavbarのHTMLは休閑中です。
<div data-role="navbar" id="my-navbar">
<ul>
<li><a href="a.html">One</a></li>
<li><a href="b.html">Two</a></li>
<li><a href="a.html">Three</a></li>
<li><a href="b.html">Four</a></li>
<li><a href="a.html">Five</a></li>
<li><a href="b.html">Seven</a></li>
</ul>
このJquery関数を追加して、navbarのアイテム数を制限するクラスui-grid-aを<ul>
から削除します。
$(document).ready(function() {
$("#my-navbar > ul").removeClass("ui-grid-a");
});
次に、各ナビゲーションバーアイテムの幅を計算する必要がありますOR手動で設定できます。この例では、ナビゲーションバーに表示する7つのアイテムがあり、スペースを各アイテムに均等に分割します。 。
PHPページの場合はこれを行います。
<?php
/// calculating width of each navbar ///
$width = 100/7; /// dividing 100% space among 7 items. If data is coming form DB then use mysql_num_rows($resource) instead of static number "7"
?>
<style>
.ui-block-a {
width:<?php echo $width;?>% !important;
}
.ui-block-b {
width:<?php echo $width;?>% !important;
}
</style>
<?php
/// end calculating ///
?>
静的HTMLページの場合、各アイテムの幅を手動で設定できます
<style>
.ui-block-a {
width:14.28% !important;
}
.ui-block-b {
width:14.28% !important;
}
</style>
それでおしまい :)
私はそれを私のために使用しました、そしてそれはうまく働きます。
後:
/ *グリッドd:20/20/20/20/20 */.ui-grid-d .ui-block-a、.ui-grid-d .ui-block-b、.ui-grid-d .ui -block-c、.ui-grid-d .ui-block-d、.ui-grid-d .ui-block-e {幅:19.925%; } .ui-grid-d>:nth-child(n){幅:20%; } .ui-grid-d .ui-block-a {クリア:左; }
CSSではADD
/ *グリッドe:16/16/16/16/16/16 */.ui-grid-e .ui-block-a、.ui-grid-e .ui-block-b、.ui-grid-e .ui-block-c、.ui-grid-e .ui-block-d、.ui-grid-e .ui-block-e、.ui-grid-e .ui-block-f {幅:16.66% ; } .ui-grid-e>:nth-child(n){幅:16.6%; } .ui-grid-e .ui-block-a {クリア:左; }
/ *グリッドf:14/14/14/14/14/14/14 */.ui-grid-f .ui-block-a、.ui-grid-f .ui-block-b、.ui-grid -f .ui-block-c、.ui-grid-f .ui-block-d、.ui-grid-f .ui-block-e、.ui-grid-f .ui-block-f、.ui -grid-f .ui-block-g {幅:14.28%; } .ui-grid-f>:nth-child(n){幅:14.28%; } .ui-grid-f .ui-block-a {クリア:左; }
そしてjsで少し変更を加えます:
(function( $, undefined ) {
$.fn.grid = function( options ) {
return this.each(function() {
var $this = $( this ),
o = $.extend({
grid: null
}, options ),
$kids = $this.children(),
gridCols = { solo:1, a:2, b:3, c:4, d:5, e:6, f:7 },
grid = o.grid,
iterator;
if ( !grid ) {
if ( $kids.length <= 7 ) {
for ( var letter in gridCols ) {
if ( gridCols[ letter ] === $kids.length ) {
grid = letter;
}
}
} else {
grid = "a";
$this.addClass( "ui-grid-duo" );
}
}
iterator = gridCols[grid];
//alert(iterator);
$this.addClass( "ui-grid-" + grid );
$kids.filter( ":nth-child(" + iterator + "n+1)" ).addClass( "ui-block-a" );
if ( iterator > 1 ) {
$kids.filter( ":nth-child(" + iterator + "n+2)" ).addClass( "ui-block-b" );
}
if ( iterator > 2 ) {
$kids.filter( ":nth-child(" + iterator + "n+3)" ).addClass( "ui-block-c" );
}
if ( iterator > 3 ) {
$kids.filter( ":nth-child(" + iterator + "n+4)" ).addClass( "ui-block-d" );
}
if ( iterator > 4 ) {
$kids.filter( ":nth-child(" + iterator + "n+5)" ).addClass( "ui-block-e" );
}
if ( iterator > 5 ) {
$kids.filter( ":nth-child(" + iterator + "n+6)" ).addClass( "ui-block-f" );
}
if ( iterator > 6 ) {
$kids.filter( ":nth-child(" + iterator + "n+7)" ).addClass( "ui-block-g" );
}
});
};
})( jQuery );
これにより最大7グリッドを使用できます。 HTMLコードでは、6グリッドの場合はdata-grid = "e"、7グリッドの場合はdata-grid = "f"を使用します。
OPは、5を超える奇数のアイテムがあることを明示していませんでした。偶数の場合、jQueryのレスポンシブグリッドをnavbarと組み合わせて使用できます。
例えば.
<div data-role="navbar">
<div class="ui-grid-a center">
<div class="ui-block-a">
<ul>
<li><a href="#" data-icon="camera">camera</a></li>
<li><a href="#" data-icon="edit">edit</a></li>
<li><a href="#" data-icon="gear">settings</a></li>
</ul>
</div>
<div class="ui-block-b">
<ul>
<li><a href="#" data-icon="grid">grid</a></li>
<li><a href="#" data-icon="info">about</a></li>
<li><a href="#" data-icon="mail">mail</a></li>
</ul>
</div>
</div>
</div>
別のUIパターンを見てみます。これは、小さなiphone 4、またはiphone5デバイスでさえ本当にトリッキーなナビゲーションバーになるでしょう。これができるからといって、そうすべきだとは限りません。
White-spaceプロパティは、要素内の空白の処理方法を指定します。
nowrap:空白のシーケンスは単一の空白に折りたたまれます。テキストが次の行に折り返されることはありません。 <br />
タグが検出されるまで、テキストは同じ行に続きます
また、CSSワードラッププロパティ
break-Word:コンテンツは必要に応じて次の行に折り返され、必要に応じてWord-breakも発生します。
この回答の出典:W3C
JQueryモバイルコードも調べて、次のセクションを見つけました。
.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width:20%; }
したがって、おそらくこの量を減らすことで、リスト内のより多くのアイテムを絞ることができるはずです。 (見た目では、fとgも定義する必要があります。これはeまでしか上がっていないからです)