2017年更新
この回答に対して別の賛成票を受け取ったばかりなので、もう一度考えてみようと思いました。
現在のブラウザでは、他の回答の transform(-50%, -50%) テクニックでうまくいくはずですが、コンテンツコンテナの設定方法によっては、ウィンドウの中央に表示されない場合があります。ウィンドウよりも小さいか大きいコンテナの中心である可能性があります。
最新のブラウザーはビューポート ユニット (vh、vw) をサポートしており、ビューポートのセンタリングに関する限り、探しているものを正確に提供します。現在の位置からビューポートの中心までのアニメーションは、スクロールが原因で別の問題になります。
http://caniuse.com/#feat=viewport-units
https://developer.mozilla.org/en-US/docs/Web/CSS/length (vh、vw を参照)
CSS 変換なし
絶対配置を使用すると、css-transform を使用せずにこれを実現できます。
(完全なコードはこちら: http://jsfiddle.net/wkgWg/ )
.posDiv
{
position:absolute;
top:0;
left:0;
margin:0;
border:1px solid red;
-moz-transition:all 2s;
-webkit-transition:all 2s;
-o-transition:all 2s;
transition:all 2s;
}
.triggerElement:hover .posDiv
{
top:50%;
left:50%;
margin-left:-50px;
margin-top:-50px;
-moz-transition:all 2s;
-webkit-transition:all 2s;
-o-transition:all 2s;
transition:all 2s;
}
CSS トランスフォームあり
CSS-Transform を引き続き使用する場合は、JavaScript を使用して変換の「中心」または終了位置を計算し、実行時に変換ステートメントを生成して添付する必要があります。原点変換ベクトルは、「中心から画面へ」ベクトルから差し引く必要があります。
これは、Rico Sta による jQuery.transit プラグインを介して css-transform (サポートされている場合) を使用する JavaScript バージョンです。クルス。
(完全なフィドル: http://jsfiddle.net/ZqpGL/263/ )
$(function() {
var $cards = $('.card');
var cardInFocus = null;
$cards.each(function(index, elem) {
var $elem = $(elem);
var pos = $elem.position();
$(elem).data('orig-x', pos.left);
$(elem).data('orig-y', pos.top);
});
var reset = function() {
if (cardInFocus) {
$(cardInFocus).transition({
x: 0,
y: 0
});
}
};
$cards.on('focus', function(e) {
reset();
cardInFocus = this;
var $doc = $(document);
var centerX = $doc.width() / 2;
var centerY = $doc.height() / 2;
var $card = $(this);
var origX = $card.data('orig-x');
var origY = $card.data('orig-y');
$(this).transition({
x: centerX - origX,
y: centerY - origY
});
});
$cards.on('blur', function(e) {
reset();
});
});