css - 如何使用 HTML 和 CSS 创建一个完全灵活的钢琴键盘

标签 css html flexbox css-shapes piano

我正在尝试创建一个钢琴键盘,它将使用 flexbox 保持其元素比例,但一旦我开始更改窗口大小时似乎无法使黑色音符保持相同的宽度或高度。

这是一个fiddle

body{
width: 800px;
height: 200px;
display: flex;
}

#kbd {

padding: 1%;
flex-flow: column;
display: flex;
flex: 4;
}

#keys {
display: flex;
flex: 8;
justify-content: center;
}


.note {
flex: 1;
display: inline-flex;
align-items: center;
}

.black {
justify-content: center;
position: absolute;
height: 45%;
background-color: #474747;
color: white;
width: 8%;
margin: 0 -4%; 
}

.white {
flex-flow: column;
justify-content: flex-end;
outline: 2px solid #474747;
color: #474747;
background-color: #ffffff;
padding-bottom: 1%;
}

最佳答案

Demo @ Codepen


这不需要 Flexbox。响应式键盘布局可以通过以下方式实现:

  • 与每个键的音符相对应的其他类选择器:
<div class="key white c"      ></div>
<div class="key black c_sharp"></div>
<div class="key white d"      ></div>
<div class="key black d_sharp"></div>
<div class="key white e"      ></div>
<div class="key white f"      ></div>
<div class="key black f_sharp"></div>
<div class="key white g"      ></div>
<div class="key black g_sharp"></div>
<div class="key white a"      ></div>
<div class="key black a_sharp"></div>
<div class="key white b"      ></div>

  • 所有黑键和黑键之前的每个白键的边距,使用基于黑键大小的偏移量:
.a, .b, .d, .e, .g, .black{
  margin: 0 0 0 (-($blackKey_Width / 2) - $blackKey_BorderWidth);
}

  • 以下关键展示位置属性:
.key{
  float:    left;
  position: relative;
}

  • 更高z-index对于黑键:
.white{
  z-index: 1;
}
.black{
  z-index: 2;
}

  • Viewport Units [ vw , vh , vmin , vmax ] 对于 ( height & width ) 选择器的 ( .white & .black ) 属性。您可以通过将黑键的大小调整为白键的百分比来使其更加动态。

关于css - 如何使用 HTML 和 CSS 创建一个完全灵活的钢琴键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29656280/

相关文章:

html - 如何使图像粘在div的底部

css - 当子图像在 IE 中垂直收缩时,Flex 元素不会垂直收缩

javascript - img 上的最小高度不变形

php - 将自定义搜索表单添加到 wordpress 导航菜单的最佳方法是什么?

javascript - 需要运行两次 Node.removeChild() 以删除节点

html - 有没有办法在没有 jQuery 的情况下使文本框自动展开?

css - 如何让 flexbox 布局最后一行中的一个元素看起来一样?

css - flex 的 child 的 child 占据了所有的空间

html - 如何控制单个背景定义的多个图像

用于嵌套菜单项的 jQuery hasClass