如何切换div以使用CSS显示内容

时间:2012-04-12 16:19:24

标签: css html hide toggle css-transitions

所以我有一个div应该扩展以显示切换时的列表。可以在这里查看之前和之后的状态http://reversl.net/box/,但是为了实现这一点,我还需要添加哪些样式?我想使用css过渡来增加效果。我并不担心浏览器兼容性,因为它仅用于学习目的。有什么提示吗?

<div class="box"><img src="http://www.placehold.it/250x300" alt="" />
        <div class="section progress">
            <h4>
                <a href="#">Div Before</a>
            </h4>
            <div class="metrics">
                <div class="meter">
                    <span style="width: 75%"></span>
                </div><!--.meter-->
            </div><!--.metrics-->
        </div><!--.section-progress-->
</div><!--.box-->

<div class="box"><img src="http://www.placehold.it/250x300" alt="" />
        <div class="section progress">
            <h4>
                <a href="#">Div After</a>
            </h4>
            <div class="metrics">
                <div class="meter">
                    <span style="width: 75%"></span>
                </div><!--.meter-->
            </div><!--.metrics-->
        </div><!--.section-progress-->
        <div class="sub_section">
            <ul class="list">
                <li>Item 1</li>
                <li class="last">Item 2</li>
            </ul>
        </div><!--.sub_section-->
</div><!--.box-->

.boxes {
width: 100%;
padding: 1%;
}

.box {
width: 20%;
padding: 1%;
background: #fff;
-moz-box-shadow: 2px 3px 4px 0px #e9e9e9;
-webkit-box-shadow: 2px 3px 4px 0px #e9e9e9;
box-shadow: 2px 3px 3px 0px #e9e9e9;
display: inline-block;
margin-top: 1em;
}

.box img {
margin-bottom: 1%;
}

.progress a {
margin: 0;
padding: 0;
color: #999;
text-decoration: none;
}

.metrics {
margin: -1em 0 0 0;
padding: 0;
background: #c0c0c0;

}
.accordion .progress .meter {
background: #555;
width: 100%;
position: relative;
}

.meter > span {
height: 10px;
display: block;
background-color: #777;
position: relative;
overflow: hidden;
}

.sub_section {
margin-top: 1em;
border-bottom: none;
}

.list {
padding: 0;
margin: 0;
}

.list li {
background: #dcdcdc url('http://placehold.it/40x40') no-repeat;
font-size: 11px;
color: #999;
list-style: none;
padding: 1.3em 1em 1.3em 4.5em;
margin-bottom: 5px;
}

.list .last {
border-bottom: none;
}

5 个答案:

答案 0 :(得分:5)

我担心我无法解决您的示例代码和图片,您想要点击的内容以及您想要展示的内容。但是,以下内容适用于具有纯CSS的onclick - 类似事件:

<div id="wrapper">
    <ul id="top">
        <li><a href="#one">One</a></li>
        <li><a href="#two">Two</a></li>
    </ul>
    <div class="box" id="one">
        <p>One</p>
        <span><a href="#top">Close</a></span>
    </div>
    <div class="box" id="two">
        <p>Two</p>
        <span><a href="#top">Close</a></span>
    </div>
</div>

CSS:

.box {
    position: absolute;
    top: 20%;
    left: 50%;
    width: 50%;
    margin-left: -25%;
    border: 4px solid #000;
    background-color: #f90;
    /* the CSS, above, is all for aesthetic purposes, what matters is the following */
    opacity: 0;
    -webkit-transition: all 1s linear;
    -ms-transition: all 1s linear;
    -moz-transition: all 1s linear;
    -0-transition: all 1s linear;
    transition: all 1s linear;
}

.box:target {
    opacity: 1;
    -webkit-transition: all 1s linear;
    -ms-transition: all 1s linear;
    -moz-transition: all 1s linear;
    -0-transition: all 1s linear;
    transition: all 1s linear;
}

JS Fiddle demo

不幸的是,似乎(在Chromium 17 / Ubuntu 11.04中)无法从display: none;动画到display: block;同样,从height: 0height: auto的过渡也会失败(尝试任何一个结果突然出现而不是转换。所以演示中的内容总是“存在”,但只是隐藏(带有不透明度),然后在点击相关链接后显示。

但是对于像幻灯片一样的效果:

.box {
    /* aesthetic stuff excised for brevity */
    opacity: 0;
    height: 0;
    overflow: hidden;
    -webkit-transition: all 1s linear;
    -ms-transition: all 1s linear;
    -moz-transition: all 1s linear;
    -0-transition: all 1s linear;
    transition: all 1s linear;
}

.box:target {
    opacity: 1;
    height: 3em;
    -webkit-transition: all 1s linear;
    -ms-transition: all 1s linear;
    -moz-transition: all 1s linear;
    -0-transition: all 1s linear;
    transition: all 1s linear;
}

JS Fiddle demo

答案 1 :(得分:3)

您可以使用“Checkbox Hack”:http://css-tricks.com/the-checkbox-hack/

答案 2 :(得分:2)

对代码进行这些修改将为您提供CSS转换。

<div class="box">内,在内容周围添加一个容器<div class="trans">,如下所示:

<div class="box">
  <div class="trans">
    <img src="http://www.placehold.it/250x300" alt="" />
        <div class="section progress">
            <h4>
                <a href="#">Div After</a>
            </h4>
            <div class="metrics">
                <div class="meter">
                    <span style="width: 75%"></span>
                </div><!--.meter-->
            </div><!--.metrics-->
        </div><!--.section-progress-->
        <div class="sub_section">
            <ul class="list">
                <li>Item 1</li>
                <li class="last">Item 2</li>
            </ul>
        </div><!--.sub_section-->
    </div><!--.trans-->
</div><!--.box-->

然后,在你的CSS中,添加:

.box > .trans {
    height:365px;
    overflow:hidden;
    }

.box > .trans:hover{
    height: 500px;
    -webkit-transition: height .25s linear;
    transition: height .25s linear;
    }

这将为您提供mouseenter / mouseleave类型效果。我不认为你能够做一个“onclick”类型的效果,只用CSS就可以打开它。

答案 3 :(得分:1)

除非您希望在悬停时应用,否则您将需要使用javascript来侦听触发转换的事件。所以,你可以从这样的事情开始:

$('.box').click(function(){
    $(this).toggleClass('show');
});

然后在css中,您需要使用新大小的类并应用转换:

.show
{
height: 300px;
-webkit-transition: height .25s ease-in-out;
transition: height .25s linear;
}

如果你想要一个纯粹的CSS解决方案,那么你必须使用像redlena这样的':hover'伪类来处理这个问题。我唯一的区别是你不需要额外的div(.trans),你也不需要在CSS中指定子选择器(.box&gt; .trans)。

答案 4 :(得分:-1)

使用纯JavaScript,尝试使用JavaScript或jQuery

无法实现

example会让您关闭,但点击后它不会保持活动状态。