实现自定义样式的Radio Button

有如下HTML片段:

<div class="female">
    <input type="radio" name="sex" />
    <label for="female">女</label>
</div>
<div class="male">                
    <input type="radio" name="sex" />
    <label for="male">男</label>
</div>

此时的页面:

184959_o19D_1434710.png185038_EpcN_1434710.png185057_wIYC_1434710.png

思路:

  1. 可为label元素前用伪类增加新的内容(自定义的Radio样式)。
  2. 用CSS让新增的样式(背景色)随着单选按钮的选中和取消而变化。
  3. 隐藏真正的单选按钮。

第一步:用伪类为label元素增加自定义的Radio样式:

input[type="radio"]+label::before {
    content: '';
    display: inline-block;
    vertical-align: middle;
    font-size: 18px;
    width: 1em;
    height: 1em;
    margin-right: .4em;
    border-radius: 50%;
    border: 1px solid #01cd78;
    text-indent: .15em;
    padding: .1em; /*注意这里有个padding,这是为了裁切背景色的时候
                    让内容和边框留个间隙,这样就形成了Radio的外观*/
}

此时的页面:

185539_2oYh_1434710.png185637_OYXl_1434710.png185654_JMEU_1434710.png

第二步:让新增的样式(背景色)随着单选按钮的选中和取消而变化:

input[type="radio"]:checked+label::before {
    background-color: #01cd78;
    background-clip: content-box;
}

这个类是说,在当前选中的那个radio类型的input后面的label,对这个Label添加背景色,并裁剪背景色(background-clip),只为content上色(content-box),而padding不上色(第一步的类中,最后一个padding不能少)。

此时的页面:

190251_Bv54_1434710.png190318_gRbl_1434710.png190744_yGFZ_1434710.png

第三步:隐藏原始的Radio Button:

这里我们使用透明度opacity来控制,将原始的Radio变成透明的:

input[type="radio"] {
    position: absolute;
    opacity: 0; /*完全透明*/
}

此时的页面:

190935_AxSY_1434710.png191011_HonD_1434710.png191027_L5su_1434710.png

大功告成!

注意这里除了opacity:0以外,还有一个position:absolute,如果只有opacity项,那么此时的radio还在原来的位置,只是看不见而已(红框即为原来radio的位置):

191432_Egko_1434710.png

加上这个position:absolute,可以改变radio在文档流中的位置,而本例DOM比较简单,radio的位置移动后,会出现在这个伪类新增的元素(即绿色的圈)附近,所以此时可以直接点击绿圈。但是此时的radio位置和画圈的位置并不完全重合(如下图所示),所以正常的开发中还需要用top/bottom/left/right来稍微调整一下radio的位置,使其尽量与画的圈重合,否则可能点击不到。

192900_WoIw_1434710.png

 

参考页面:

https://www.cnblogs.com/xinjie-just/p/5911086.html

