6

こんにちは、レイアウトについて質問があります。

div に情報を入力する Web サイトがあります。これらの Div は、それらの間とコンテナー div の側面の間に同じ量のスペースを置いて、互いに隣接する必要があります。私は携帯電話用に作成しているので、画面の幅はわかりませんが、さまざまな画面解像度でうまく表示されるはずです。

現在、私はこれを持っています: Fiddle: Fiddle

HTML:

<div id="container">
<div id="lineout">
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
<div id="foto"><img src="img/logo_null_image.jpg" /></div>
</div>

</p>

CSS:

#container {
    text-align: center;
    display: inline-block;
    margin:0 auto;
}
#foto{
    width: 150px;
    height: 150px;
    display: inline-block;  
}

#lineout {
    text-align:justify; 
}

次に、それらの間に等量のスペースがありますが、コンテナーの側面の間にはありません。

私が知っていることは、それらが150px x 150pxであるということです。それらとコンテナーの間には同じ量の余白が必要であり、ディスプレイのサイズは関係ありません。画面が小さい場合、隣接する div は少なくなりますが、それらの間のスペースは増加または縮小するはずです。したがって、それらとコンテナ div の間のマージンは同じです。

これが私が望む方法のイメージです:) s7.postimage.org/h342d0qhn/layout2.png

私の質問を再定式化:

<div class="content">
<div class="elements-grid">
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
</div>
</div>

「要素」の div 間に柔軟な/折りたたみ可能なマージンが必要です。ギャップはブラウザの幅に依存し、折りたたむ前に「最大幅」と「最小幅」を持つ必要があります(次の要素は次の行に切り替わります)。「要素グリッド」は「コンテンツ」内の中央に配置する必要があります。

私が知っていることはすべて試したので、あなたの助けに本当に感謝しています. 前もって感謝します!

4

5 に答える 5

1

http://jsfiddle.net/vgqNX/17/

  1. IDを使用する場合、複数回使用することはできません。クラスを使用して、複数の要素をターゲットにします。
  2. 要素間の空白.fotoが原因で、ページに不要な空白が追加されています。修正する空白を削除します。
  3. divにコンテンツを与えるために、何か(この場合は改行しないスペース)を配置する必要がありました。

コンテナには左/下に10pxのパディングがあり、各.foto要素には上/右に10pxの余白があります。これにより、すべてがユニバーサルになります。つまり、各ブロックの周囲と同じように、ブラウザのサイズを変更して、すべてのブロックを並べ、すべてのブロックの周囲に同じ境界線を設定できます。

それが役立つことを願っていますか?

編集: http: //jsfiddle.net/vgqNX/20/

うまくいけば、上記はあなたが求めているものになりますか?

注:のようにレスポンシブレイアウトを調べる方がおそらく良いでしょうUrg Mu。サイズを変更するとちらつきが発生しますが、ウィンドウをドラッグして拡大/縮小した場合にのみ発生します。

于 2012-11-15T13:41:28.403 に答える
1

これを行うには、javascript の助けが必要です。

アイデアは、ウィンドウの幅を取得し、それを要素間に分散することです。

ここで私のフィドルを見つけることができます: http://jsfiddle.net/P84qd/

html ファイルでは、id をクラス名ごとに変更しました (html ファイルで同じ id を 2 回使用しないでください)。css ファイルでは、正方形をfloat:left.

最後にJavaScript:

function resize(){
    var sizeOfImg = 150;
    var windowWith = document.body.offsetWidth;
    var widthRest = windowWith%sizeOfImg;
    var marginVal = widthRest/(Math.floor(windowWith/sizeOfImg)+1);
    var lineout = document.getElementById('lineout');
    lineout.style.paddingLeft = marginVal+'px';
    lineout.style.paddingTop = marginVal+'px';
    var fotos = document.getElementsByTagName('div');
    for(var i=0, length = fotos.length;i<length; i++){
        if(fotos[i].className === 'foto'){
            fotos[i].style.marginRight = marginVal+'px'; 
            fotos[i].style.marginBottom = marginVal+'px';        
        }       
    }
}
resize();
window.onresize = function(e){resize();};  

あまり最適化されていないかもしれませんが、アイデアは次のとおりです。最初にドキュメントの幅を取得し、すべての正方形を配置したら残りのスペースを計算します (したがって、モジュロ)。最終的な余白サイズを計算するには、残りを 1 行あたりの正方形の数に 1 を加えた数で割る必要があります (左右の境界線もスタイルに含める必要があるため)。それよりも、必要な場所にパディング/マージンを追加するだけで完了です。

ウィンドウのサイズを変更するときに機能させるには、呼び出す必要がありますwindow.onresize

