Я работаю над проектом, в котором есть флажок и метка, и их нужно выровнять по одной строке, а текст выровнять по вертикали по центру флажка. Но текст находится чуть ниже флажка.
import React from "react";
import './checkbox.less';
interface ICheckBoxProps {
label: string;
}
const Checkbox:React.FC<ICheckBoxProps> = ({label}) => (
<div className = "flex">
<div>
<input
type = "checkbox"
id = {label}
className = "container"
/>
<label htmlFor = {label} className = "label">{label}</label>
</div>
</div>
)
export default Checkbox;
CSS-файл:
.App {
font-family: sans-serif;
text-align: center;
position:relative;
display: inline;
}
.container {
margin-bottom: 12px;
cursor: pointer;
font-size: 22px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
text-align: left;
vertical-align:middle;
display:inline-block;
}
.flex{
display: flex;
align-items: center;
justify-content: flex-start;
vertical-align:middle;
display: inline-flex;
}
.label{
display : inline;
}
Пожалуйста помоги
Это потому, что вы применяете margin-bottom: 12px;
к своему элементу <input type = "checkbox"/>
(через класс .container
):
<input
type = "checkbox"
id = {label}
className = "container"
/>
.container {
margin-bottom: 12px;
Вы можете просто не применять это поле только к <input>
(см. label1 на снимке экрана ниже) или применить его к содержащему div (который охватывает как <input>
, так и <label>
, см. label2 на снимке экрана ниже):
<div className = "flex">
<div class = "container2">
<input type = "checkbox" id = "label2" class = "container1" />
<label for = "label2" class = "label">{label2 margin-bottom on containing div (both input and label)}</label>
</div>
</div>
.container1 {
/*margin-bottom: 12px;*/
}
.container2 {
margin-bottom: 12px;
}