2011-10-11 14 views
9

私はbuttonset()にすべてのボタンの間にギャップがある興味深い現象に遭遇しています。明らかに、jqueryデモのように突き合わせることを望みます。jqueryuiのボタン間のギャップbuttonset()

私のコードは、かなりの在庫

うるさく十分HTML

<div style="float:right;" id="filter-button-bar"> 
    <input type="radio" id="it_button" name="radio" class="filter-button" /><label for="it_button">Information</label> 
    <input type="radio" id="rev_button" name="radio" class="filter-button" /><label for="rev_button">Revenue</label> 
    <input type="radio" id="ent_button" name="radio" class="filter-button" /><label for="ent_button">Entertainment</label> 
    <input type="radio" id="sec_button" name="radio" class="filter-button" /><label for="sec_button">Security</label> 
    <input type="radio" id="asst_button" name="radio" class="filter-button" /><label for="asst_button">Assistants</label> 
    <input type="radio" id="all_button" name="radio" class="filter-button" checked="checked"/><label for="all_button">All</label> 
</div> 

JS

$(function() { 
    $("#filter-button-bar").buttonset(); 
    $(".filter-button").button({ 
     icons: { 
      primary: "ui-icon-search" 
     } 
    }); 
}); 

Screenshot

あるjsfiddleに入れたときに、すべてが素晴らしいです。 jsfiddle

答えて

15

これらのボタンの間の空白を削除します。これはあなたの問題を解決します:

<input type="radio" id="it_button" name="radio" class="filter-button" /><label for="it_button">Information</label><input type="radio" id="rev_button" name="radio" class="filter-button" /><label for="rev_button">Revenue</label><input type="radio" id="ent_button" name="radio" class="filter-button" /><label for="ent_button">Entertainment</label><input type="radio" id="sec_b Et cetera 

は、HTMLソース内の空白は、通常は数例を除いて、HTMLで無視されます。

  • CSS:white-space: prepre-wrap、...(と<pre>タグ)
  • インライン要素間。

このアップデート後、あなたのコードはあまり読みにくくないようです。 1行にコード全体を配置したくない場合は、HTMLタグ内に改行を安全に追加することができます。

+0

すごい以下のコードを使用してウィジェットのコンストラクタをbuttonset jqueryのUIを上書きし、拡張することができ...私は驚いています。私は問題として空白に遭遇したことはありません。感謝! ありがとう! – Brian

+0

ps。私はなぜそれがjsfiddleでうまく見えたのだろうか? – Brian

+0

JQuery UIスタイルシートは '.ui-buttonset .ui-button'セレクタ(' jquery-ui.css')の 'margin-right:-0.3em'を定義します。負の値を指定すると、ボタンは左マージンの一部を「食べる」ようになります。 –

1

私はtextnode要素を削除するhereからアイデアを得たjqueryのを使用して、この空白を削除する方法を探しています:あなたのケースで、私はこのように書くことができ、

$('.ui-buttonset').contents().filter(function() { return this.nodeType == 3; }).remove(); 

それは、文書の負荷で行うことができます:

$(function() { 
    $(".filter-button").button({ 
     icons: { 
      primary: "ui-icon-search" 
     } 
    }) 
    .parent().buttonset() 
    .contents().filter(function() { return this.nodeType == 3; }).remove(); 
}); 

すべてのw3cブラウザ+ IE8でテストしても問題ありません。 私のコードを読むことができます。

私はおそらく、我々は0(間に1ピクセル+の1ピクセルの境界線)に右マージンを加える必要があり

更新最新のjQuery UI 1.8.16

を使用

か-1px(間に1ピクセルの境界線)それは一緒に固執する。

.ui-buttonset .ui-button { 
    margin-left: 0; 
    margin-right: -1px; 
} 
+0

男、ホワイトスペースのためにちょっと残忍です。クライアントは、適切なマークアップを送信するのではなく、DOMを変更して修正します。サーバー側の言語を使用していませんか?つまり、コードは250bしかないのですが、JSをより迅速に処理できるデスクトップではなく、モバイルユーザーをターゲットとする可能性が高いため、最後に修正してください。 – Alastair

+0

私は同意しましたが、私はその時点でデスクトップユーザーのための私のクイックソリューションを作成します。モバイルに最適な方法を見つけることは、あなた次第です。これはサーバー側の言語ではなく、サーバー側またはクライアント側から削除できる空白です。あなたは単にASP.NETであなたの答えのような素晴らしいPHP ''を達成することはできません。その時私は自分のコードを読めるようにしたい。モバイル用のクライアントサイド処理を本当に最小限に抑えるには、標準のhtmlラジオを使用して、モバイルブラウザにレンダリングさせるか、ネイティブアプリを設計させることができます;-) jquery-ui it-selfはカスタムUI 。 – CallMeLaNN

+0

興味深い、@ calmelann!私は経験がありませんでした。私は時々遭遇したサンプルコードを見てください。今私はあなたがなぜこのようにしたのか理解しています。私はPHPでコードをエコーするのに迫っていました。なぜなら、IDEで見ている(と一緒に働く)悪夢だからです。 これは重大な問題ではありませんが、私はすばやく見ましたが、明らかにホワイトスペースを取り除くいくつかのASP.NET(#?!)コアモジュールがあります(サーバーレベルで、スクリプト/クラスではなく、ページを提供する前に)。 MSキットを使用している開発者にとってこの問題は修正され、世界中でかなりの帯域幅が節約される可能性があります。 – Alastair

2

この愚かなホワイトスペースの問題を回避するために、私は私の行を分割するためにPHPを使用:

<input type='radio'><? 
?><input type='radio'><? 
?><input type='radio'> 

それは恐ろしい回避策だがunusably-長い行を打ちます。自動的buttonsetウィジェットのすべての使用のための空白を削除するには

+0

これは、PHPが各行区切りに処理( "php mode"で入力)するよう強制します。動作しますが、あなたはいくつかのCPUのマイクロカプセルを失います。 – Arvy

0

、1は

var original_create = $.ui.buttonset.prototype._create; 
$.ui.buttonset.prototype._create = function() { 
    this.element.contents().filter(function() { 
     return this.nodeType == 3; 
    }).remove(); 
    original_create.call(this); 
} 
関連する問題