それが役に立てば幸い :)

于 2012-11-15T14:44:56.313 に答える
0

写真間の距離を設定するために余白を追加してみてください。display:inline は TEXT 専用であるため、使用しないでください。しかし、「好きなように使用できます。」言う – シマノン。内側のコンテナにパディングを追加します。次に、FLOAT を使用します。

#foto{
    width: 150px;
    height: 150px;
    margin: 10px 10px 0px 0px;
    float:left;
    background: #FC0;    
}

#lineout {
    padding: 50px 0px 50px 50px;
}

Div コンテナを閉じると問題が発生します。次の要素を詰め込む float を設定します。これを解決する方法は次のとおりです。

HTML:

<div id="container">
    <div id="lineout">
        <div id="foto"><img src="img/logo_null_image.jpg" /></div>
    </div>
    <div id="endContainer"></div>
</div>

CSS:

#endContainer {
    clear:both;
}
于 2012-11-15T12:42:07.110 に答える
0

CSS のみの解決策

メディア クエリを使用してレイアウトを実現することができます。

デモ

この手法では、各要素のラップを使用して、各正方形の間のスペースを計算します。
ブロック間およびブロックとウィンドウ間のスペースは等しくなります。

私が書いたコードは微調整/最適化する必要があり、751px を超える画面のクエリは作成していません。先に進む前に、興味があるかどうかを知りたいです。

必要に応じて、かなり複雑なため、追加の詳細/説明も提供できます。

この回答にも興味があるかもしれません:レスポンシブスクエアカラム

関連するコードは次のとおりです。

HTML :

<div id="container">
    <div class="wrap">
        <div class="foto">1</div>
    </div>
    <div class="wrap">
        <div class="foto">2</div>
    </div>
    ... and so on ...
</div>

CSS :

.wrap {
    float:left;
    position:relative;
}
.foto {
    width: 150px;
    height: 150px;
    background: gold;
    position:absolute;
}

#warning{display:none;}
@media screen and (min-width: 631px) {
    .wrap {
        width:20%;
        padding-bottom:25%;
    }
    .wrap:nth-child(4n+2), .wrap:nth-child(4n+3){

    }
    .wrap .foto {
        top:-75px;
        margin-top:100%;
        right:-30px;
    }
    .wrap:nth-child(4n+2){
        margin:0 5% 0 7.5%;
    }
    .wrap:nth-child(4n+3){
     margin-right:7.5%;
    }
    .wrap:nth-child(4n+2) .foto{
        left:50%;
        margin-left:-75px;
    }
    .wrap:nth-child(4n+3) .foto{
        right:50%;
        margin-right:-75px;
    }
    .wrap:nth-child(4n) .foto{
        left:-30px;
    }   
    #container{
        margin-top:-45px;
    }
}

@media screen and (min-width: 481px) and (max-width: 631px) {
    .wrap {
        width:25%;
        padding-bottom:33.3%;
    }
    .wrap:nth-child(3n+2){
        margin:0 12.5%;        
    }
    .wrap .foto {
        top:-75px;
        margin-top:100%;
        right:-37px;
    }
     .wrap:nth-child(3n+2) .foto{
        left:50%;
        margin-left:-75px;
    }
     .wrap:nth-child(3n) .foto{
        left:-37px;
    }
    #container{
        margin-top:-37px;
    }
}


@media screen and (min-width: 331px) and (max-width: 480px) {
    .wrap {
        width:33.3%;
        padding-bottom:50%;
        clear:left;
    }
    .wrap:nth-child(even) {
        float:right;
        clear:right;
    }
    .wrap .foto {
        top:-75px;
        margin-top:100%;
        right:-50px;
    }
    .wrap:nth-child(even) .foto {
        left:-50px;
    }
    .wrap:nth-child(4n+3) .foto, .wrap:nth-child(4n+4) .foto {
        bottom:-75px;
        margin-bottom:100%;
    }
    #container{
        margin-top:-25px;
    }
}


@media screen and (max-width: 330px) {
    .wrap {
        width:50%;
        padding-bottom:100%;
        clear:left;
    }
    .wrap:nth-child(odd) .foto {
        right:-75px;
        bottom:0;
        bottom:-75px;
        margin-bottom:100%;
    }
    .wrap:nth-child(even) .foto {
        top:0px;
        right:-75px;
        top:-75px;
        margin-top:100%;
    }
}
于 2014-04-20T18:00:42.557 に答える
0

div id 写真 css を更新

   #foto{ width: 130px; height: 130px; margin:0 20px 20px 0; display: block; float:left;  

背景: #FC0; }

于 2012-11-16T06:04:11.730 に答える