Skip to content
MiTu

MiTu

A Web developer who loves to Reading and photography

用 flex 实现骰子布局 ​

一、骰子的布局 ​

基本样式 ​

html
<div class="box">
  <span class="item"></span>
</div>
css
.box {
  margin: 100px auto;
  width: 100px;
  height: 100px;
  border-radius: 5px;
  background-color: bisque;
}
.item {
  display: inline-block;
  width: 25px;
  height: 25px;
  border-radius: 12px;
  margin: 2px;
  background-color: #800;
}

上面代码中,div 元素(代表骰子的一个面)是 Flex 容器,span 元素(代表一个点)是 Flex 项目。如果有多个项目,就要添加多个 span 元素,以此类推。

单项目 ​

左上角 ​

首先是一个点在左上角的情况,flex 布局默认就是左对齐的,因此一行代码就够了。

css
display: flex;

水平居中 ​

css
display: flex;
justify-content: center;

右上角 ​

css
display: flex;
justify-content: end;

垂直居中靠左 ​

css
display: flex;
align-items: center;

水平垂直居中 ​

css
display: flex;
justify-content: center;
align-items: center;

垂直居中靠右 ​

css
display: flex;
justify-content: end;
align-items: center;

左下角 ​

css
display: flex;
align-items: flex-end;

水平居中靠下 ​

css
display: flex;
justify-content: center;
align-items: flex-end;

右下角 ​

css
display: flex;
justify-content: end;
align-items: flex-end;

双项目 ​

布局样式一 ​

css
display: flex;
justify-content: space-between;
align-items: center; /* 通过align-items来控制垂直方向位置 */

布局样式二 ​

css
display: flex;
justify-content: space-between;
flex-direction: column; /* 改变主轴方向 */
align-items: start; /* 通过align-items来控制水平方向位置 */

布局样式三 ​

css
.box {
  display: flex;
}
.item:nth-child(2) {
  align-self: center;
}
css
.box {
  display: flex;
  justify-content: space-between;
}
.item:nth-child(2) {
  align-self: center;
}

三项目 ​

css
.box {
  display: flex;
}
.item:nth-child(2) {
  align-self: center;
}
.item:nth-child(3) {
  align-self: flex-end;
}

四项目 ​

html
<div class="box">
  <div class="column">
    <span class="item"></span>
    <span class="item"></span>
  </div>
  <div class="column">
    <span class="item"></span>
    <span class="item"></span>
  </div>
</div>
css
.box {
  display: flex;
  flex-wrap: wrap;
  align-content: space-between;
}

.column {
  flex-basis: 100%;
  display: flex;
  justify-content: space-between;
}