如何使用jQuery Mobile创建迷你主题的翻转开关

  • Post category:jquery

下面是如何使用jQuery Mobile创建迷你主题的翻转开关的完整攻略。

1. 关于jQuery Mobile主题

首先,需要了解jQuery Mobile主题。jQuery Mobile是一个移动端UI框架,具有为移动设备设计的UI控件和主题。jQuery Mobile的主题有四个主要部分,即页面、header、content和footer。

2. 开始创建翻转开关

接下来,我们开始创建翻转开关。首先,需要引入jQuery Mobile和我们自定义的CSS文件,如下所示:

<!DOCTYPE html>
<html>
<head>
    <title>翻转开关</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
    <link rel="stylesheet" href="css/custom.css">
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
    <script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
</body>
</html>

接着,在body标签中添加一个div,用于放置翻转开关。如下所示:

<body>
    <div data-role="page" id="main">
        <div data-role="main" class="ui-content">
            <div class="flip-switch">
                <label>
                    <input type="checkbox">
                </label>
            </div>
        </div>
    </div>
</body>

在CSS文件中,需要定义翻转开关的样式。如下所示:

.flip-switch {
    width: 50px;
    height: 30px;
    margin: 10px;
    background-color: #ccc;
    border-radius: 15px;
    position: relative;
}

.flip-switch label {
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    text-align: center;
    margin-top: -10px;
    font-size: 14px;
    color: #fff;
}

.flip-switch label:before {
    content: "OFF";
    display: inline-block;
    width: 25px;
    height: 20px;
    background-color: #f00;
    border-radius: 10px;
    margin-right: 6px;
    line-height: 20px;
}

.flip-switch label:after {
    content: "ON";
    display: inline-block;
    width: 25px;
    height: 20px;
    background-color: #0f0;
    border-radius: 10px;
    margin-left: 6px;
    line-height: 20px;
}

.flip-switch input[type="checkbox"] {
    display: none;
}

.flip-switch input[type="checkbox"]:checked + label:before {
    content: "";
}

.flip-switch input[type="checkbox"]:checked + label:after {
    content: "";
}

这个样式定义中,我们设置了一个背景颜色为灰色的圆形开关,开关上面的标签显示关键字OFF和ON。当这个开关被选中时,会更改开关上方标签的内容。这个样式定义可以自定义,根据需求来调整。

3. 美化主题

最后,我们来美化主题。我们可以通过更改CSS文件中的颜色来实现不同的主题效果。如下所示:

.flip-switch label:before {
    background-color: #f00;//红色主题
}

.flip-switch label:after {
    background-color: #0f0;//绿色主题
}

通过更改标签上的颜色值,可以创造出多种主题样式。

4. 示例说明

下面,我们来看两个示例说明:

示例1

这是一个黑白配色的简易翻转开关。

<body>
    <div data-role="page" id="main">
        <div data-role="main" class="ui-content">
            <div class="flip-switch">
                <label>
                    <input type="checkbox">
                </label>
            </div>
        </div>
    </div>
</body>
.flip-switch {
    width: 50px;
    height: 30px;
    margin: 10px;
    background-color: #ccc;
    border-radius: 15px;
    position: relative;
}

.flip-switch label {
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    text-align: center;
    margin-top: -10px;
    font-size: 14px;
    color: #fff;
}

.flip-switch label:before {
    content: "OFF";
    display: inline-block;
    width: 25px;
    height: 20px;
    background-color: #fff;
    border: 1px solid #000;
    border-radius: 10px;
    margin-right: 6px;
    line-height: 20px;
}

.flip-switch label:after {
    content: "ON";
    display: inline-block;
    width: 25px;
    height: 20px;
    background-color: #000;
    border: 1px solid #000;
    border-radius: 10px;
    margin-left: 6px;
    line-height: 20px;
}

.flip-switch input[type="checkbox"] {
    display: none;
}

.flip-switch input[type="checkbox"]:checked + label:before {
    background-color: #000;
    color: #fff;
}

.flip-switch input[type="checkbox"]:checked + label:after {
    background-color: #fff;
    color: #000;
}

示例2

这是一个彩色翻转开关。

