纯CSS实现手风琴,input 复选框来实现点击展开效果。

 效果图

概述:通过该案例可以提升CSS基础知识,css样式,标签选择器,通过媒体查询,窗口大小排版布局,以及弹性布局。有一定基础的同学

 html结构部分

1通过定义input 实现点击切换内容,checked 默认属性,后面通过[属性=value] 实现展效果。

    <input type="radio" id="animal" name="wiki" value="Animal" checked>
    <input type="radio" id="plant" name="wiki" value="Plant">
    <input type="radio" id="space" name="wiki" value="Space">
    <input type="radio" id="river" name="wiki" value="River">

 html部分

<ul class="accordion">
        <!-- 1 -->
        <li data-radio="animal">
            <label for="animal" class="accordion-title">
                <span>01</span>
                <span class="accordion-heading">javascript</span>
            </label>
            <div class="accordion-content">用代码记录生活</div>
        </li>
        <!-- 2 -->
        <li data-radio="plant">
            <label for="plant" class="accordion-title">
                <span>02</span>
                <span class="accordion-heading">CSS</span>
            </label>
            <div class="accordion-content">
                网格布局,弹性布局,浮动布局
            </div>
        </li>
        <!-- 3 -->
        <li data-radio="space">
            <label for="space" class="accordion-title">
                <span>03</span>
                <span class="accordion-heading">VUE</span>
            </label>
            <div class="accordion-content">
                框架之神
            </div>
        </li>
        <!-- 4 -->
        <li data-radio="river">
            <label for="river" class="accordion-title">
                <span>04</span>
                <span class="accordion-heading">nodejs</span>
            </label>
            <div class="accordion-content">
                发现知识
            </div>
        </li>
    </ul>

CSS样式

选择inout 通过绝对定位隐藏 

input[type="radio"] {
    position: absolute;
    left: -9999px;
}

