« | »

12月14日 

Web関係

URLにハッシュを指定してページ内リンクしたときにレイアウトが崩れる件について

URLの末尾に

fuga.html#hoge

とかして、ページ内のアンカー位置に表示を移動させたいときってありますよね。

HTML:
  1. <a href="#hoge">ほげ</a>

とかしても同じ動きですけど。

そうすると、なぜかボックスが上にずれてしまう、という現象がありましたので、その解決法を一日うんうん言いながら探してました。
ググっても全然出てこないしさ…orz

症状としては、ハッシュでの移動を行った場合、正常であれば
right
のようになっている箇所が、

wrong
こんな感じで上にずれてしまうんですな。
(ちょっと分かりにくいけど、メニューの上が切れてるでしょ?)

問題はハッシュでの移動で起きてるので、アンカー用意してページ内でのみ遷移させるということであれば、noriさんのslideScroll.jsとか使っちゃえば、スクリプト読み込むだけでページ内リンクをJSが乗っ取ってくれてハッシュでの移動にならないんだけど、別ページからハッシュを指定する場合、JSではどうしても乗り越えられない壁があって対応できないのデス。

やはり問題の特定を行わなければ…orz

で、デバッグモード全開で見つけたのが、
アンカーを配置している要素の親要素に”overflow:hidden”が指定されているとその親要素が上にずれる
でした。

overflow:hiddenと言えば…

CSS:
  1. .clearfix:after{
  2.   content:".";
  3.   display:block;
  4.   height:0;
  5.   visibility:hidden;
  6. }
  7. .clearfix{
  8.   overflow:hidden;
  9. }
  10. /* Hides from IE-mac \*/
  11. * html .clearfix{
  12.   height:1%;
  13.   overflow:visible;
  14. }
  15. /* End hide from IE-mac */

定番のclearfixにバッチリ使われておりますやん。。。

clearfix大好き人間(ちゃんと使うべき所で使ってますよ)の自分は、きっちりコンテンツ用ボックスにclearfixを仕込んでたようで。。。
親要素にバッチリ原因が潜んでいた、という。。。orz

一応、全てのブラウザで起きてしまうので、この現象にハマってしまった人は、アンカーの親にoverflow:hiddenが居ないか、調べてみて下さいね。

コメント & トラックバック

ワタクシは今まで経験したコトのないバグです~

また行き詰った時に思い出させてもらいますね~

> さいとーさん
まー自分がかなりのclearfix依存症なのでwww

いつかお役に立てれば幸いです。

数日前に原因がわからず断念して、bugfixを始めたので再度トライ。
やっとこちらに辿り着けました・・

見事に、同じ症状で・・無事解決いたしました。
有益な情報有難うございました。

今日は、これで眠れます(笑)

> winさん
PHPやjsでもデバグを得意としてるので(orz)何とか原因を特定できた件でしたw
お役に立ててなによりです(^-^

コメントフィード

コメント