The lable keeps showing as it's focus, I thought .num__box:not(:placeholder-shown) is the way to do it.

HTML:
<div class="input__box">
<div>
<input type="number" inputmode="tel" id="ppl__join" class="num__box" min="1" max="100" name="ppl__join" placeholder="" required>
<label class="input__lable">開放報名人數</label>
</div>
</div>
CSS:
.input__lable {
position: absolute;
left: 10px;
top: 8px;
padding: 0 10px;
color: #303245;
font-weight: 600;
font-size: 20px;
cursor: text;
transition: top 200ms ease-in,
left 200ms ease-in;
background-color: inherit ;
}
.num__box:focus + .input__lable,
.num__box:not(:placeholder-shown) + .input__lable
{
position: absolute;
top: -0.5rem;
left: 15px;
color: #303245;
font-size: 18px ;
background-color: #e3e3e3 ;
}