新しいCSSグリッドの仕様について頭を悩ませていますが、境界線で問題が発生しています。
CSSグリッドの境界線を折りたたむことは可能ですか、それとも溝のスタイルを設定する方法はありますか?
以下のスニペットでわかるように、10px
ボーダースタック(20px
合計)中間ブロック。
この問題はCSSグリッドに固有のものではないことを理解していますが、すべてのボックス間および外縁に均一な10pxの境界線を作成するための新しいソリューションが可能になることを望んでいます。
私の実際の使用例は、グリッドとReactコンポーネントの操作を練習するために作成しているカレンダーです。ここで発生している問題を確認できます。
。
毎月は異なるため、考慮すべきさまざまなエッジケースがあります。
.container {
display: grid;
grid-template-columns: 120px 120px;
box-sizing: border-box;
}
.block {
width: 100px;
height: 100px;
background-color: lightgrey;
border: 10px solid palegreen;
}
.first {
grid-column: 2 / span 1;
}
<div class='container'>
<div class='block first'>1</div>
<div class='block'>2</div>
<div class='block'>3</div>
</div>
私はグリッドを愛していますが、Googleにとって非常に難しいと感じています!私の質問をどのように改善するかについてのいくつかの提案でさえ大歓迎です。国境崩壊は正しい用語ですか?内部グリッド線?
ありがとう!
グリッドギャップまたはボックスシャドウを使用できます。
.container {
display: grid;
grid-template-columns: 100px 100px;
box-sizing: border-box;
grid-gap:10px;
}
.block {
width: 100px;
height: 100px;
background-color: lightgrey;
box-shadow:0 0 0 10px palegreen;
}
.first {
grid-column: 2 / span 1;
}
<div class='container'>
<div class='block first'>1</div>
<div class='block'>2</div>
<div class='block'>3</div>
</div>
または、行と列のテンプレート設定を組み合わせます。
.container {
display: grid;
grid-template-columns: 110px 110px;
grid-template-rows:110px;
box-sizing: border-box;
}
.block {
width: 100px;
height: 100px;
background-color: lightgrey;
border:solid 10px palegreen;
}
.first {
grid-column: 2 / span 1;
}
<div class='container'>
<div class='block first'>1</div>
<div class='block'>2</div>
<div class='block'>3</div>
</div>
ボックスが100pxに設定されている場合、120pxの列と行には両側の境界線が表示されることに注意してください。
fr値が列に使用される場合、ボックスに幅を設定しないでください(行も同じ制限に従います)
.container {
display: grid;
grid-template-columns: repeat(7, 1fr);
grid-template-rows: 110px;
/*whatever else */
box-sizing: border-box;
}
.block {
margin: 0 -10px 0 0;/* fixed width value missing */
height: 100px;
background-color: lightgrey;
border: solid 10px palegreen;
}
.first {
grid-column: 2 / span 1;
}
<div class='container'>
<div class='block first'>1</div>
<div class='block'>2</div>
<div class='block'>3</div>
<div class='block'>4</div>
<div class='block'>5</div>
<div class='block'>6</div>
<div class='block'>7</div>
</div>
グリッド項目レベルではなく、グリッドコンテナレベルですべてのサイズと間隔を制御することを検討してください。アイテムに適用されている境界線とサイズを削除します。
_.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); /* 1 */ /* 2 */
grid-auto-rows: 100px; /* 3 */
grid-gap: 5px; /* 4 */
padding: 5px;
background-color: tomato;
}
.block {
background-color: lightgrey;
}
/* for demo only */
.block:nth-child(-n + 2) {
visibility: hidden;
}
_
_<div class='container'>
<div class='block'>0</div>
<div class='block'>0</div>
<div class='block'>1</div>
<div class='block'>2</div>
<div class='block'>3</div>
<div class='block'>4</div>
<div class='block'>5</div>
<div class='block'>6</div>
<div class='block'>7</div>
<div class='block'>8</div>
<div class='block'>9</div>
<div class='block'>10</div>
<div class='block'>11</div>
<div class='block'>12</div>
<div class='block'>13</div>
<div class='block'>14</div>
<div class='block'>15</div>
<div class='block'>16</div>
<div class='block'>17</div>
<div class='block'>18</div>
<div class='block'>19</div>
<div class='block'>20</div>
<div class='block'>21</div>
<div class='block'>22</div>
<div class='block'>23</div>
<div class='block'>24</div>
<div class='block'>25</div>
<div class='block'>26</div>
<div class='block'>27</div>
<div class='block'>28</div>
<div class='block'>29</div>
<div class='block'>30</div>
<div class='block'>31</div>
</div>
_
ノート:
auto-fit
_:行に収まるだけの列を埋めます。オーバーフロー列は折り返されます。minmax()
:各列の最小幅は120px、最大幅は利用可能な空きスペースです。 fr
ユニットは、フレックスレイアウトの_flex-grow
_プロパティに相当します。grid-auto-rows
_:自動作成された行(implicit行)は、高さが100pxです。grid-gap
_:5ピクセルの溝が周囲にあります。 _grid-column-gap
_および_grid-row-gap
_の省略形。ギャップの境界線の色が現在の月に該当しない日のセルと同じである場合は、グリッドコンテナ全体をdiv
で囲み、background-color
境界線にしたい色にし、padding
の1pxにgrid-gap
of 1px。このアプローチを使用すると、ボックスシャドウを使用する複雑さなしに、均一に境界付けられたグリッドを実現できます。