vue项目实现展示教室布局展示教室的座位以及过道
时间: 2023-08-17 15:28:44 浏览: 132
要实现展示教室布局,可以使用Vue和CSS来实现。以下是一个简单的示例:
HTML代码:
```
<template>
<div class="classroom">
<div class="row" v-for="row in rows" :key="row">
<div class="seat" v-for="seat in seats" :key="seat.id" :class="{ aisle: seat.aisle, occupied: seat.occupied }">
<input type="checkbox" :id="'seat-' + seat.id" :disabled="seat.occupied" />
<label :for="'seat-' + seat.id">{{ seat.name }}</label>
</div>
</div>
</div>
</template>
```
CSS代码:
```
.classroom {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100vh;
}
.row {
display: flex;
justify-content: center;
align-items: center;
}
.seat {
position: relative;
width: 30px;
height: 30px;
margin: 5px;
text-align: center;
line-height: 30px;
border: 1px solid #ccc;
cursor: pointer;
}
.seat.aisle::before {
content: "";
position: absolute;
top: 50%;
left: -10px;
width: 10px;
height: 1px;
background-color: #ccc;
transform: translateY(-50%);
}
input[type="checkbox"] {
display: none;
}
label {
display: block;
width: 100%;
height: 100%;
}
input[type="checkbox"]:checked + label {
background-color: #007bff;
color: #fff;
}
.seat.occupied {
background-color: #ccc;
color: #fff;
}
```
解释:
首先,在HTML中,使用v-for指令遍历rows和seats两个数组来渲染教室布局。在每个座位的div容器中,使用v-bind:class指令来动态绑定class属性,以便根据座位的aisle和occupied属性来添加aisle和occupied类,以便在CSS中设置样式。
在CSS中,设置了.classroom容器的样式为flex布局,并设置了高度为100vh,以便填满整个屏幕。.row容器的样式也为flex布局,并设置了居中对齐。
.seat的样式设置了宽度和高度,并设置了边框、文本对齐方式和光标样式。在.aisle类的样式中,使用了伪元素::before来添加过道线,这里使用绝对定位和transform属性来调整位置。
input[type="checkbox"]的样式设置为display: none,这样就隐藏了checkbox。label标签的样式设置为块级元素,并设置了宽度和高度为100%。
在CSS中,使用“+”选择器来选择与选中的checkbox相邻的label标签。当checkbox被选中时,就会应用选中样式,这里设置了背景颜色和文字颜色。在.occupied类的样式中,设置了占用状态的座位的背景颜色和文字颜色。
这样,就可以展示教室布局,并在座位上添加过道线和占用状态。
阅读全文