1

私はSingularityで以下を構築しました 1/3 2/3 イメージ ラスター

幅 2/3 の画像の隣に幅 1/3 の画像があり、次の行ではその逆です。画像はピクチャーフィルで提供されます。しかし、私の問題は、コンテナーの最大幅からブレークポイント (750px) に向かってビューポートを絞り込むときです。そこでは、画像が 2 つの「列」レイアウトから 1 つの列に切り替わり、ソース ファイルの物理的なサイズがまったく同じでも高さが異なります。ピクセル単位の高さ。場合によっては数ピクセル、場合によっては 1 つだけ異なります。

高さの違い

背後にある削減されたセットアップは次のとおりです (Retina マークアップとその間の 2 つのブレークポイントが省略されています)。

<section class="pro-main" role="main">
    <section class="pro-thirds">
        <article class="pro-samples imgparent">
            <a class="p-ov-liner" href="#">
                <span data-picture data-alt="onethird">
                    <span data-src="/img/projekte-gpfinestsolution-zweidrittel-659x324.jpg"></span>
                    <span data-src="/img/projekte-gpfinestsolution-eindrittel-341x347.jpg" data-media="(min-width: 750px)"></span>
                    <noscript><img src="/img/projekte-gpfinestsolution-zweidrittel-659x324.jpg" alt="img1"></noscript>
                </span>
                <div class="bottombox"></div>
            </a>
        </article>
        <article class="pro-samples imgparent">
            <a class="p-ov-liner" href="#">
                <span data-picture data-alt="twothird">
                    <span data-src="/img/projekte-gplab-zweidrittel-659x324.jpg"></span>
                    <span data-src="/img/projekte-gplab-zweidrittel-704x347.jpg" data-media="(min-width: 750px)"></span>
                    <noscript><img src="/img/projekte-gplab-zweidrittel-659x324.jpg" alt="twothird"></noscript>
                </span>
                <div class="bottombox"></div>
            </a>
        </article>
        <article class="pro-samples imgparent">
            <a class="p-ov-liner" href="#">
                <span data-picture data-alt="twothird">
                    <span data-src="/img/projekte-gplab-zweidrittel-659x324.jpg"></span>
                    <span data-src="/img/projekte-gplab-zweidrittel-704x347.jpg" data-media="(min-width: 750px)"></span>
                    <noscript><img src="/img/projekte-gplab-zweidrittel-659x324.jpg" alt="twothird"></noscript>
                </span>
                <div class="bottombox"></div>
            </a>
        </article>
        <article class="pro-samples imgparent">
            <a class="p-ov-liner" href="#">
                <span data-picture data-alt="onethird">
                    <span data-src="/img/projekte-gpfinestsolution-zweidrittel-659x324.jpg"></span>
                    <span data-src="/img/projekte-gpfinestsolution-eindrittel-341x347.jpg" data-media="(min-width: 750px)"></span>
                    <noscript><img src="/img/projekte-gpfinestsolution-zweidrittel-659x324.jpg" alt="img1"></noscript>
                </span>
                <div class="bottombox"></div>
            </a>
        </article>
    </section>
</section>

ブレークポイントと特異点の設定は次のとおりです。

// Baseline breaks
$baseline675: 675px 849px;
$baseline850: 850px 1074px;
$baseline1075: 1075px 1199px;
$baselineMAX: 1200px;
// Container breaks
$container600: 600px;
$container750: 750px;
$container850: 850px;
$container990: 990px;
$container1100: 1100px;
$container1200: 1200px;
// Singularity
$grids: 6;
$grids: add-grid(9 at 675px);
$grids: add-grid(12 at 850px);
$grids: add-grid(15 at 1075px);
$grids: add-grid(18 at 1200px);

$gutters: 1/3;

$output:'isolation';

スタイリング:

.pro-main,
.pro-thirds {
    @extend %clearfix;
}

.pro-samples {
    @include trailer(0.5);
        &:last-child {
            @include trailer(2);
        }
    @include switch-baseline(850px 1074px) {
        &:nth-child(4n+1) {
            @include isolation-span(4, 1, 'right', $gutter:.5);
        }
        &:nth-child(4n+4) {
            @include isolation-span(4, 9, 'right', $gutter:0);
        }
        &:nth-child(4n+2) {
            @include isolation-span(8, 5, 'right', $gutter:0);
        }
        &:nth-child(4n+3) {
            @include isolation-span(8, 1, 'right', $gutter:.5);
        }
        &:last-child {
            @include trailer(2);
        }
    }
    @include breakpoint(1075px 1199px) {
        &:nth-child(4n+1) {
            @include isolation-span(5, 1, 'right', $gutter:.5);
        }
        &:nth-child(4n+4) {
            @include isolation-span(5, 11, 'right', $gutter:0);
        }
        &:nth-child(4n+2) {
            @include isolation-span(10, 6, 'right', $gutter:0);
        }
        &:nth-child(4n+3) {
            @include isolation-span(10, 1, 'right', $gutter:.5);
        }
        &:last-child {
            @include trailer(2);
        }
    }
    @include breakpoint(1200px) {
        &:nth-child(4n+1) {
            @include isolation-span(6, 1, 'right', $gutter:.5);
        }
        &:nth-child(4n+4) {
            @include isolation-span(6, 13, 'right', $gutter:0);
        }
        &:nth-child(4n+2) {
            @include isolation-span(12, 7, 'right', $gutter:0);
        }
        &:nth-child(4n+3) {
            @include isolation-span(12, 1, 'right', $gutter:.5);
        }
        &:last-child {
            @include trailer(2);
        }
    }
}

