top
sets how far an element is moved from the top. This page shows how it behaves with relative
, absolute
, fixed
, and sticky
, explains what “%” means, and gives quick tips for when it doesn’t work—plus short, copy-paste examples.
top
プロパティは、ボックスを配置する場合の、上からの配置位置(距離)を指定する際に使用します。 上からの配置位置(距離)とは、基準位置の上端から配置するボックスの上端までの距離を指します。
top
プロパティで指定するのは基準位置からの距離のみです。 実際の表示位置の指定には、position
プロパティを併用して、配置方法(基準位置)を設定する必要があります。 尚、top
プロパティの値は、position
プロパティの値が static
以外のときに有効となります。
top
は「上からどれだけズラすか」を決めるプロパティです。position
が static
のままだと効きません。relative
・absolute
・fixed
・sticky
で働き方が変わります。
指定できる値は auto
、長さ(例:px
, rem
など)、%
(原則は“高さ”が基準)です。負の値も使えます。
position: relative
position: absolute
position
が static
以外)」を基準に、上からの距離を決めます。該当がなければページ全体が基準。position: fixed
position: sticky
top
に達した位置で“貼り付く”しきい値として動きます。top: 20%
は、一般に“高さ”に対する 20% です。absolute
なら基準の箱の高さ、fixed
ならビューポートの高さが使われます。
position
が static
のままになっていないかabsolute
なのに“基準の親”に position
が付いていない(relative
など)sticky
はスクロールと十分な高さが必要。親に overflow
が付くと貼り付きが見えないことがありますinset
(= top
+ right
+ bottom
+ left
)。例:inset: 0;
inset-block-start
(top
相当)transform: translateY()
を使うと描画が軽くなる場面がありますHTML
<!-- relative で少し持ち上げる -->
<div class="tag">NEW</div>
<style>
.tag { position: relative; top: -4px; }
</style>
HTML
<!-- 親を基準に絶対配置 -->
<div class="box">
<button class="close">×</button>
</div>
<style>
.box { position: relative; }
.close { position: absolute; top: 8px; right: 8px; }
</style>
HTML
<!-- スクロールで貼り付くヘッダー -->
<header class="siteHeader">メニュー</header>
<style>
.siteHeader { position: sticky; top: 0; background: #fff; }
</style>
top
が効かないのはなぜ?position
が static
、基準の親に position
がない、sticky
でスクロールや高さが足りない、などが代表例です。top: 20%
の % は何に対する割合?absolute
は基準の箱の高さ、fixed
はビューポートの高さが基準です。top
と transform: translateY()
の使い分けは?top
、アニメーション中心なら translateY
が向きます。inset
を使います(例:inset: 0;
)。論理方向なら inset-block-start
が top
相当です。