13

Twitter Bootstrap ボタンのスピナーを作成しようとしています。スピナーは、進行中の作業 (つまり、ajax リクエスト) を示す必要があります。

ここに小さな例があります: http://jsfiddle.net/AndrewDryga/zcX4h/1/

HTML (jsfiddle で完全):

Unknown element (no animation here!):
<p>
  <button class="btn-success has-spinner">
    <span class="spinner"><i class="icon-spin icon-refresh"></i></span>
    Foo
  </button>
</p>

Works when width is defined:
<p>
  <a class="btn btn-success has-spinner">
    <span class="spinner"><i class="icon-spin icon-refresh"></i></span>
    Foo
  </a>
</p>

CSS:

.spinner {
  display: inline-block;
  opacity: 0;
  width: 0;

  -webkit-transition: opacity 0.25s, width 0.25s;
  -moz-transition: opacity 0.25s, width 0.25s;
  -o-transition: opacity 0.25s, width 0.25s;
  transition: opacity 0.25s, width 0.25s;
}

/* ... */

.has-spinner.active .spinner {
  opacity: 1;
  width: auto; /* This doesn't work, just fix for unkown width elements */
}

/* ... */

.has-spinner.btn.active .spinner {
    width: 16px;
}

.has-spinner.btn-large.active .spinner {
    width: 19px;
}

css "margin: auto" は予想されるアニメーションを生成せず、すべての要素のスピナー幅は css で定義する必要があります。この問題を解決する方法はありますか? また、スピナーを整列/表示するより良い方法はありますか?

そして、ボタンのパディングで遊んで、ボタンの幅が変わらない場所、スピナーが表示されているとき、または幅を変更するボタンが大丈夫なときにそれを作る必要がありますか? (悪い場合は、スニペットとしてどこかに置きます)

4

4 に答える 4

35

width の代わりに max-width を使用することで、この問題を解決できました。また、これは純粋な CSS ソリューションであるため、ほぼどこでも使用できます (たとえば、タグに X マークを表示する、ユーザーがマウスをその上に置いたときなど)。

デモ: http://jsfiddle.net/AndrewDryga/GY6LC/

新しい CSS:

.spinner {
  display: inline-block;
  opacity: 0;
  max-width: 0;

  -webkit-transition: opacity 0.25s, max-width 0.45s; 
  -moz-transition: opacity 0.25s, max-width 0.45s;
  -o-transition: opacity 0.25s, max-width 0.45s;
  transition: opacity 0.25s, max-width 0.45s; /* Duration fixed since we animate additional hidden width */
}

/* ... */

.has-spinner.active .spinner {
  opacity: 1;
  max-width: 50px; /* More than it will ever come, notice that this affects on animation duration */
}
于 2013-04-13T14:24:37.067 に答える
4

現在最新の Bootstrap (3.3.5)、font-awesome (4.3.0)、jQuery (2.1.3) を使用するように@andrew-drygaソリューションを更新し、わずかに変更しました。

ここにあります:

 <button class="btn btn-success has-spinner">
    <i class="fa fa-spinner fa-spin"></i>
    Foo
 </button>

 $('a.has-spinner, button.has-spinner').click(function() {
     $(this).toggleClass('active');
 });

さらに、適切な CSS 変更 ( JSFiddle ) が必要です。

于 2015-07-03T11:16:36.563 に答える