纯css实现点击切换

最近浏览到一款相当震撼我的css,仅仅使用css,就能做出动态点击切换卡片的效果。

html源码

<div class="card">
  <input type="radio" name="select" id="slide_1" checked>
  <input type="radio" name="select" id="slide_2">
  <input type="radio" name="select" id="slide_3">
  <input type="checkbox" id="slideImg">

  <div class="slider">
    <label for="slide_1" class="slide slide_1"></label>
    <label for="slide_2" class="slide slide_2"></label>
    <label for="slide_3" class="slide slide_3"></label>
  </div>

  <div class="inner_part">
    <label for="slideImg" class="img">
      <img class="img_1" src="https://c4.wallpaperflare.com/wallpaper/978/131/617/kiz-kulesi-turkey-istanbul-maiden-s-tower-wallpaper-preview.jpg">
    </label>
    <div class="content content_1">
      <div class="title">İstanbul</div>
      <div class="text">
        Istanbul, a fascinating city built on two Continents, divided by the Bosphorus Strait. This is one of the greatest cities in the world.
      </div>
      <button>Read More</button>
    </div>
  </div>

  <div class="inner_part">
    <label for="slideImg" class="img">
      <img class="img_2" src="https://c4.wallpaperflare.com/wallpaper/649/96/56/ankara-cityscape-night-night-sky-wallpaper-preview.jpg">
    </label>
    <div class="content content_2">
      <div class="title">Ankara</div>
      <div class="text">
        Ankara is Turkey's beating heart, second largest city, located in the Central Anatolia region and home to the Grand National Assembly of Turkey.
      </div>
      <button>Read More</button>
    </div>
  </div>

  <div class="inner_part">
    <label for="slideImg" class="img">
      <img class="img_3" src="https://c4.wallpaperflare.com/wallpaper/620/34/558/turkey-izmir-mountains-wallpaper-preview.jpg">
    </label>
    <div class="content content_3">
      <div class="title">İzmir</div>
      <div class="text">Located on the shores of the Aegean Sea, west of the Anatolian Peninsula, İzmir is the third-largest city in Turkey.
      </div>
      <button>Read More</button>
    </div>
  </div>
</div>

 css源码

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

html, body {
  height: 100vh;
  font-family: 'Open Sans', sans-serif;
  background-color: #666666;
}

body {
  display: flex;
  align-items: center;
  justify-content: center;
}

.card {
  position: absolute;
  height: 350px;
  width: 100%;
  max-width: 850px;
  margin: auto;
  background-color: #ffffff;
  border-radius: 25px;
  box-shadow: 10px 0 50px rgba(0, 0, 0, 0.5);
}

.card .inner_part {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 0 0 30px;
  height: 350px;
  position: absolute;
}

#slideImg:checked ~ .inner_part {
  padding: 0;
  transition: .1s ease-in;
}

.inner_part .img {
  height: 260px;
  width: 260px;
  overflow: hidden;
  flex-shrink: 0;
  border-radius: 20px;
  box-shadow: 0 10px 50px rgba(0,0,0,0.2);
}

#slideImg:checked ~ .inner_part .img {
 height: 350px;
 width: 850px;
 z-index: 99;
 transition: .3s .2s ease-in;
}

.img img {
  height: 100%;
  width: 100%;
  cursor: pointer;
  opacity: 0;
  transition: .6s;
}

#slide_1:checked ~ .inner_part .img_1,
#slide_2:checked ~ .inner_part .img_2,
#slide_3:checked ~ .inner_part .img_3 {
  opacity: 1;
  transition-delay: .2s;
}

.content {
  padding: 0 20px 0 35px;
  width: 530px;
  margin-left: 50px;
  opacity: 0;
  transition: .6s; 
}

#slideImg:checked ~ .inner_part .content {
  display: none;
}

#slide_1:checked ~ .inner_part .content_1,
#slide_2:checked ~ .inner_part .content_2,
#slide_3:checked ~ .inner_part .content_3 {
  opacity: 1;
  margin-left: 0;
  z-index: 100;
  transition-delay: .3s;
}

.content .title {
  font-size: 30px;
  font-weight: 700;
  color: #0d0925;
  margin: 0 0 20px 0;
}

