html - HTML 单选按钮,如条形图和相应标签,就像 X 轴名称一样位于它们的右下方
问题描述
我想使用单选按钮实现 HTML 条,并使它们的标签出现在x-axis下。我还想维护锁定/解锁图标,如下面的代码所示。我试图查看这些答案 Creating interactive bar chart with only HTML and CSS and How to style a radio button to look like a regular Learn More Button但即使在我尝试之后也无法获得整个解决方案。这是我写的代码和预期的结果。选中后,按钮颜色应变为绿色。我正在使用引导程序。请有人帮助我。
.team-bar {
/*list-style-type:none;
margin:25px 0 0 0;
padding:0; */
}
.team-bar .teama {
float: left;
margin: 0;
width: 150px;
height: 350px;
position:relative;
}
.team-bar .lock-unlock-img, .team-bar input {
display: block;
position:absolute;
top:0;
left:0;
right:0;
bottom:0;
}
.team-bar input[type="radio"] {
opacity:0.011;
z-index:100;
}
/*.team-bar .checked{
background:yellow;
}*/
.team-bar .lock-unlock-img {
padding:5px;
border:1px solid #CCC;
cursor:pointer;
z-index:90;
}
.team-bar .lock-unlock-img:hover {
background:#DDD;
}
<!-- Google Font: Source Sans Pro -->
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
<!-- Font Awesome -->
<link rel="stylesheet" href="//adminlte.io/themes/v3/plugins/fontawesome-free/css/all.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="//adminlte.io/themes/v3/dist/css/adminlte.min.css">
<div class="container">
<div class="row">
<div class="team-bar">
<div class="col-md-1 center teama" style="display: inline !important;">
<div class="inner text-center">
<p class="radios" style="display: inline !important;">
<input id="radio" type="radio" class="radio-inline" value="" name="assetvalue">
<div class="lock-unlock-img">
<b class="float-left" alt="left"> <i class="fa fa-lock text-danger"></i></b>
<b class="float-right" alt="left"> <i class="fa fa-unlock text-success"></i></b>
</div>
<label class="radio bg-primary1 text-center" for="radio" style="display: inline-block !important;"> Team 1</label>
</p>
</div>
</div>
<div class="col-md-1 center teama" style="display: inline !important;">
<div class="inner text-center">
<p class="radios" style="display: inline !important;">
<input id="radio" type="radio" class="radio-inline" value="" name="assetvalue">
<div class="lock-unlock-img">
<b class="float-left" alt="left"> <i class="fa fa-lock text-danger"></i></b>
<b class="float-right" alt="left"> <i class="fa fa-unlock text-success"></i></b>
</div>
<label class="radio bg-primary1 text-center" for="radio" style="display: inline-block !important;"> Team 2</label>
</p>
</div>
</div>
<div class="col-md-1 center teama btn-success" style="display: inline !important;">
<div class="inner text-center">
<p class="radios" style="display: inline !important;">
<input id="radio" type="radio" class="radio-inline" value="" name="assetvalue">
<div class="lock-unlock-img">
<b class="float-left" alt="left"> <i class="fa fa-lock text-danger"></i></b>
<b class="float-right" alt="left"> <i class="fa fa-unlock text-success"></i></b>
</div>
<label class="radio bg-primary1 text-center" for="radio" style="display: inline-block !important;"> Team 3</label>
</p>
</div>
</div>
<div class="col-md-1 center teama" style="display: inline !important;">
<div class="inner text-center">
<p class="radios" style="display: inline !important;">
<input id="radio" type="radio" class="radio-inline" value="" name="assetvalue">
<div class="lock-unlock-img">
<b class="float-left" alt="left"> <i class="fa fa-lock text-danger"></i></b>
<b class="float-right" alt="left"> <i class="fa fa-unlock text-success"></i></b>
</div>
<label class="radio bg-primary1 text-center" for="radio" style="display: inline-block !important;"> Team 4</label>
</p>
</div>
</div>
<div class="col-md-1 center teama" style="display: inline !important;">
<div class="inner text-center">
<p class="radios" style="display: inline !important;">
<input id="radio" type="radio" class="radio-inline" value="" name="assetvalue">
<div class="lock-unlock-img">
<b class="float-left" alt="left"> <i class="fa fa-lock text-danger"></i></b>
<b class="float-right" alt="left"> <i class="fa fa-unlock text-success"></i></b>
</div>
<label class="radio bg-primary1 text-center" for="radio" style="display: inline-block !important;"> Team 5</label>
</p>
</div>
</div>
</div>
</div>
</div>
解决方案
我为每个单选按钮创建了一个样式来实现你想要的。
每个单选按钮
- 容器:标签用作容器,以使整个区域可点击
- element1:输入本身
- element2:每个栏的图标行
- element3:条形彩色矩形
- element4:栏的标签
我不确定颜色的逻辑,所以我试着让它和你的图片一样。
<label for="team1" class="bar">
<input type="radio"
id="team1"
name="team"
value="team1"
checked
>
<div class="icons-bar">
<i class="fa fa-lock text-danger"></i>
<i class="fa fa-unlock text-success"></i>
</div>
<div class="chart-value"></div>
<div class="legend">Team 1</div>
</label>
造型
根据是否检查输入,我正在更改栏的高度。在我的解决方案中,我对所有条形使用相同的高度,但这很容易改变。就像我为每个条形定义颜色一样,您可以根据所选状态对条形的高度执行相同的操作。
重要的部分是使用~
选择器,它是Subsequent-sibling 组合器
通用兄弟组合符由分隔两个简单选择器序列的“波浪号”(U+007E,~)字符组成。由两个序列表示的元素在文档树中共享相同的父元素,并且由第一个序列表示的元素在(不一定立即)由第二个序列表示的元素之前。
input:checked ~ .chart-value {
height: 100%;
}
html,
body {
margin: 0;
padding: 0;
width: 100vw;
height: 100vh;
}
body {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
background: #f5f5dc;
}
.kb-checkbox-as-chart {
--chart-height: 250px;
--chart-color1: hsl(141, 53%, 53%);
--chart-color2: hsl(141, 53%, 53%);
--chart-color3: hsl(141, 53%, 53%);
--chart-color4: hsl(141, 53%, 53%);
--chart-color5: hsl(141, 53%, 53%);
--lock-color: hsl(348, 100%, 61%);
--unlock-color: hsl(141, 53%, 53%);
--unlock-selected-color: hsl(48, 100%, 67%);
display: flex;
height: var(--chart-height);
padding-bottom: 1em;
border: 1px solid grey;
}
.kb-checkbox-as-chart .bar {
margin: 0 0.3em;
padding: 0.5em 0.5em 0;
height: 100%;
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: center;
position: relative;
cursor: pointer;
}
.kb-checkbox-as-chart .bar .legend {
font-weight: bold;
}
.kb-checkbox-as-chart .bar .icons-bar {
top: 0;
left: 0;
right: 0;
display: flex;
justify-content: space-between;
position: absolute;
padding: 0.8em;
}
.kb-checkbox-as-chart .bar .icons-bar .fa-lock {
color: var(--lock-color);
}
.kb-checkbox-as-chart .bar .icons-bar .fa-unlock {
color: var(--unlock-color);
}
.kb-checkbox-as-chart .bar .chart-value {
height: 20px;
width: 95%;
background: var(--chart-color1);
transition: height 250ms;
}
.kb-checkbox-as-chart input:checked~.icons-bar .fa-unlock {
color: var(--unlock-selected-color);
}
.kb-checkbox-as-chart input:checked~.chart-value {
height: 100%;
}
.kb-checkbox-as-chart input#team2~.chart-value {
background-color: var(--chart-color2);
}
.kb-checkbox-as-chart input#team3~.chart-value {
background-color: var(--chart-color3);
}
.kb-checkbox-as-chart input#team4~.chart-value {
background-color: var(--chart-color4);
}
.kb-checkbox-as-chart input#team5~.chart-value {
background-color: var(--chart-color5);
}
.kb-checkbox-as-chart input[type=radio] {
position: absolute;
opacity: 0;
cursor: pointer;
height: 0;
width: 0;
}
<link href="https://pro.fontawesome.com/releases/v5.2.0/css/all.css" rel="stylesheet" />
<div class="kb-checkbox-as-chart">
<label for="team1" class="bar">
<input type="radio" id="team1" name="team" value="team1"
checked>
<div class="icons-bar">
<i class="fa fa-lock text-danger"></i>
<i class="fa fa-unlock text-success"></i>
</div>
<div class="chart-value"></div>
<div class="legend">Team 1</div>
</label>
<label for="team2" class="bar">
<input type="radio" id="team2" name="team" value="team2">
<div class="icons-bar">
<i class="fa fa-lock text-danger"></i>
<i class="fa fa-unlock text-success"></i>
</div>
<div class="chart-value"></div>
<div class="legend">Team 2</div>
</label>
<label for="team3" class="bar">
<input type="radio" id="team3" name="team" value="team3">
<div class="icons-bar">
<i class="fa fa-lock text-danger"></i>
<i class="fa fa-unlock text-success"></i>
</div>
<div class="chart-value"></div>
<div class="legend">Team 3</div>
</label>
<label for="team4" class="bar">
<input type="radio" id="team4" name="team" value="team4">
<div class="icons-bar">
<i class="fa fa-lock text-danger"></i>
<i class="fa fa-unlock text-success"></i>
</div>
<div class="chart-value"></div>
<div class="legend">Team 4</div>
</label>
<label for="team5" class="bar">
<input type="radio" id="team5" name="team" value="team5">
<div class="icons-bar">
<i class="fa fa-lock text-danger"></i>
<i class="fa fa-unlock text-success"></i>
</div>
<div class="chart-value"></div>
<div class="legend">Team 5</div>
</label>
</div>
推荐阅读
- node.js - 回调不是使用 nodejs 进行异步操作的函数
- facebook - 使用 Facebook Graph API v3.0 列出群组事件
- javascript - 为什么无法读取此 JSON 属性?
- android - Firebase 用户未从 Android 的 ListView 中删除
- bluetooth - Bluez 和 dbus - 设置曲目播放位置/跳转到位置
- php - 引导表单验证器:发送联系电子邮件
- python - 限制并发请求数 aiohttp
- python - 如何使用 Visual Studio 代码 >after< 安装 anaconda
- python - 有人可以举例解释 MPEG2 TS(传输流)字节结构吗?
- python - Flask ImportError:无法导入名称应用程序