单击HTML展开框

HTML expanding boxes on click

本文关键字:HTML 单击      更新时间:2023-09-26

我想创建三个带有短文本的框,当你点击其中一个框时,它会扩展到页面的整个宽度并显示整个内容。然后可以通过点击某种图标来关闭它。

我创建了一个gif,这样你就可以明白我的意思了。GIF

到目前为止,我已经掌握了jsfiddle 的基本结构

当你点击一个框时,它每次都会打开框3的内容,而不是点击框的内容。此外,我不知道如何关闭打开的盒子。

你在gif中看到的动画可以用css吗?还是需要javascriptl?

$(".row.boxes-container .box").click(function (e) {
        $(".box-content-full").addClass("open");
    });

.row.boxes-container{
    position:relative;   
}
.box:hover{
    cursor:pointer;   
}
.box-content{
    padding:30px;
    background-color:#f03939;
}
.box-content-full{
    display:none;   
    width:0%;
    transition: width 1s;
}
.box-content-full.open {
    position: absolute;
    max-width: 100%;
    width: 100%;
    z-index: 2;
    display:block;
    transition: width 1s;
}
.box-content-full.open .inner{
    padding:30px;
    margin-left:15px;
    margin-right:15px;
    background-color: red;
}

<div class="container">
        <div class="row boxes-container">
            <div class="box first">
                <div class="box-content-full">
                    <div class="inner">
                        <div class="inner-header">
                            <span class="close">x</span>
                        </div>
                        <h3>Box 1</h3>
                        <p>Lorem ipsum dolem filum</p>
                    </div>
                </div>
                <div class="col-md-4">
                    <div class="box-content">
                        <h3>Box 1</h3>
                    </div>
                </div>
            </div>
            <div class="box second">
                <div class="box-content-full">
                    <div class="inner">
                        <div class="inner-header">
                            <span class="close">x</span>
                        </div>
                        <h3>Box 2</h3>
                        <p>Lorem ipsum dolem filum</p>
                    </div>
                </div>
                <div class="col-md-4">
                    <div class="box-content">
                        <h3>Box 2</h3>
                    </div>
                </div>
            </div>
            <div class="box third">
                <div class="box-content-full">
                    <div class="inner">
                        <div class="inner-header">
                            <span class="close">x</span>
                        </div>
                        <h3>Box 3</h3>
                        <p>Lorem ipsum dolem filum</p>
                    </div>
                </div>
                <div class="col-md-4">
                    <div class="box-content">
                        <h3>Box 3</h3>
                    </div>
                </div>
            </div>
        </div>
    </div>

我没有使用你的html代码,但试图获得尽可能接近你的gif:的结果

$('.box').on('click', function() {
    var $element = $(this);
    
    var $openElement = $('<div class="absoluteBox"></div>');
    
    $openElement.css('left', $element.position().left);
    $openElement.css('right', $element.width());
        
    $element.html($openElement);
    
    $openElement.animate({left : 0, width : $('.wrapper').width()}, 500);
   
});
.wrapper {
    position:relative;
    display:inline-block;
}
.box {
    background-color:#CC0000;
    width:150px;
    height:200px;
    display:inline-block;
    margin-right:10px;
 }
.box:last-of-type {
    margin-right:0;
}
.absoluteBox {
    position:absolute;
    background-color:blue;
    height:200px;
    width:150px;
}
.box:hover {
    background-color:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="wrapper">
    <div class="box"></div>
    <div class="box">
    </div>
    <div class="box"></div>
</div>

我把打开的盒子改成蓝色,以便更好地引起注意。当然,这必须通过css更改为红色。

更新了你的小提琴:

第2版:
现在,当您单击该框时,它应该会重置。

第页。S.单击第二个框以获得效果
P.P.S.由于页面在JSFiddle中自动收缩,因此效果显示不正确。尽管如此,如果你在其他地方尝试,但它不起作用,那就认为我错了!

编辑:
已更新答案以展开单击的元素。

https://jsfiddle.net/bszv7f90/9/

$(".row.boxes-container .box").click(function(e) {
  $(this).children().each(function(i) {
    if ($(this).attr('class') == 'box-content-full') {
      $(this).toggleClass("exp");
    }
  });
  $(".box-content-full").toggleClass("open");
  $(".box-content").toggleClass("clicked");
});
.container {
  max-width: 600px;
}
.row.boxes-container {
  position: relative;
}
.box:hover {
  cursor: pointer;
}
.box-content {
  padding: 30px;
  background-color: #f03939;
}
.box-content-full {
  display: none;
  width: 0%;
  transition: width 1s;
}
.box-content {
  padding: 30px;
  background-color: #f03939;
}
.box-content.clicked {
  display: none;
}
.box-content-full.open {
  position: absolute;
  max-width: 0%;
  width: 0%;
  z-index: 2;
  display: none;
  transition: width 1s;
}
.box-content-full.open.exp {
  position: absolute;
  max-width: 100%;
  width: 100%;
  z-index: 2;
  display: block;
  transition: width 1s;
}
.box-content-full.open .inner {
  padding: 30px;
  margin-left: 15px;
  margin-right: 15px;
  background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <div class="row boxes-container">
    <div class="box first">
      <div class="box-content-full">
        <div class="inner">
          <div class="inner-header">
            <span class="close">x</span>
          </div>
          <h3>Box 1</h3>
          <p>Lorem ipsum dolem filum</p>
        </div>
      </div>
      <div class="col-md-4">
        <div class="box-content">
          <h3>Box 1</h3>
        </div>
      </div>
    </div>
    <div class="box second">
      <div class="box-content-full">
        <div class="inner">
          <div class="inner-header">
            <span class="close">x</span>
          </div>
          <h3>Box 2</h3>
          <p>Lorem ipsum dolem filum</p>
        </div>
      </div>
      <div class="col-md-4">
        <div class="box-content">
          <h3>Box 2</h3>
        </div>
      </div>
    </div>
    <div class="box third">
      <div class="box-content-full">
        <div class="inner">
          <div class="inner-header">
            <span class="close">x</span>
          </div>
          <h3>Box 3</h3>
          <p>Lorem ipsum dolem filum</p>
        </div>
      </div>
      <div class="col-md-4">
        <div class="box-content">
          <h3>Box 3</h3>
        </div>
      </div>
    </div>
  </div>
</div>

现在它应该扩大了。我保留了你的代码,以便快速复制粘贴。