の従来のアプローチで.center { position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%); }
は、中央に配置された要素の周囲に空きスペースを確保しようとするため、中央に配置された要素の幅が本来あるべきサイズよりも小さくなるなど、理想的ではなくなります。
@proseosocの回答はそのシナリオでうまく機能し、中央の要素の範囲をビューポート側の端まで拡張します。ただし、中央揃えの要素は、スクロールバーを含むビューポート全体の中央に配置されます。ただし、ユースケースでスクロールバーなしでスペース内の要素を中央に配置する必要がある場合は、この変更された回答を使用できます。このアプローチは、スクロールバーを使用せずに要素を空間の中央に配置する前述の従来のアプローチにも似ています。
左右中央揃え
.horizontal-center {
position: fixed;
left: calc((50vw - 50%) * -1); /* add negative value equal to half of the scrollbar width if any */
transform: translate(calc(50vw - 50%));
}
垂直方向に中央揃え
.vertical-center {
position: fixed;
top: calc((50vh - 50%) * -1);
transform: translate(0, calc(50vh - 50%));
}
水平方向と垂直方向の中央揃え
.center {
position: fixed;
left: calc((50vw - 50%) * -1);
top: calc((50vh - 50%) * -1);
transform: translate(calc(50vw - 50%), calc(50vh - 50%));
}