現在、流動的なレイアウトでサイトを構築しています。ウィンドウのサイズが変更されたり、さまざまな幅でロードされたりすると、それ自体を調整できる標準的な水平ナビゲーションが実際に付属している主流の流動的なテンプレートはありません.
私は、オンライン チュートリアルや、同様の問題に取り組もうとする他の Stack Overflow ソリューションを調べてきましたが、非常に巧妙で非常に近いものもありますが、ブロックのようなホバー効果を処理できるものはありませんa {display:block; padding:10px 40px;}
a:hover {background:#ccc;}
。他の人は、ウィンドウの幅に合わせて調整される同じ幅のブロックリンクを作成する巧妙な方法を使用します。ただし、これは十分に正確ではなく、リンク ブロック間で同じ幅を作成するつもりはありませんが、リンク間で左右のパディングを同じにするつもりです。リンク間の距離が同じであるため、これははるかに正確です。
CSSでこれを行うことをあきらめました。おそらく、他の誰かが可変パディングを処理するためのソリューション、またはそれに非常に近いものを持っています。いずれにせよ、jQuery で作業を試みることにしました。
私は実際に jQuery を書いたことはありませんが、何年もの間、いくつかのプラグインを使用してきました。投稿する前に、少なくとも何か考えてみるべきだと思いました。ユーザーがページの読み込み時だけでなく、ウィンドウのサイズを変更した場合に、その場で調整する機能を追加することは可能でしょうか。また、私が行った方法に何か問題があるかどうかも疑問に思っています。
ここに私がたどり着いた場所へのリンクがあります: http://jsfiddle.net/XZxMc/3/
HTML:
<div class="container">
<div class="row">
<div class="twelvecol">
<ul>
<li><a href="#">short</a></li>
<li><a href="#">longer</a></li>
<li><a href="#">even-longer</a></li>
<li><a href="#">really-really-long</a></li>
<li><a href="#">tiny</a></li>
</ul>
</div>
</div>
</div>
CSS:
.container {
background:#ccc;
font-family:arial, helvetica;
}
.row {
width: 100%;
max-width: 700px;
min-width: 600px;
margin: 0 auto;
overflow: hidden;
background:white;
}
.row .twelvecol {
width:100%;
float:left;
}
ul {
text-align:center;
}
ul li {
display:inline-block;
zoom:1;
*display: inline;
}
ul li a {
padding:12px 39px;
display:block;
}
a {text-decoration:none;}
a:hover {background:blue; color:white;}
JavaScript:
// Initial left/right padding of links set in css
var paddingIni = 39;
// Initial max-width of .row
var widthIni = 700;
// Number of links multiplied by 2; 2 because we will be reducing the padding by multiples of 2px total, 1px left, 1px right
var linkQ = 5*2;
// Current width of link container
var twelveWidth = $(".row .twelvecol").width();
// (Initial width / 10) - (Current width / 10); this gives us how much to subtract from our inital padding of 39
// Is there anything wrong with the way this is written?
var paddingSub = (widthIni/linkQ)-(twelveWidth/linkQ);
// Simply subtracting above computation from our inital padding of 39
var paddingNew = paddingIni-paddingSub;
$("ul li a").css("padding-left",paddingNew);
$("ul li a").css("padding-right",paddingNew);
また、誰かがこれが機能しない理由を説明しても構わない場合は、1 つの方程式ですべてを実行しようとしています。
var whyisthiswrong = 39 - ( (700/(5*2)) / ($(".row .twelvecol").width()/(5*2)) );