CSSを使用して要素のオフセットを取り除くにはどうすればよいですか?


88

いくつかの要素で位置の問題があります。IE8Developerツールを調べると、次のように表示されます。

オフセットはどこから来るのですか?

今、私は問題が12のオフセットであることをかなり確信していますが、どうすればそれを削除できますか?CSSオフセットプロパティの記述が見つかりません。マージンに加えてオフセットが必要ですか?

これがこれを生成するコードです:

 <div id="wahoo" style="border: solid 1px black; height:100px;">

    <asp:TextBox ID="inputBox" runat="server" />

    <input id="btnDropDown" type="button" style="width:26px; height:26px; background-position: center center; border-left-color: buttonface; background-image: url(Images/WebResource.gif); border-bottom-color: buttonface; border-top-color: buttonface; background-repeat: no-repeat; border-right-color: buttonface;"  tabindex="99" />

    <div id="ListboxWrapper" style="display:none; position:absolute; onfocusout="this.style.display = 'none'"">
       <asp:ListBox ID="lstBoxCompany" runat="server" AutoPostBack="True" OnSelectedIndexChanged="lstBoxCompany_SelectedIndexChanged" style="z-index: 100;" Width="300px" />               
    </div>

</div>

オフセットのある要素は inputBox


要素は配置されていますか?チェックlefttopプロパティ。
jessegavin、2011年

6
ここでは少しのコードが非常に役立ちます。CSSには「オフセット」ルールはありませんが、IEにはランダムな場所にランダムなピクセルを追加する傾向があります。通常、フロートと配置に関係しています
Alex

私は「オフセット」が「他の要素に関連するピクセル」であると想定します-前の要素のマージンがこれを押し下げるなどです。現在、IE開発ツールを試してみる時間はありません。
クエンティン

インラインCSSを使用して完全なコードを追加したので、何が起こっているのかを確認できます
m.edmondson

これについて確認できるWebページの例はありますか。たとえば、Firebugをポイントしてより広いページを理解できるようにします。たとえば、入力コントロールは別のCSS定義からマージンまたはパディングを継承していますか?
クリスC

回答:


43

そのオフセットは基本的に、要素の位置css属性に基づいてブラウザーが要素に対して計算したx、y位置です。したがって、その<br>前またはその他の要素を配置すると、オフセットが変更されます。たとえば、次のようにして0に設定できます。

#inputBox{position:absolute;top:0px;left:0px;}

または

#inputBox{position:relative;top:-12px;left:-2px;}

したがって、上、左、右、および下の属性を使用していつでも修正できますが、位置の問題があっても、必ずしもオフセットの問題であるとは限りません。

問題のあるブラウザは非互換ですか?


2
垂直方向の配置に関するStonyのコメントも参照してください。要素のブラウザの位置を強制的に上書きするよりも、配置の設定を修正するほうが望ましいようです。
Jeremy Condit 2013年

33

私にとっては、トップオフセットを引き起こしていたのはvertical-align: baselinevs vertical-align: topでした。

設定してみてください vertical-align: top


2
これは絶対配置を使用するよりも優れています
user1

2
あなたの答えは素晴らしいです。整列を拒否するインラインブロックのdivが4つあるときに、垂直方向の整列を設定する必要があるという事実は強引です。あなたは何時間も仕事を終えました。ありがとうございました。
Corey Ogburn

協力<button>して埋め込まれた<li>要素。
アメシエル

9

クイックフィックス:

position: relative;
top: -12px;
left: -2px;

これでこれらのオフセットのバランスが取れますが、レイアウト全体を見て、そのボックスが他のボックスとどのように相互作用するかを確認する必要があるかもしれません。

専門用語については、leftrighttopおよびbottomCSSをされているオフセットプロパティを。これらは、要素を特定の場所に配置する(absoluteまたはで使用する場合fixed)、またはデフォルトの場所を基準にして要素を移動する(relative配置で使用する)ために使用されます。一方、マージンはボックス間のギャップを指定し、ボックスが折りたたまれる場合があるため、オフセットとして確実に使用できません。

ただし、この場合、オフセットはCSSオフセットから(単独で)計算されない場合があることに注意してください。


これは空白を要素の反対側に移動するだけです。
クエンティン、

@David何の空白?また、対象のボックス以外のものが移動されるのはなぜですか?
Alin Purcaru、2011年

