纯CSS棋盘与div &没有类或ID,这可能吗?
我有以下布局
<div id="chess">
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
</div>
是否可以仅使用 css 制作棋盘而不更改上面的 html?这意味着没有类或 ID。 我两天来一直在寻找这样的想法。我尝试使用 nth-child() 和一些变体,但没有成功。
我很好奇这是否可以做到。它是作为一项任务交给某人的。
那么请问,有什么想法吗?
I have the following layout
<div id="chess">
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
</div>
Is it possible to make a chess board using only css and without changing the above html? That means no classes or ids.
I've been searching for ideas an such for 2 days now. I tried with nth-child() and some variations but no success.
I am awfully curious if this can be done. It was given as an assignment to someone.
So please, any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(16)
这是一个有趣的问题。我认为国际象棋棋盘最好用表格来表示,而不是用一系列 div 来表示,因为屏幕阅读器会指示图形所在的行和列。带有表格:
http://jsfiddle.net/9kWJZ/
This is an interesting problem. I think a chess board is better expressed as a table than as a series of divs, as a screen reader would dictate the rows and columns where the figures are located. With a table:
http://jsfiddle.net/9kWJZ/
您不必对每个
:nth-child()
进行硬编码。这是缩短它的一种方法。每个选择器对应棋盘上的一行:jsFiddle 预览
You don't have to hardcode each
:nth-child()
. Here's one way to shorten it. Each selector corresponds to a row on the chessboard:jsFiddle preview
以下方法利用了着色图案每 16 个方格重复一次(从左上角到右下角)这一事实。因此,第一条规则
#chess div:nth-child(16n+1)
为方格 1、17、33 和 49(换句话说,“第一列”)着色。对从 3 到 16 的所有彩色方块重复此操作,每个方块代表一个单独的列。对于给定的标记,使用
nth-of-type
或nth-child
并不重要,但是使用其他标记可能会如此,因此nth- child
是更明显的选择。The following approach makes use of the fact that the coloring pattern repeats every 16 squares (counting from top left to bottom right). So, the first rule
#chess div:nth-child(16n+1)
colors the squares 1,17,33 and 49 (in other words, "the first column"). This is repeated with additional rules for all colored squares from 3 to 16 each representing a separate column.With the given markup, it doesn't matter if you use
nth-of-type
ornth-child
, however with additional markup it might, sonth-child
is kind of the more obvious choice.在纯 CSS 中,接受的答案看起来是正确的 - 但是,如果你想用 SCSS 缩短它,你可以做一些数学运算:
In pure CSS, the accepted answer looks right - however, if you want to shorten this up with SCSS, you can do some maths:
当然可以做到...
of course it can be done...
您不能使用
nth-child(odd)
或nth-child(even)
为方块着色,因为并非所有“奇数”或“偶数”方块都是相同的颜色。从左上角位置“1”开始数,第一行的白色方块为 1, 3, 5, 7。继续进入第二行,白色方块为 10, 12, 14, 16。第三行为返回奇数 17、19、21 和 23。因此,您可以手动为每个方块着色,如下所示:
You can't use
nth-child(odd)
ornth-child(even)
to colour the squares, because not all the "odd" or "even" squares are the same colour. Counting from the top-left as position "1", the first row's white squares would be 1, 3, 5, 7. Continuing into the second row, the white squares would be 10, 12, 14, 16. The third row would be back to odd numbers, 17, 19, 21, and 23.You could therefore manually colour each of the squares as follows:
我意识到我已经迟到了,这个问题已经有几个很好的答案了。
我只想添加一个在处理高级
:nth-child
选择器时易于管理的解决方案。它有点冗长,不像其他一些建议那么优雅,但我发现它很容易阅读和处理。通过链接
:nth-child
伪类,您可以将您的选择限制在特定范围内。在伪代码中,它可以布局为:这可以用于逐行为棋盘着色,如下所示:
I realize I'm late to the game, and there are already several good answers to this question.
I'd just like to add a solution I find easy to manage when dealing with advanced
:nth-child
selectors. It's somewhat verbose and not as elegant as a few other suggestions, but I find it easy to read and deal with.By chaining the
:nth-child
pseudo classes you can limit your selection to certain ranges only. In pseudo code it can be laid out as:This can be used to color the chess board row by row like this:
试试这个:
Try this :
所有区域都具有相同的尺寸,因此您可以考虑在父元素上使用渐变着色
All the area have the same dimension so you can consider a gradient coloration on the parent element
完毕。示例:http://jsfiddle.net/LFVQU/1/
Done. Sample: http://jsfiddle.net/LFVQU/1/
我认为使用 float/clear 的答案更好,这正是我想到的。
I think answers using float/clear are better, just what I came up with.
对于那些需要 CSS3 棋盘且每个方格都有一个 id 以便您可以将其与 JavaScript 一起使用的人,我可以提出以下解决方案:
https://github.com/vpcom/CSS3-Chess-Board
此处提供演示:http://vincentperrin.com/cr/css3/css3-chess-board/
它是使用 Sass(SCSS 表示法)完成的,但您也可以使用经过处理的 CSS 文件。对于喜欢的人来说,这种事情也可以用玉来完成。
享受!
For those who need a CSS3 chess board with each square having an id so that you can use it with JavaScript, I can propose this solution:
https://github.com/vpcom/CSS3-Chess-Board
A demo is available here: http://vincentperrin.com/cr/css3/css3-chess-board/
It's done with Sass (SCSS notation) but you can use the processed CSS file also available. For those who like, this kind of things can also be done with Jade.
Enjoy!
如果使用 2 个重叠的容器是可以接受的,我认为有一种更直接和“静态”的方法,无需使用花哨的 css 功能:
If using 2 overlapped containers is acceptable, I think there is a more straightforward and "static" approach without using fancy css features:
受到 BoltClocks 小提琴的启发
可能是我最喜欢的一种,使用网格:
Inspired by BoltClocks fiddle
Probably my favorite one, using grid:
https://codepen.io/yogi-dad/pen/mdzPRzp
https://codepen.io/yogi-dad/pen/mdzPRzp
让我建议你更干净的CSS:
Let me suggest you more clean css: