纯 HTML/CSS 中的响应式俄罗斯方块板

Responsive Tetris board in pure HTML/CSS

我正在尝试在 html 中制作俄罗斯方块棋盘。每次你经过它时,我都想点亮它。 所以我制作了两个 div(1 个方块),第一个 div 点亮了其中两个,但我无法让第二个点亮第一个。我怎样才能让它发挥作用?

CSS :

div{
    width: 200px;
    height: 200px;
    background-color: 0000ff;
    margin: 0px;
}

#div1{
    float:left;
    height:600px;
}

#div2{
    float:left;
    width:200px;
}

#div1:hover + #div2{
    background-color: #0082ff;
}

#div1:hover{
    background-color: #0082ff;
}

#div2:hover - #div1{
    background-color: #0082ff;
}

#div2:hover{
    background-color: #0082ff;
}

HTML :

<html>
    <head>
        <link href="style.css" type="text/css" rel="stylesheet">
        <title>hover test</title>
    </head>
    <body>
        <div id="div1"></div>
        <div id="div2"></div>
    </body>
</html>

这是由于 CSS 的性质 - 因为 selectors 只能标识子元素或后续同级元素。因此,当悬停第一个时,您可以 select 第二个 div 因为它是(后续的)相邻兄弟,您已经使用 + select 或 select 完成了此操作。 =21=]

但是,在 CSS 中,您无法 'go the other way' 和 select 第一个 div 当悬停第二个时,不支持 - select或识别前面的元素。

也许最简单的查看方式是在 CSS 中,您只能 select 出现在 之后 项目开始标记的项目在您的 HTML.

中有问题

为了完成您的需要,您可以使用 Javascript(例如 jQuery .prev().next()sliblings() 等)或组父级中的元素并检测它的 :hover 状态,这个问题是由于子级大小不同,父级块将超出它们的外部不规则边界。这将意味着您将在父区域内有悬停的实例,但不会在触发悬停状态的子块之一上。因此,我会推荐一个 Javscript 解决方案(以下仅供参考)。

$('div').on('mouseover', function() {
  $(this).addClass('hover');
  $(this).siblings('div').addClass('hover');
});
$('div').on('mouseout', function() {
  $('.hover').removeClass('hover');
});
div {
  width: 200px;
  height: 200px;
  background-color: 0000ff;
  margin: 0px;
  border: 1px solid grey;
}
#div1 {
  float: left;
  height: 600px;
}
#div2 {
  float: left;
  width: 200px;
}
.hover {
  background-color: #0082ff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div1"></div>
<div id="div2"></div>

不知道这是否会打乱您的定位,但一种方法是将两个 div 放在父 div 中。并在 css select 所有子元素中。

html:

<body>
    <div class="tile">
        <div class="filled" id="div1"></div>
        <div class="filled" id="div2"></div>
    </div>
</body>

css:

div.filled{
    width: 200px;
    height: 200px;
    background-color: #0000ff;
    margin: 0px;
}

div#div1{
    float:left;
    height:600px;
}

div#div2{
    float:left;
    width:200px;
}

div.tile:hover > .filled{
    background-color: #0082ff;
}