最大幅での 3 分の 1 の画像と 3 分の 2 の画像の高さの間は、物理的に同一であり、一番下の行に配置されます。小さいビューポートでは異なります。写真が入ったガターを取り外しても、高さはまだ異なります。例えば

    @include breakpoint(1075px 1199px) {
        &:nth-child(4n+1) {
            @include isolation-span(5, 1, 'right', $gutter:0);
        }
        &:nth-child(4n+4) {
            @include isolation-span(5, 11, 'right', $gutter:0);
        }
        &:nth-child(4n+2) {
            @include isolation-span(10, 6, 'right', $gutter:0);
        }
        &:nth-child(4n+3) {
            @include isolation-span(10, 1, 'right', $gutter:0);
        }
        &:last-child {
            @include trailer(2);
        }
    }

ピクチャフィル マークアップの代わりに記事タグを空にして、これらの 2 つのプロパティを scss に追加すると、高さが 1/3 か 2/3 かに関係なく、すべての記事要素でまったく同じになります。

 background:red
 height:10em; 

ガター付き:

ガター付きレッド

なし:

ガターなしの赤

ビューポートの高さの違いがどのように変化するのか、誰にも考えられますか? 私自身は完全にアイデアがありません。:(

よろしくラルフ

4

1 に答える 1

1

画像の高さの違いの理由

画像の高さが異なる理由は数学的なものです。

簡単にするために、次の列システムを見てみましょう。

@include add-grid(4);
@include add-gutter(0.1);

上記の定義は、同じ幅の 4 つの列と、それらの間に 3 つのガター (4 - 1) があることを意味します。各ガターの幅は、任意の列の 0.1 幅に等しくなります。

コンテナの幅が 1000 px の場合、各列とガターの幅はどれくらいになるでしょうか?

列の幅が x px だとしましょう。次に、ガターは 0.1x px 幅になります。方程式を組み立てることができます:

4x + 3*(0.1x) = 1000

それを解決しましょう:

4x + 0.3x = 1000
4.3x = 1000
x = 1000 / 4.3
x = 232.56

各列の幅は ~232.56px です! そして、すべてのガターは 232.56 * 0.1 = 23.256px 幅です。

ここで、250x250 px と 750x250 px の 2 つの画像があるとします。これらの画像をこれらの列に配置します。

最初の画像は 1 列を占め、溝はありません。幅と高さは両方とも 232.56 ピクセルになります。

2 番目のイメージは、3 つの列と、それらの列の間の 2 つのガターを占有します。幅は 232.56 * 3 + 23.256 * 2 = 744.192px になります。2 番目の画像の高さは 250 * 744.192 / 750 = 248.064px になります。

ご覧のとおり、画像の高さが一致していません。これは想定内です。

問題の解決策

複合グリッドを使用して、高さの違いを補正できます。これは、計算するのがはるかに困難です。

より簡単な解決策は、既存のグリッドに合わせて画像をスライスすることです!

グリッド レイアウトの一般的な推奨事項。

  1. さまざまなブレークポイントに対して多くのグリッド定義を使用しますが、それらすべて (モバイル ビューを除く) で同じレイアウトを使用します。

    ブレークポイントごとにグリッドを再定義する必要はありません。実際、レスポンシブ レイアウトは次のように定義できます。

    +add-grid(3);
    +add-gutter(0.5);
    

    モバイル レイアウトの場合は、スパンを適用しないでください。最小のブレークポイントから始まるレイアウトについては、スパンを適用すれば準備完了です。

    コンテナの幅など、他のスタイルに複数のブレークポイントを適用できることに注意してください。

  2. 分離スパニングが複数の行で機能するようにするには、すべての行の最初の子にクリアを適用します。

    &:nth-child(3n+1) { clear: both; }
    

    注: これは、Singularity スパン mixin を適用した後に行う必要があります。

    &:nth-child(3n+1) {
      +grid-span(1,1);
      clear: both;
    }
    
  3. 特定の の代わりに共通のgrid-spanmixinを使用できますisolation-span。分離は、ミックスインのデフォルトのスパニング手法ですgrid-span

  4. 宣言されたグリッドから要素を配置しようとしている場合を除き、すべての mixin 呼び出しで方向とガターをオーバーライドしないでください。

  5. 隣接する要素にさまざまなガター サイズを使用しないでください。そうしないと、計算が台無しになります。

  6. すべてのメディア クエリに重複したスタイルを適用しないでください。理想的には、すべての CSS ルールを 1 回だけ宣言する必要があります。必要に応じて、スタイルを複製する代わりに、より具体的なメディア クエリ ルールを作成できます。

  7. UPD:ああ、次の形式で列と溝を宣言できることを覚えておいてください。

    +add-grid(235 235 235 235);
    +add-gutter(20);
    

    これは と同じです+add-grid(4); +add-gutter(0.085);が、数字を理解しやすくなります。

于 2014-03-18T18:05:11.403 に答える