<body>
    <div data-role="page" id="main">
        <div data-role="main" class="ui-content">
            <div class="flip-switch color">
                <label>
                    <input type="checkbox">
                </label>
            </div>
        </div>
    </div>
</body>
.flip-switch.color {
    margin: 10px;
    width: 70px;
    height: 45px;
    background-color: #eee;
    border-radius: 25px;
    position: relative;
}

.flip-switch.color label {
    position: absolute;
    top: 0;
    left: 0;
    width: 40%;
    height: 100%;
    z-index: 2;
    border-radius: 25px;
    background-color: #eee;
    border: solid 1px #999;
    transition: all 0.3s ease-in-out;
    box-shadow:
        inset -1px -1px 2px rgba(0,0,0,0.2),
        inset 1px 1px 2px rgba(255,255,255,0.7),
        1px 1px 2px rgba(0,0,0,0.2),
        -1px -1px 2px rgba(255,255,255,0.7);
}

.flip-switch.color label:before {
    display: block;
    position: absolute;
    top: 50%;
    right: -1px;
    transform: translate(0, -50%);
    font-size: 20px;
    font-weight: 700;
    text-transform: uppercase;
}

.flip-switch.color .left {
    position: absolute;
    top: 0;
    left: 0;
    width: 50%;
    height: 100%;
    margin: 0;
    z-index: 1;
    border-radius: 25px 0 0 25px;
    background-color: #eee;
    border: solid 1px #999;
    box-shadow:
        inset 1px 1px 2px rgba(0,0,0,0.2),
        inset -1px -1px 2px rgba(255,255,255,0.7),
        1px 1px 2px rgba(0,0,0,0.2),
        -1px -1px 2px rgba(255,255,255,0.7);
}

.flip-switch.color .right {
    position: absolute;
    top: 0;
    right: 0;
    width: 50%;
    height: 100%;
    margin: 0;
    z-index: 1;
    border-radius: 0 25px 25px 0;
    background-color: #ccc;
    border: solid 1px #999;
    box-shadow:
        inset -1px -1px 2px rgba(0,0,0,0.2),
        inset 1px 1px 2px rgba(255,255,255,0.7),
        1px 1px 2px rgba(0,0,0,0.2),
        -1px -1px 2px rgba(255,255,255,0.7);
}

.flip-switch.color input[type="checkbox"] {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    z-index: 3;
    opacity: 0;
    cursor: pointer;
}

.flip-switch.color input[type="checkbox"]:checked + label {
    width: 60%;
    left: 40%;
    background-color: #0f9e3f;
    box-shadow:
        inset -1px -1px 2px rgba(0,0,0,0.2),
        inset 1px 1px 2px rgba(255,255,255,0.7),
        1px 1px 2px rgba(0,0,0,0.2),
        -1px -1px 2px rgba(255,255,255,0.7);
}

.flip-switch.color input[type="checkbox"]:checked + label:before {
    content: "ON";
    color: #fff;
    left: 60%;
}

.flip-switch.color input[type="checkbox"]:checked ~ .left {
    width: 40%;
    border-radius: 25px;
    background-color: #0f9e3f;
    box-shadow:
        inset 1px 1px 2px rgba(0,0,0,0.2),
        inset -1px -1px 2px rgba(255,255,255,0.7),
        1px 1px 2px rgba(0,0,0,0.2),
        -1px -1px 2px rgba(255,255,255,0.7);
}

.flip-switch.color input[type="checkbox"]:checked ~ .right {
    width: 60%;
    right: 40%;
    border-radius: 25px 0 0 25px;
    background-color: #eee;
    box-shadow:
        inset -1px -1px 2px rgba(0,0,0,0.2),
        inset 1px 1px 2px rgba(255,255,255,0.7),
        1px 1px 2px rgba(0,0,0,0.2),
        -1px -1px 2px rgba(255,255,255,0.7);
}

这个样式定义中,我们创造出了一个具有新颖翻转功能的开关。在样式定义中,我们使用了多个CSS属性,使开关更加真实,包括了透视,渐变和阴影等。可以在CSS样式中修改颜色,以得到不同的主题效果。

在这两个示例中,我们可以看到不同的CSS代码,以实现不同的主题样式。通过修改这些CSS样式,可以轻松地创建一个独特的翻转开关。