元の質問:
さて、これはプレーンでシンプルなcssです。しかし、私のサイトにバグがあり、それを取り除くことができません!
このデザインでサイトを作っています: http://cl.ly/image/1j231y2x3w07
このサイトは完全にレスポンシブで、css-aspect-ratio-technique を利用しています。
HTML:
<div class="post small">Post that is small</div>
<div class="post big">Post that is big</div>
<div class="post tall">Post that is tall</div>
<div class="post wide">Post that is wide</div>
CSS/LESS:
.post {position: relative;}
.post:after {display: block; content: '';}
.post.small {width: calc(1/4 * 100%);}
.post.small:after {padding-top: 70%;}
.post.big {width: calc(1/2 * 100%);}
.post.big:after {padding-top: 70%;}
.post.tall {width: calc(1/4 * 100%);}
.post.tall:after {padding-top: 140%;}
.post.wide {width: calc(1/2 * 100%);}
.post.wide:after {padding-top: 35%;}
あなたはそれの要点を得る。
また、フロートと位置を追跡するために、優れたプラグインPackery.jsも利用しています。私が主に使用するのは、サイズ変更とアニメーションのヘルパーです。
しかし、完全にレスポンシブであることは私に問題をもたらします。たとえば、ブラウザ ウィンドウの幅が1304pxの場合、上記の手法により、高さの値が奇数 (例: 477.4px) になります。奇数のため、デザインはおろか、グリッドを維持することもできません。
また、ウィンドウの幅が 4 で割り切れない場合は、オーバーラップまたは 1 ピクセルの白い線が表示されます。
私はかなり長い間これに取り組んできましたが、新鮮な目が必要です。ですから、誰かが解決策への意見を持っていれば、私はとても幸せです. ありがとう :-)
ソリューション:
@ScottSに大いに感謝します–素晴らしいアドバイス!
function frontpageResize() {
// container ... duh.
var container = $('#frontpage-wrapper');
// body width.
var bWidth = window.innerWidth;
// get the pixels missing for making bWidth divisible by 20.
var divisibleBy = bWidth % 20;
// setting an alternative width.
var altWidth = Math.ceil(bWidth - divisibleBy + 20);
// what's missing?
var leftover = altWidth - bWidth;
// if body width is divisible by 20 all is peaches?
if(divisibleBy === 0) {
container.width(bWidth);
} else {
// else set the alternative width as body width and set margin-left.
container.width(altWidth).css({ "margin-left" : -leftover / 2 + "px"});
}
// relayout Packery.js
container.packery();
}