转载于:https://my.oschina.net/itblog/blog/1613997

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: el-radio-button可以通过CSS样式自定义样式,具体步骤如下: 1. 在CSS文件中定义自定义样式,例如: ``` .el-radio-button__inner { border: 1px solid #999; border-radius: 20px; background-color: #fff; color: #333; } .el-radio-button__inner:hover { border-color: #666; } .el-radio-button__inner.is-checked { background-color: #007aff; color: #fff; } ``` 2. 在el-radio-button组件中添加class属性,将自定义样式应用到组件中,例如: ``` <el-radio-button class="my-radio-button">选项一</el-radio-button> ``` 3. 在CSS文件中定义my-radio-button类的样式,例如: ``` .my-radio-button .el-radio-button__inner { border: 1px solid #999; border-radius: 20px; background-color: #fff; color: #333; } .my-radio-button .el-radio-button__inner:hover { border-color: #666; } .my-radio-button .el-radio-button__inner.is-checked { background-color: #007aff; color: #fff; } ``` 这样就可以自定义el-radio-button样式了。 ### 回答2: el-radio-button是一款基于Element UI的单选框组件,适用于在表单中提供单项选择的需求。虽然Element UI提供了一些预设的样式,但是很难满足所有用户的需求,因此我们需要自定义el-radio-button样式。 使用Element UI中的样式覆盖机制,我们可以通过给el-radio-button的class添加样式来进行自定义。首先,在样式中定义我们想要修改的属性,例如背景色、字体颜色、边框样式等等。接着,通过Vue的scoped属性来限制样式只对当前组件生效,这样就避免了全局污染。 接下来,我们可以根据自己的需求进行样式修改,实现个性化的外观。例如,可以通过border属性修改边框,通过color属性修改字体颜色,通过background-color属性修改背景色,通过font-size属性修改字体大小等等。 除了样式自定义外,我们还可以自定义el-radio-button的图标。Element UI提供了一些图标样式,但是有时候我们需要更加特殊的图标来表达我们想要的意义。这时,我们可以通过复制Element UI默认图标并根据自己需求进行修改,或者使用图片等方式进行自定义。 总之,通过自定义el-radio-button样式和图标,我们可以实现更加符合我们需求的单选框。 ### 回答3: el-radio-button是Element UI框架中的单选钮组件,可以使用自定义样式来设置它的外观。以下是一些实现el-radio-button自定义样式的方法和技巧。 一、使用scoped样式 使用scoped样式可以确保样式仅适用于当前组件。这是最安全的方法,因为scoped样式仅会影响当前组件内部的元素,而不影响全局范围。 例如,通过以下代码来自定义单选钮的样式: ```css <style scoped> .el-radio-button { border: 1px solid #000000; border-radius: 4px; padding: 8px; font-size: 16px; color: #000000; background-color: #ffffff; } .el-radio-button__inner { border-color: #000000; } .el-radio-button__input:checked + .el-radio-button__inner { background-color: #000000; border-color: #000000; } .el-radio-button__input:checked + .el-radio-button__inner::before { background-color: #ffffff; } </style> ``` 通过上述代码,可以设置单选钮容器的边框、背景色、字体大小和颜色等样式。同时,使用伪类选择器来设置单选钮选中时的样式,比如选中时的背景色和边框颜色等。 二、使用全局样式 使用全局样式可以让样式应用于所有单选钮组件。全局样式通常应用于主题和样式表。 以下是一个全局样式示例: ```css .el-radio-button { border-radius: 20px; padding: 10px 40px; font-size: 24px; color: #ffffff; background-color: #bdbdbd; border: none; outline: none; cursor: pointer; transition: all 0.3s ease-in-out; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); } .el-radio-button:hover { background-color: #e0e0e0; } .el-radio-button__input:checked + .el-radio-button { background-color: #1e88e5; } ``` 上述代码将单选钮容器的背景色、字体大小和颜色、边框等样式设置为全局样式。透过:hover伪类和伪类选择器:checked,可以设置单选钮的选中和鼠标悬浮时的样式。 三、使用自定义主题 如果您想改变全局样式,您可以使用Element UI提供的自定义主题工具。 首先在您的项目中安装Element UI: ``` npm install element-ui -S ``` 然后使用element-theme-cli工具进行自定义主题设置: ``` npm install -g element-theme-cli et -i ``` 在运行element-theme-cli之后,会弹出一个交互式命令提示符。您可以选择颜色、字体等选项,以创建自己的主题文件。 例如,以下是一个自定义主题示例: ```css @import "~element-ui/packages/theme-chalk/src/index"; @include element-variables( $--color-primary: #009688; $--button-default-background-color: #bdbdbd; $--button-default-color: #ffffff; $--button-default-border-color: transparent; $--button-default-border-radius: 20px; ) .el-radio-button { border-radius: 20px; font-size: 24px; color: #ffffff; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); } .el-radio-button__input:checked + .el-radio-button { background-color: #009688; } ``` 上述代码使用了element-variables函数来设置Element UI组件库的默认颜色,然后覆盖了el-radio-button的默认样式,以创建一个新的主题。 总的来说,通过使用scoped样式、全局样式自定义主题,可以轻松地自定义Element UI中的el-radio-button组件的样式,以适应您的项目需求。正确使用这些方法和技巧,可以为您的项目提供更好的用户体验和视觉效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值