.content .text {
  font-size: 19px;
  color: #4e4a67;
  margin: 0 auto 30px auto;
  line-height: 1.5em;
  text-align: justify;
}

.content button {
  padding: 15px 20px;
  border: none;
  font-size: 16px;
  color: #fff0e6;
  font-weight: 600;
  letter-spacing: 1px;
  border-radius: 50px;
  cursor: pointer;
  outline: none;
  background: #000000;
  float: right;
}

.content button:hover {
  background: #cecece;
  color: #000000;
}

.slider {
  position: absolute;
  bottom: 25px;
  left: 55%;
  transform: translateX(-50%);
  z-index: 1;
}

#slideImg:checked ~ .slider {
  display: none;
}

.slider .slide {
  position: relative;
  height: 10px;
  width: 50px;
  background: #d9d9d9;
  border-radius: 5px;
  display: inline-flex;
  margin: 0 3px;
  cursor: pointer;
}


.slider .slide:before {
  position: absolute;
  content: '';
  top: 0;
  left: 0;
  height: 100%;
  width: -100%;
  background: #000000;;
  border-radius: 10px;
  transform: scaleX(0);
  transition: transform .6s;
  transform-origin: left;
}

#slide_1:checked ~ .slider .slide_1:before,
#slide_2:checked ~ .slider .slide_2:before,
#slide_3:checked ~ .slider .slide_3:before {
  transform: scaleX(1);
  width: 100%;
}

input {
  display: none;
}

在研究了一小会后,发现了里面的秘密。这是我尝试的简约版本

 

 

主要实现手段

1:使用单选框完成三张图片的切换(比较好理解)

2:使用position使三张卡片重叠

3:在未点击时,透明的为0;

4:点击后通过兄弟元素~使后面card内的卡片显示 (css中有注释)

5:后续可通过label实现其他动画

    <style>

        #card {
            width: 800px;
            height: 300px;
            box-shadow: 2px 3px rgba(0, 0, 0, 0.137);
            position: relative;
        }

        .inner_part {
            width: 800px;
            height: 300px;
            position: absolute;//使用position使三张卡片重叠
        }


        #c1,
        #c2,
        #c3 {
            opacity: 0;
            width: 250px;
            height: 250px;
            margin: 25px;
            border-radius: 10px;
            overflow: hidden;

            float: left;

        }

        img {
            height: 100%;
            width: 100%;
            cursor: pointer;
        }

        .content {
            width: 440px;
            height: 250px;
            opacity: 0;//在未点击时,透明的为0;
            float: left;
            margin: 25px;
        }
        #slider{
            position: absolute;
            z-index: 99;
            right: 25px;
            bottom: 25px;
        }

        #c1 {
            background-color: rgb(0, 47, 167);
        }

        #c2 {
            background-color: rgb(255, 0, 0);
        }

        #c3 {
            background-color: rgb(179, 255, 0);
        }

        #test1:checked~#card .inner_part #c1,
        #test2:checked~#card .inner_part #c2,
        #test3:checked~#card .inner_part #c3 {//点击后通过兄弟元素~使后面card内的卡片显示
            opacity: 1;
        }

        #test1:checked~#card .inner_part #content1,
        #test2:checked~#card .inner_part #content2,
        #test3:checked~#card .inner_part #content3 {
            opacity: 1;
        }

       
    </style>
</head>

<body>
    <input type="radio" value="t1" name="t1" id="test1" checked>
    <input type="radio" value="t2" name="t1" id="test2">
    <input type="radio" value="t3" name="t1" id="test3">
    <div id="card">


        <div class="inner_part">

            <div id="c1">
                <img src="https://c4.wallpaperflare.com/wallpaper/978/131/617/kiz-kulesi-turkey-istanbul-maiden-s-tower-wallpaper-preview.jpg"
                    alt="">
            </div>
            <div class="content " id="content1">
                测试1
            </div>

        </div>
        <div class="inner_part">

            <div id="c2">
                <img src="https://c4.wallpaperflare.com/wallpaper/649/96/56/ankara-cityscape-night-night-sky-wallpaper-preview.jpg"
                    alt="">
            </div>
            <div class="content " id="content2">
                测试2
            </div>

        </div>
        <div class="inner_part">

            <div id="c3">
                <img src="https://c4.wallpaperflare.com/wallpaper/620/34/558/turkey-izmir-mountains-wallpaper-preview.jpg"
                    alt="">
            </div>
            <div class="content " id="content3">
                测试3
            </div>
        </div>
      

    </div>


