数独パズル クリエーター / ソルバーを作成しましたが、CSS でスタイルを設定するのに少し助けが必要です。
通常、これらは次のようにスタイル設定されます。
私が使用しているいくつかのネーミング。
セル- 単一の数値を含む個々のセル。
ボックス- それぞれ 3 x 3 セルを含む 9 つのボックスの 1 つ
グリッド- 9x9 のプレイエリア全体。
私のhtmlは私のルビー/シナトラアプリによって部分的に生成され(少なくとも繰り返しDIVはそうです)、次のように構造化されています:
#game {
margin-left: auto;
margin-right: auto;
width: 360px;
}
.cell input {
display: inline-block;
float: left;
width: 40px;
height: 40px;
border-style: solid;
border-width: 1px;
text-align: center;
font-size: 15px;
}
<form action="/" method="post">
<div id="game">
<div class="cell">
<input name="cell[0]" type="text" maxlength="1" value=<%=val%>>
</div>
<div class="cell">
<input name="cell[1]" type="text" maxlength="1" value=<%=val%>>
</div>
<!-- ... -->
<div class="cell">
<input name="cell[79]" type="text" maxlength="1" value=<%=val%>>
</div>
<div class="cell">
<input name="cell[80]" type="text" maxlength="1" value=<%=val%>>
</div>
</div>
</form>
これにより、最初のセル (0) が左上隅にあり、左から右に 1 行ずつ、右下の最後のセル (80) に移動する基本的な 9x9 グリッドを作成できます。
難しいのは、グリッドが行と列だけでなく 9 つの大きなボックスに分割されているように見えるように、各セルをスタイリングすることです。このグリッドを参照してください。
現在、いくつかのオプションがあります。
数独コードを完全に書き直して、DIV を別の順序で描画するようにします。グループ化 DIV で各ボックスをラップします。これにより、CSS は比較的単純になります。これは大きな変化であり、私は本当にこの道をたどりたくありません.
各セルを手動で識別し、81 個のセルすべてに対応する CSS を記述します。上記よりは良いですが、まだボールが痛く、特に滑らかではありません.
CSS スタイルを動的に生成するオプションがあります (パフォーマンスは問題になりません)。私が探しているのは、(線形インデックス 0..80 に基づいて) 各セルのスタイルを決定するアルゴリズムを考案するための助けです。
たとえば、一番上の行 (0..8) のすべてのセルには、太い上枠 (3px) と細い下枠 (1px) があります。行 3 (18..26) のすべてのセルの下部には太い境界線があり、それらのセルの上部には細い境界線があります。最初の列のすべてのセルの左側には太い境界線があり、それらのセルの右側には細い境界線があります。等々。