我实现了一个填字游戏生成器.它生成一个带有每行单词和每单元格字母的填字游戏,关键字标有更宽的边框和灰色背景,如图中所示:
#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>
我的问题是图像中的红色椭圆标记 – 关键字的边框,比其余部分宽1px,打破了填字游戏的顶部和底部线条.我尝试删除border-collapse属性,但这导致每个行连接上出现双边框.
目前我使用table,tr和td进行生成,但是如果有使用div的解决方案,我会很乐意切换.
所以我的问题是:假设我能够唯一地处理每个单元格(包括向它们添加特殊类等),如何使顶部和底部边框出现在关键字单元格内而不是外部?
我找到了一个使用Box-shadow的解决方案,但它并不是真正的跨浏览器,并且涉及很多魔法,所以如果可能的话我宁愿避免使用它.
解决方法
通过使用保持表的最外边框以匹配表的默认边框
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>