</body>

大三迷茫网工学生一枚,如果觉得该文章对您有用,不要忘记点赞哦~

  • 14
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 你可以使用CSS3的transform属性中的rotate()方法来实现图片旋转。同时,通过JavaScript为按钮添加点击事件,当点击按钮时,改变图片的旋转角度即可。 HTML代码: ``` <button id="rotateBtn">点击旋转</button> <img id="image" src="your_image_path" alt="your_image_description"> ``` CSS代码: ``` #image { transition: transform 0.5s ease; } .rotate { transform: rotate(180deg); } ``` JavaScript代码: ``` const rotateBtn = document.getElementById('rotateBtn'); const image = document.getElementById('image'); rotateBtn.addEventListener('click', () => { image.classList.toggle('rotate'); }); ``` 以上代码中,我们为按钮和图片分别设置了id,然后在JavaScript中获取对应的元素。通过addEventListener()方法为按钮添加点击事件,当点击按钮时,调用toggle()方法切换图片的rotate类。CSS中定义的rotate类会将图片旋转180度。同时,我们也为图片添加了transition动画,使旋转效果更加平滑。 ### 回答2: 在HTML中,我们可以通过CSS和JavaScript来实现点击按钮旋转图片的效果。 首先,我们需要在HTML中创建一个按钮和一个图片元素,如下所示: ```html <button id="rotate-btn">点击旋转</button> <img id="img" src="图片路径" alt="图片"> ``` 接下来,我们可以使用CSS来设置图片的初始样式和旋转效果。在CSS中,我们可以使用`transform`属性来实现旋转效果。例如,我们可以为图片添加一个初始旋转角度为0度的样式: ```css #img { transform: rotate(0deg); transition: transform 0.5s ease; // 添加过渡效果,使旋转平滑 } ``` 然后,在JavaScript中,我们可以使用事件监听器来捕捉按钮的点击事件,并在该事件中改变图片的旋转角度。例如,我们可以使用`addEventListener`方法来为按钮添加一个点击事件监听器,并在该事件中更新图片的旋转角度: ```javascript const btn = document.getElementById("rotate-btn"); const img = document.getElementById("img"); let rotation = 0; // 初始旋转角度为0度 btn.addEventListener("click", function() { rotation += 90; // 每次点击旋转90度 img.style.transform = `rotate(${rotation}deg)`; // 更新图片的旋转角度 }); ``` 这样,当我们点击按钮时,图片就会按照每次90度的角度进行旋转。可以根据需求调整旋转角度和过渡效果的时间。 ### 回答3: 在HTML中,可以使用CSS的transform属性来实现点击按钮图片旋转效果。首先,在HTML中创建一个按钮元素和一个图片元素,分别用于触发旋转和展示图片。例如: ```html <button onclick="rotateImage()">点击旋转</button> <img id="image" src="图片路径" alt="图片" width="200"> ``` 然后,在JavaScript中编写旋转函数`rotateImage()`,通过修改CSS的transform属性来实现旋转效果。可以使用`setInterval()`函数来控制旋转的速度和角度。例如: ```javascript function rotateImage() { var image = document.getElementById("image"); var angle = 0; var id = setInterval(frame, 10); function frame() { if (angle == 360) { clearInterval(id); } else { angle++; image.style.transform = "rotate(" + angle + "deg)"; } } } ``` 在函数中,首先获取图片元素和旋转角度变量。然后,使用`setInterval()`函数设置一个定时器,每10毫秒调用一次`frame()`函数。在`frame()`函数中,如果旋转角度达到360度,则清除定时器,否则每次增加1度,同时通过修改`transform`属性的值来实现图片的旋转效果。 最后,将图片的路径替换为实际图片路径,并在CSS中设置合适的样式,如宽度、高度等。 这样,当点击按钮时,图片将开始旋转,直到旋转角度达到360度为止。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值