2016-11-20 5 views
8

クロスワードジェネレータを実装しています。それは、行ワードあたりと文字あたりのセルとのクロスワードを生成し、そのキーワードが画像のように、より広い境界線と灰色の背景が付いている: Crossword image異なる罫線の幅で偶数のテーブルの境界線を描画する方法は?

はこれを達成するために、私の生成されたコードは、次のおおよそです:

#crossword { 
 
    border-spacing: 0px; 
 
    border-collapse:collapse; 
 
} 
 

 
.word { 
 
    vertical-align: middle; 
 
    align-items: center; 
 
    text-align: center; 
 
    justify-content: center; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
.cell { 
 
    width: 30px; 
 
    height: 30px; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
.letter { 
 
    border: 1px solid black; 
 
} 
 

 
.keyword { 
 
    border-width: 2px; 
 
    background-color: gray; 
 
}
<table id="crossword"> 
 
    <tr class="word"> 
 
     <td class="cell letter">W</td> 
 
     <td class="cell letter keyword">C</td> 
 
     <td class="cell letter">A</td> 
 
    </tr> 
 
</table>

私の問題は、画像の赤の楕円でマークされた - キーワードの境界線は、残りの部分よりも1ピクセル幅の広いもの、クロスワードのトップとボトムラインを破ります。 border-collapseプロパティを削除しようとしましたが、その結果、各行接続に二重の罫線が表示されていました。

現在、私は世代のためにtabletrtdを使用していますが、div Sを使用したソリューションがある場合、私は、スイッチさせていただきます。

私の質問は、個々のセル(固有のクラスを追加するなど)に一意に対応できると仮定して、トップセルとボトムセルをキーワードセルの内側に表示する方法?

私はbox-shadowを使って1つの解決策を見つけましたが、実際にはクロスブラウザではなく、多くの魔法が必要なので、可能ならば避けてください。

+0

何小さく 'BORDER-、[トップ|下]について - エッジのセルの「幅」ですか? – casraf

+0

box-shadow(inset 0 0 0 1px)は境界線を太くしても問題ありません。古いブラウザでは何も壊れません。そうでなければ#000と#333のような2つの異なる黒を使用するかもしれません:)(人生は妥協で満たされています)これは答えとスニペットに変えるために怠け者です。 ) –

+0

@casrafこれはもちろん、行を偶数にしますが、避けたい幅パターンの目立った変更でもあります。 –

答えて

1

それは少し低いように見えますが、あなたが最も外側の境界線を作るためにこれ以外に、他のオプションが均等に

を揃えていない

table#crossword tr:first-child td { 
    border-top: 1px solid black; 
} 
table#crossword tr:last-child td { 
    border-bottom: 1px solid black; 
} 
table#crossword tr td:first-child { 
    border-left: 1px solid black; 
} 
table#crossword tr td:last-child { 
    border-right: 1px solid black; 
} 

を使用してテーブルのデフォルトの境界線を一致させるために、テーブルの最も外側の境界線を保ちます

デモ

#crossword { 
 
    border-spacing: 0px; 
 
    border-collapse:collapse; 
 
} 
 

 
.word { 
 
    vertical-align: middle; 
 
    align-items: center; 
 
    text-align: center; 
 
    justify-content: center; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
.cell { 
 
    width: 30px; 
 
    height: 30px; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
.letter { 
 
    border: 1px solid black; 
 
} 
 

 
.keyword { 
 
    border-width: 2px; 
 
    background-color: gray; 
 
} 
 

 
table#crossword tr:first-child td { 
 
    border-top: 1px solid black; 
 
} 
 
table#crossword tr:last-child td { 
 
    border-bottom: 1px solid black; 
 
} 
 
table#crossword tr td:first-child { 
 
    border-left: 1px solid black; 
 
}
<table id="crossword"> 
 
    <tr class="word"> 
 
     <td class="cell letter">W</td> 
 
     <td class="cell letter keyword">C</td> 
 
     <td class="cell letter">A</td> 
 
    </tr> 
 
    <tr class="word"> 
 
     <td class="cell letter">W</td> 
 
     <td class="cell letter keyword">C</td> 
 
     <td class="cell letter">A</td> 
 
    </tr> 
 
    <tr class="word"> 
 
     <td class="cell letter">W</td> 
 
     <td class="cell letter keyword">C</td> 
 
     <td class="cell letter">A</td> 
 
    </tr> 
 
</table>

+1

さて、私は、別の 'div'をキーワード' td'に挿入し、 'div'を上/下に境界線を付けるようにスタイリングすることで(数分前に)それは機能するので、私は間違いなくこれを行うオプションがないと言っていないでしょう - 今、私は単により良いものを探しています。より良い解決策が出てこない場合は、次の世代のためにここに投稿します。 –

1

「ボックスサイズ:border-box;」を追加すると、唯一.keywordクラスのために、それは動作します - 少なくとも、それはテーブルの外側の境界線の外に出ていません。

#crossword { 
 
    border-spacing: 0px; 
 
    border-collapse: collapse; 
 
} 
 
#crossword .keyword { 
 
    box-sizing: border-box; 
 
} 
 

 
.word { 
 
    vertical-align: middle; 
 
    align-items: center; 
 
    text-align: center; 
 
    justify-content: center; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
.cell { 
 
    width: 30px; 
 
    height: 30px; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
.letter { 
 
    border: 1px solid black; 
 
} 
 

 
.keyword { 
 
    border-width: 2px; 
 
    background-color: gray; 
 
}
<table id="crossword"> 
 
    <tr class="word"> 
 
     <td class="cell letter">W</td> 
 
     <td class="cell letter keyword">C</td> 
 
     <td class="cell letter">A</td> 
 
    </tr> 
 
<tr class="word"> 
 
     <td class="cell letter">B</td> 
 
     <td class="cell letter keyword">K</td> 
 
     <td class="cell letter">L</td> 
 
    </tr> 
 
<tr class="word"> 
 
     <td class="cell letter">F</td> 
 
     <td class="cell letter keyword">R</td> 
 
     <td class="cell letter">V</td> 
 
    </tr> 
 
    <tr class="word"> 
 
     <td class="cell letter">T</td> 
 
     <td class="cell letter">E</td> 
 
     <td class="cell letter">Q</td> 
 
    </tr> 
 
</table>

+0

残念ながら、これはクロスブラウザではありません。FirefoxとEdgeでは動作しますが、Chromeでは動作しません(OperaやSafariについてはわかりません。 ) –