空白とは、何もない空間です。対象となるボックス以外のものは動かされない、それがポイントです。下に1ピクセルあり、12ピクセル上に移動すると、1ピクセルではなく13ピクセル下になります。
クエンティン

2
@David空白の定義は同じではないかもしれませんが、私はあなたが言っていることを理解しています。ギャップが反対側に移動することに同意します。このソリューションは、使用できる場合と使用できない場合があるため、「クイックフィックス」と名付けました。それは、質問者が詳細を提供するまで私が提案できる唯一のものです。
Alin Purcaru

3

topプロパティとleftプロパティを負の値に設定することは、問題が単純に互換モードになっている場合には適切な回避策ではない可能性があります。これは、ページに<!DOCTYPE>宣言がないために発生し、IE8で互換モードでレンダリングされる場合があります。IE8開発者ツールで、[ドキュメントモード]の[Quirksモード]が選択されていないことを確認します。選択されている場合は、適切な<!DOCTYPE>宣言を追加する必要があります。


2

IE開発者ツールを使用している場合は、誤って古い設定のままにしていないことを確認してください。Internet Explorer 7 Standardsに設定されていることがわかるまで、私はこの同じ問題に夢中になりました。それをInternet Explorer 9 Standardsに変更し、すべてが所定の位置にぴったりとはまりました。


1
IE7をまだ使用しているユーザーもいます。
15ee8f99-57ff-4f92-890c-b56153 2013

2

要素を上に移動:-12pxまたはそれを配置しても問題は解決せず、マスクするだけです

私は同じ問題を抱えていました-1つのラッピング要素が混在しているかどうかを確認してください:フローティング要素と非フローティング要素-私の非フローティング要素がこの奇妙なオフセットをフローティング要素に引き起こしました


私の場合、私はウェブサイトの外観をプロトタイプの外観と一致させようとしました。プロトタイプと同じ幅のインラインブロックdivの行がありましたが、オフセットが4ずれていました。Webサイトでフローティングdivと非フローティングdivが混在していることがわかりました。それらをすべてフローティングにすると、余分なオフセットが削除されます。CSS間で他の違いがあまり見られなかったため、これは特に困惑しました。
クリントブラウン

1

要素のマージンとパディングを定義すると、問題が発生します。

#element_id {margin: 0; padding: 0}  

問題が存在するかどうかを確認します。IEは、不要な継承を使用してページをレンダリングします。あなたはそうするのをやめるべきです。


1

これは奇妙に思えますが、入力vertical-align: topので設定を試すことができますCSS。少なくともIE8では修正されています。


1

DotNetNuke(DNN)で実行されている.NETベースのWebサイトでも同じ問題が発生しました。それを解決したのは、基本的にはフォームタグのマージンをリセットするだけでした。.NETベースのWebサイトは多くの場合、フォームにラップされており、マージンをリセットしないと、奇妙なオフセットが表示されることがあります。

サイトでこの問題を修正しようとしている場合は、CSSファイルに次のように入力してください。

form {
  margin: 0;
}

同じ問題があり、フォームマージンの変更もうまくいきました。
David Derman、2014年


0

私も同じ問題を抱えていました。UpdatePanelの更新後にオフセットが表示されました。解決策は、次のようにUpdatePanelの前に空のタグを追加することでした。

<div></div>

...


1
UpdatePanelはASP.NETのものですよね?これはASP.NETの質問ではないようです。
Joe Mabel

実際、質問のコードスニペットを表示すると、それがASP.NETの質問であることがわかります。
mitkob

ああ。申し訳ありませんが、簡単に流用しただけで、asp:TextBoxに気づきませんでした。FWIW、問題はASP.NETの問題ではありません。この問題が発生した場合、通常は、問題のオフセットが他の要素が大きくなっていることが原因であり、レイアウトが不適切な場合、通常は、他の要素内のマージン、パディング、または境界を減らすことが重要です。同じ親div。
Joe Mabel


0

私の場合、ulが垂直フレックスボックスである間に、オフセットがli内のグリッドレイアウトを持つカスタム要素に追加されました。

ここに画像の説明を入力してください

かなり簡単な解決策は、liをブロック要素として定義し、

li {
 display: block;
}

そしてオフセットはなくなりました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.