/*  -----自定义颜色–––-*/
:root {
    --accordion-color: #282828;
    --title-color: #191919;
    --active-color: #3e86d2;
    --separator-color: #292c2d;
    --white: #9b9b9b;
    --red: #e74c3c;
    --black: #000;
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

label {
    cursor: pointer;
}

ul {
    list-style: none;
}

a {
    text-decoration: none;
    color: inherit;
}

/* 全部选中input */
input[type="radio"] {
    position: absolute;
    left: -9999px;
}

body {
    position: relative;
    display: flex;
    align-items: center;
    min-height: 100vh;
    padding: 50px 0;
    font: 1rem/1.5 'Muli', sans-serif;
    /* background-image: url(https://ts1.cn.mm.bing.net/th/id/R-C.a20878fcf8c15ebef39e7cf9d08d9b96?rik=F%2f1WAk2UsiWGkQ&riu=http%3a%2f%2fimg.pconline.com.cn%2fimages%2fupload%2fupc%2ftx%2fphotoblog%2f1112%2f09%2fc4%2f9895861_9895861_1323440595643.jpg&ehk=crUxOBm%2f2cTKKaU6CMEDcUhaa%2b48XXEOazjOEkcHrLA%3d&risl=&pid=ImgRaw&r=0); */
}

伪类元素插入数据    content: '伪元素';

/* ------before 伪类元素插入内容----- */
.accordion::before {
    content: '伪元素';
    position: absolute;
    right: 0;
    top: -20px;
    font-size: 0.8rem;
    color: var(--black);
}

1.属性让你更改一个元素变形的原点 

transform-origin: bottom;

2.rotate()这个属性的应用原理是先用这个属性的赋值转换该元素,进行变形,然后再用这个属性的值把元素转换回去

transform: rotate(-90deg) translate(50%, 50%);

.accordion .accordion-heading {
    display: inline-block;
    white-space: nowrap;
    transform-origin: bottom;
    transform: rotate(-90deg) translate(50%, 50%);
}

完整代码

html部分

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>手风</title>
    <link rel="stylesheet" href="./css/style.css">
</head>

<body>
    <input type="radio" id="animal" name="wiki" value="Animal" checked>
    <input type="radio" id="plant" name="wiki" value="Plant">
    <input type="radio" id="space" name="wiki" value="Space">
    <input type="radio" id="river" name="wiki" value="River">

    <ul class="accordion">
        <!-- 1 -->
        <li data-radio="animal">
            <label for="animal" class="accordion-title">
                <span>01</span>
                <span class="accordion-heading">javascript</span>
            </label>
            <div class="accordion-content">用代码记录生活</div>
        </li>
        <!-- 2 -->
        <li data-radio="plant">
            <label for="plant" class="accordion-title">
                <span>02</span>
                <span class="accordion-heading">CSS</span>
            </label>
            <div class="accordion-content">
                网格布局,弹性布局,浮动布局
            </div>
        </li>
        <!-- 3 -->
        <li data-radio="space">
            <label for="space" class="accordion-title">
                <span>03</span>
                <span class="accordion-heading">VUE</span>
            </label>
            <div class="accordion-content">
                框架之神
            </div>
        </li>
        <!-- 4 -->
        <li data-radio="river">
            <label for="river" class="accordion-title">
                <span>04</span>
                <span class="accordion-heading">nodejs</span>
            </label>
            <div class="accordion-content">
                发现知识
            </div>
        </li>
    </ul>

    <!-- <footer class="page-footer">
        <small>Made with <span>❤</span> by <a href="http://georgemartsoukos.com/" target="_blank">George Martsoukos</a>
        </small>
    </footer> -->

    <script src="./js/index.js"></script>

</body>

</html>

 CSS样式

/*  -----自定义颜色–––-*/
:root {
    --accordion-color: #282828;
    --title-color: #191919;
    --active-color: #3e86d2;
    --separator-color: #292c2d;
    --white: #9b9b9b;
    --red: #e74c3c;
    --black: #000;
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

label {
    cursor: pointer;
}

ul {
    list-style: none;
}

a {
    text-decoration: none;
    color: inherit;
}

/* 全部选中input */
input[type="radio"] {
    position: absolute;
    left: -9999px;
}

body {
    position: relative;
    display: flex;
    align-items: center;
    min-height: 100vh;
    padding: 50px 0;
    font: 1rem/1.5 'Muli', sans-serif;
    /* background-image: url(https://ts1.cn.mm.bing.net/th/id/R-C.a20878fcf8c15ebef39e7cf9d08d9b96?rik=F%2f1WAk2UsiWGkQ&riu=http%3a%2f%2fimg.pconline.com.cn%2fimages%2fupload%2fupc%2ftx%2fphotoblog%2f1112%2f09%2fc4%2f9895861_9895861_1323440595643.jpg&ehk=crUxOBm%2f2cTKKaU6CMEDcUhaa%2b48XXEOazjOEkcHrLA%3d&risl=&pid=ImgRaw&r=0); */
}



.accordion {
    position: relative;
    width: calc(100% - 20px);
    max-width: 800px;
    min-height: 380px;
    margin: 0 auto;
    background: var(--accordion-color);
    color: var(--white);
}

/* ------before 伪类元素插入内容----- */
.accordion::before {
    content: '伪元素';
    position: absolute;
    right: 0;
    top: -20px;
    font-size: 0.8rem;
    color: var(--black);
}

.accordion label {
    text-align: center;
}

.accordion,
.accordion li,
.accordion .accordion-title {
    display: flex;
}

.accordion li:not(:last-child) {
    border: 1px solid var(--separator-color);
}

.accordion .accordion-title {
    flex-direction: column;
    justify-content: space-between;
    width: 70px;
    font-size: 1.4rem;
    font-weight: bold;
    line-height: normal;
    padding: 20px 10px;
    background: var(--title-color);
    transition: color 0.1s;
}

.accordion .accordion-title:hover {
    color: var(--active-color);
}

/* 关键点 */
.accordion .accordion-heading {
    display: inline-block;
    white-space: nowrap;
    transform-origin: bottom;
    transform: rotate(-90deg) translate(50%, 50%);
}

.accordion .accordion-content {
    display: none;
    align-items: center;
    justify-content: center;
    flex-grow: 1;
    padding: 20px;
    font-size: 400;
    color: azure;
}

[value="Animal"]:checked~.accordion [data-radio="animal"],
[value="Plant"]:checked~.accordion [data-radio="plant"],
[value="Space"]:checked~.accordion [data-radio="space"],
[value="River"]:checked~.accordion [data-radio="river"] {
    flex-grow: 1;
}

[value="Animal"]:checked~.accordion [for="animal"]+.accordion-content,
[value="Plant"]:checked~.accordion [for="plant"]+.accordion-content,
[value="Space"]:checked~.accordion [for="space"]+.accordion-content,
[value="River"]:checked~.accordion [for="river"]+.accordion-content {
    display: flex;
}

[value="Animal"]:checked~.accordion [for="animal"],
[value="Plant"]:checked~.accordion [for="plant"],
[value="Space"]:checked~.accordion [for="space"],
[value="River"]:checked~.accordion [for="river"] {
    color: var(--active-color);
}



/* –––––––––––––––––––––响应式––––––––––––––––––––––––––––– */
@media screen and (max-width: 650px) {
    .accordion {
        min-height: 0;
    }

    .accordion,
    .accordion li {
        flex-direction: column;
    }

    .accordion .accordion-title {
        flex-direction: row;
        width: auto;
    }

    .accordion .accordion-heading {
        transform: none;
    }

    .accordion .accordion-title,
    .accordion .accordion-content {
        padding: 20px;
    }
}


/* –––––––––––––––––––––––––––––––– */
/* .page-footer {
    position: absolute;
    bottom: 10px;
    right: 10px;
    font-size: 1rem;
    color: var(--black);
}

.page-footer span {
    color: var(--red);
} */

这是本案例的完整代码了,希望对大家有帮助,如果想提升编程水平就多加练习吧,在编程中碰到BUG也不要着急。有解决不了的问题可以加我的联系方法:2415714416。有需要毕设或是期末作业,我会满足您的需求的

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值