2017-06-12 4 views
1

現在、スタイルが適用されたコンポーネントと反応して応答性のある六角形グリッドで作業しています。現時点では、ウィンドウが変更されたときにすべてのdivを再配置するのは、単一のテーブル行(またはflexbox - 機能は同じです)です。しかし、すべての2番目の行にはmargin-left: 56px;が必要です。レンダリングされる六角形の数が絶えず変化するため、これは動的に/反応的に行う必要があります。応答区画内でオーバーフローラッピングに起因するすべての2番目のビジュアル行をインデントする方法

私はdivを他のdivにあふれさせようとしましたが、これはすばらしい解決策ですが、実装する方法がわかりません。また、ヘキサゴンの位置を追跡し、マージンを追加したり削除したりするときに、その位置を追跡しようとしましたが、どうやってそれを行うかはわかりません。

import React, { Component } from 'react'; 
import styled from 'styled-components'; 
import './App.css'; 

class App extends Component { 
    render() { 
    return (
     <div> 
     <HexRow> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     <Hex /> 
     </HexRow> 
     </div> 
    ); 
    } 
} 

const HexRow = styled.div` 
    clear: left; 
    margin-bottom: 60px; 
    margin-left: 55px; 
` 

const Hex = styled.div` 
    &:before { 
    content: " "; 
    width: 0; height: 0; 
    border-bottom: 30px solid #6C6; 
    border-left: 52px solid transparent; 
    border-right: 52px solid transparent; 
    position: absolute; 
    top: -30px; 
    } 

    width: 104px; 
    height: 60px; 
    background-color: #6C6; 
    position: relative; 
    float: left; 
    margin-top: 30px; 
    margin-bottom: 9px; 
    margin-right: 10px; 

    &:after { 
    content: ""; 
    width: 0; 
    position: absolute; 
    bottom: -30px; 
    border-top: 30px solid #6C6; 
    border-left: 52px solid transparent; 
    border-right: 52px solid transparent; 
    } 
`; 

export default App; 

What happens now

What needs to happen

任意の助けやポインタが理解されます!むしろ自明下図のよう

+1

私はあなただけCSSでそれを行うことができると思います。奇数と偶数の擬似セレクタを確認してください - https://www.w3schools.com/cssref/sel_nth-child.asp – AntonZlatkov

+0

視覚的な行ごとに、常に同じ数の六角形ですか?レスポンシブと言うときは、ページのサイズを変更すると解像度に合わせてビューが変わるようなレスポンシブなページですか?六角形の数が変化することがあります。 – Huangism

+0

@Huamgism各視覚的な行は常に同じ番号を持ちますが、その数はdivの幅に応じて変化します。このコンポーネントが複数の場所で使用されるため、六角形の総数も変化します –

答えて

2

あなたは...、:nth-child(even) CSSセレクタであなたが求めるプロパティがmargin-leftと呼ばれていること

注意(ないleft-marginを)これを行うことができます。

div p:nth-child(even) { 
 
    margin-left: 56px; 
 
}
<div> 
 
    <p>Hex</p> 
 
    <p>Hex</p> 
 
    <p>Hex</p> 
 
    <p>Hex</p> 
 
    <p>Hex</p> 
 
    <p>Hex</p> 
 
</div>

+0

新しい行の先頭にある唯一のものですが、インデントする必要がある項目はすべてありません。つまり、六角形のいずれかがラップされ、ブラウザの新しい行にプッシュし、その六角形をインデントする必要があります(または移動先の行) –

+0

@JackOddy元の質問の_ "ただし2行目..."答えを簡単にするために、_row_構造体を省略しました。単純に ':nth-​​child'をhex要素の代わりに行に適用します。 – msanford

+0

しかし、2番目の行には何もありません。反応するようにするには、1つの行の六角形が入っているdiv内にラップされています。これは技術的にはHTML要素の2番目の行ではありません。スニペットからrow2 divを削除して明確にする –

関連する問題