发表于: 2020-03-22 09:20:56

1 1269


1)背景介绍:

radio是什么?select是什么?

radio是input元素的type属性的值,type = “radio”定义单选框。

<select> 元素用来创建下拉列表, <select> 元素中的 <option> 标签定义了列表中的可用选项。

radio和select的默认样式是什么? 

默认样式是浏览器给设置的样式,不同的浏览器样式有可能不同,radio选中和没选中是两种不同的样式。

为什么要修改?

为了在各个网站上显示效果统一,可以将其修改得更好看。

(2)知识剖析:

用到了label标签,文字写在label标签里,<label> 标签的 for 属性与相关元素的 id 属性相同,点击后面的文字,选中单选按钮。

将原来的默认样式隐藏,再为label添加伪元素,并根据单选按钮的选中和没选中的状态来改变伪元素的样式。

而对于select的修改则是在select外加一个div将其样式覆盖。

(3)常见问题:

怎么修改?

(4)解决方案:

单选按钮可以这样修改:

1,写两个单选按钮

2,为label添加一个伪元素

3,给单选按钮的勾选状态添加不同的样式

4. 把原来的单选按钮隐藏:

Select样式可以这样修改:

给select添加父元素div,目的是为了用div的样式覆盖住select样式。

(5)编码实战:

<!DOCTYPE html>

<html lang="en">


<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

<style>

/*为label添加一个伪元素*/

input[type="radio"] + label::before{

content"";

display: inline-block;

box-sizing: border-box;

vertical-align: middle;

font-size18px;

width1em;

height1em;

margin-right.4em;

border-radius50%;

border1px solid #01cd78;

text-indent.15em;

line-height1;

}

/*给单选按钮的勾选状态添加不同的样式*/

input[type="radio"]:checked + label::before{

background-color: #01cd78;

background-clip: content-box;

padding.2em;

}

/*现在把原来的单选按钮隐藏:*/

input[type="radio"] {

position: absolute;

clip: rect(0000);

}

</style>

</head>


<body>

<input type="radio" name="sex" id="male">

<label for="male"></label>

<input type="radio" name="sex" id="female">

<label for="female"></label>

</body>


</html>

<!DOCTYPE html>

<html lang="en">


<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>select</title>

<style>

div {

width200px;

height40px;

border1px solid #000;

border-radius5px;

position: relative;

overflow: hidden;

}


select {

border: none;/*清除select的边框样式*/

outline: none;/*清除select聚焦时候的边框颜色*/

width100%;/*将select的宽高等于div的宽高*/

height100%;

line-height40px;

/*隐藏select的下拉图标*/

appearance: none;

-webkit-appearance: none;

-moz-appearance: none;

/* 通过padding-left的值让文字居中 */

padding-left60px;

}

/* 使用伪类给select添加自己想用的图标 */

div::after {

content"";

width24px;

height28px;

background: url(10-chevron.jpg) no-repeat center;

/* 通过定位将图标放在合适的位置 */

position: absolute;

right4px;

top50%;

transform: translate(0-50%);

/* 给自定义的图标实现点击下来功能 */

pointer-events: none;

}

</style>

</head>


<body>

<div>

<select name="" id="">

<option value="">芝士</option>

<option value="">奶油</option>

</select>

</div>

</body>


</html>

 

(6)拓展思考:隐藏原来的单选按钮时,如果使用display:none;的话,那样会把从键盘tab键切换焦点的队列中完全删除。

于是可采用剪切的方式,让剪切后的尺寸为零,这样就隐藏了原来的单选按钮。

(7)参考文献:

自定义input[type="radio"]的样式 https://www.cnblogs.com/xinjie-just/p/5911086.html

纯css修改下拉列表select的默认样式 https://blog.csdn.net/nuanxiasuiyuan/article/details/75663521

css3中clip属性 https://www.cnblogs.com/MissBean/p/4094658.html

(8)更多讨论:

Q1:background-clip:content-box是什么?

A1:指定绘图区的背景,默认为border-box,背景绘制在边框方框内,设为content-box,背景只在内容区绘制。

Q2:解释一下,labie标签的for,与input的id吧。

A2:<label> 标签为 input 元素定义标注(标记)。

 

label 元素不会向用户呈现任何特殊效果。不过,它为鼠标用户改进了可用性。如果您在 label 元素内点击文本,就会触发此控件。就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。

 

<label> 标签的 for 属性应当与相关元素的 id 属性相同。

Q3:去除三角怎么去除?

appearance:none;

-moz-appearance:none; /* Firefox */

-webkit-appearance:none; /* Safari 和 Chrome */



返回列表 返回列表
评论

    分享到