私はプロジェクトに取り組んできましたが、解決したいブートストラップの動作に矛盾があることに気付きました。
ポップオーバー (またはツールチップなど、基本的には同じもの) が画面の端に近づくと (右側のポップオーバーの場合、端に近づくと)、画面外に出ないように収縮します (機能するだけです)。ある程度までですが、通常はそれで十分です)。
これは、配置が左にある場合には発生しません。
すなわち:
正しい配置:
通常の幅:
端に近い:
左の配置:
通常の幅:
端に近い:
これらの画像は、問題を説明するために私が書いた小さなDEMOからのものです。
ソースコードをいじりましたが、これまでのところ役に立ちませんでした。そもそもこの動作の正確な原因に指を置くことができないようです。
何か案は?
ps
Bootstrap 3.1.1 を使用しています。新しい 3.2 ではこの問題は解決されません(この時点でのアップグレードは避けたいと思います)。
メジャーアップデート!
掘り下げた後、これはブートストラップとは関係がないことがわかりました-それは単純なcssです-要素を絶対に配置して横に押すと、画面にとどまろうとするようです。
私はこの動作について知りませんでした。自動的に発生しますが、押している方向にのみ発生します。つまり、左から押した div は画面の右端に到達すると縮小し、その逆も同様です。
たまたま、ポップオーバーがleft
割り当てでのみ配置されているため、一貫性のない動作が見られます。右に押すと収縮しますが、他の方向には収縮しません。
解決策は代入することright
です - 簡単に聞こえますか? それほどでもない。ソース コードを取得して少し操作し、次の行を追加しました (jsfiddle の 250 行目辺りのどこかに):
if (placement == 'left' && offset.left < 0) {
var right = ( $(window).width() + 10 ) - ( offset.left + actualWidth );
offset.left = 0;
$tip.offset(offset);
$tip.css({ 'right': right });
}
合理的ですね。左へのオフセットが 0 未満の場合 (つまり、画面外になる場合)、ウィンドウの幅を計算し、そこから左のオフセットとポップオーバー ( actualWidth
) 自体の幅を削除すると、右からの距離が得られます。
次に、オフセットを左にリセットし、右の配置を適用してください。しかし...それはある程度しか機能しません-つまり、2回目にしか機能しません。
あなた自身でそれをチェックしてください!一度ホバーすると位置がずれてしまい、マウスを横に引いてもう一度試すと、突然正しく配置されます。なんてこったい?
編集
わかりました、これはよく出てくるようですので、明確にします:
auto
配置については知っています。私はそれをしたくありません。ポップオーバーの移動先を制御したいのですが、自動的に決定させることは問題の解決策ではなく、単に回避しているだけです