资源:
我的观点的实时演示–供您查看我在那做的事情
Simon的有效实现–为说明这将是一个功能性游戏
问题:
您对标记有何想法?过度杀伤力?正确吗?
您会在CSS方面进行哪些改进?特别是在绝对尺寸和边框的方向上询问。
HTML:
<div class="game">
<div class="area area-0-0">
<div class="tile tile-0-0">
<button type="button" class="tile-button"></button>
</div>
<div class="tile tile-1-0">
<button type="button" class="tile-button"></button>
</div>
<div class="tile tile-2-0">
<button type="button" class="tile-button"></button>
</div>
<div class="tile tile-0-1">
<button type="button" class="tile-button"></button>
</div>
<div class="tile tile-1-1">
<button type="button" class="tile-button"></button>
</div>
<div class="tile tile-2-1">
<button type="button" class="tile-button"></button>
</div>
<div class="tile tile-0-2">
<button type="button" class="tile-button"></button>
</div>
<div class="tile tile-1-2">
<button type="button" class="tile-button"></button>
</div>
<div class="tile tile-2-2">
<button type="button" class="tile-button"></button>
</div>
</div>
<div class="area area-1-0">
<!-- 9 tiles -->
</div>
<div class="area area-2-0">
<!-- 9 tiles -->
</div>
<div class="area area-0-1">
<!-- 9 tiles -->
</div>
<div class="area area-1-1">
<!-- 9 tiles -->
</div>
<div class="area area-2-1">
<!-- 9 tiles -->
</div>
<div class="area area-0-2">
<!-- 9 tiles -->
</div>
<div class="area area-1-2">
<!-- 9 tiles -->
</div>
<div class="area area-2-2">
<!-- 9 tiles -->
</div>
</div>
CSS:
*, *:before, *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
body {
margin: 0;
}
/*
* GAME
* Board size is calculated as follows:
*
* .game = .area * 3
* 459px = 153px * 3
*
* .area = padding-left + .tile * 3 + padding-right + border
* 153px = 3px + 48px * 3 + 3px + 3px
*
* .tile = padding-left + .width + padding-right
* 48px = 3px + 42px + 3px
*/
.game {
width: 459px;
margin-top: 50px;
margin-right: auto;
margin-left: auto;
}
/* Clearfixing .game */
.game:after {
content: "";
display: table;
clear: both;
}
@media screen and (max-width: 500px) {
.game {
width: 315px;
}
}
/*
* AREA
*/
.area {
float: left;
width: 153px;
padding: 3px;
}
.area:nth-child(3n-1),
.area:nth-child(3n-0) {
border-left: 3px solid #444;
}
.area:nth-child(4),
.area:nth-child(5),
.area:nth-child(6),
.area:nth-child(7),
.area:nth-child(8),
.area:nth-child(9) {
border-top: 3px solid #444;
}
/* Clearfixing .area */
.area:after {
content: "";
display: table;
clear: both;
}
@media screen and (max-width: 500px) {
.area {
width: 105px;
}
}
/*
* TILE
*/
.tile {
float: left;
padding: 3px;
}
/*
* BUTTONS
*/
.tile-button {
width: 42px;
height: 42px;
padding: 0;
cursor: pointer;
vertical-align: middle;
border: 1px solid gray;
border-radius: 3px;
background-color: greenYellow;
}
@media screen and (max-width: 500px) {
.tile-button {
width: 26px;
height: 26px;
}
}
.tile-button:hover,
.tile-button:focus {
border-color: #444;
background-color: yellowGreen;
}
#1 楼
看起来不错。我喜欢它适应较小窗口的方式。我不确定为什么每个按钮周围都有一个div(除了样式方面)。
代替使用divs可能/适当地使用表。
您尚未演示(尽管Simon的游戏演示了)您打算如何用O或X标记播放的按钮;也不知道如何通过赢得比赛来划清界限。如果X和O是不同的颜色(例如蓝色和红色以反映您为获胜游戏选择的颜色),我会发现更容易;而且我不喜欢您的clean.css中使用的
font-size: small
。要通过获胜游戏绘制一条(水平,垂直或对角线)线,可以使按钮半透明,以使该线可以是CSS背景。
当一个象限无法显示时(因为对手在其他地方玩过),您是否仍打算在该象限中绘制按钮或其他?
您是否需要做任何事情来调整“视网膜”(双密度像素)显示器上的外观大小?
每个按钮都需要一个name属性,是否应该将它们嵌入表格中?还是要添加javascript?
也许使索引从1开始(从1到9),而不是从0开始(从0到8)。您是否考虑过可访问性(例如,使用屏幕阅读器的人)?
也许以JSON和HTML形式提供游戏状态,因此正在玩的机器人(例如,Greasemonkey脚本)不提供此功能。无需刮擦HTML即可发现游戏状态。
为什么要使用px而不是em或%来指定CSS尺寸?
评论
\ $ \ begingroup \ $
我在控制元素(我的版本中为按钮)周围使用了一个额外的div,以更好地控制填充/边距之类的思想。我们在聊天中讨论了表主题。我们只需要表格以简化布局处理。因此,我们想使用div代替。另外,这是一个代码挑战。 :p
\ $ \ endgroup \ $
– kleinfreund
2014年2月5日在10:54
\ $ \ begingroup \ $
因为我不是程序员,所以我只是在看Simon的工作游戏。您引用的clean.css是Simon的游戏中生成的某些内容,而不是我的。我也不喜欢我将在聊天中讨论您的问题。我们也同意使用基于0到8的索引来反映逻辑。我希望从1到9。
\ $ \ endgroup \ $
– kleinfreund
2014年2月5日在10:58
\ $ \ begingroup \ $
我喜欢X和O的不同颜色!从技术上讲,按钮不要求名称也不要求特定的CSS类即可使逻辑正常工作,就像我在GWT(Google Web Toolkit)中实现的那样,当动态添加按钮时,GWT保留对按钮的引用。我喜欢JSON的想法!我看不到基于1的良好索引会产生什么?
\ $ \ endgroup \ $
–西蒙·福斯伯格
2014年2月6日17:30
\ $ \ begingroup \ $
@SimonAndréForsberg基于1的方法对于人类读者(如果有的话)而不是浏览器而言可能是一个愚蠢的想法。当它只有0..2时,我可以“可视化”该位置,但使用0..8则更困难。与UI相关的更重要的注释是IMO可能不使用px,而是显示行(也许通过半透明的按钮)。
\ $ \ endgroup \ $
– ChristW
2014年2月7日下午0:39
#2 楼
我在这里看到的绝对没有必要的一件事是使用button元素。如果您正确地使用了事件委托(由于功能版本被混淆,我无法查看功能版本),那么您需要做的就是将一个事件处理程序附加到游戏板上。只需检查一下事件的目标元素是否为tile
并根据需要调整磁贴的属性或子节点即可。游戏板是我认为适合使用表的区域,即使是尽管感觉您将使用它们进行布局。如果您考虑象国际象棋这样的游戏,这些图块都被命名为(A1-H8)。使用表实际上可以简化您的CSS,因为您可以利用
border-spacing: 5px
之类的属性来获得各个板块之间的良好间隙。您选择的命名约定因为您的图块的类名使我相信您正在使用JavaScript解析它们的位置。我建议改用
data-*
属性:<div class="tile" data-row="1" data-col="1"></div>
<div class="tile" data-row="1" data-col="2"></div>
这里的演示演示了一些关于纸牌游戏的想法(有交互性,但没有玩法) :http://codepen.io/cimmanon/pen/lKgpJ
评论
\ $ \ begingroup \ $
我正在看西蒙的比赛,但不是逻辑。我不是程序员。谢谢你的建议。我会考虑这些。听起来不错。
\ $ \ endgroup \ $
– kleinfreund
2014年2月5日在10:59
\ $ \ begingroup \ $
GWT(Google Web工具包)为我处理了所有JavaScript内容。它将我的Java代码编译为JavaScript。因此,您的JS建议对我无济于事:)我喜欢数据行而不是类名的想法(从技术上讲,我什至不需要所有的类名,因为GWT在它们存在时会自动保留对元素的引用添加)。至于CSS,我让@kleinfreund决定:)
\ $ \ endgroup \ $
–西蒙·福斯伯格
2014年2月6日在17:24
#3 楼
您可以将其简化为.area:nth-child(4),
.area:nth-child(5),
.area:nth-child(6),
.area:nth-child(7),
.area:nth-child(8),
.area:nth-child(9) {
border-top: 3px solid #444;
}
简化为
.area:nth-child(n + 4) {
border-top: 3px solid #444;
}
由于要根据游戏计算尺寸,以及稍后设置媒体查询,这将使其更容易设置
area {
width: 33%;
}
and
tile {
width: 28%;
padding 2%;
}
或该行中的内容。然后,您无需担心同步查询。
评论
\ $ \ begingroup \ $
我正在使用display:inline-block;而不是float:left;在早期版本中,并且在移动设备上计算出的尺寸存在问题。因此,对于第一个工作演示,我坚持使用像素。我将在下一个版本中使用百分比。谢谢。 :)
\ $ \ endgroup \ $
– kleinfreund
2014年2月5日在10:51
\ $ \ begingroup \ $
至于多个.area选择器,我认为这看起来不是很理想,我想我将应用特定的类名,例如has-top-border和has-left-border,并从我的GWT中动态应用它们(Google Web工具包)代码。
\ $ \ endgroup \ $
–西蒙·福斯伯格
2014年2月6日在17:26
评论
回顾这一点,我忍不住想起来,这几天用CSS-grid一定可以做到...?