3

所以我有一个 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;
}
4

5 回答 5

5

恐怕我无法在您的示例代码和图像中解决您想要单击的内容以及您想要显示的内容。但是,以下内容适用于onclick纯 CSS 的 -like 事件:

<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;
}

​<a href="http://jsfiddle.net/davidThomas/Nyq8u/" rel="noreferrer">JS Fiddle 演示。

不幸的是,似乎(在 Chromium 17/Ubuntu 11.04 中)不可能从到动画。display: none;类似display: block;地,从到的转换height: 0也会height: 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;
}

​<a href="http://jsfiddle.net/davidThomas/Nyq8u/1/" rel="noreferrer">JS Fiddle 演示。

于 2012-04-12T17:59:14.613 回答
3

您可以使用“复选框黑客”:http ://css-tricks.com/the-checkbox-hack/

于 2012-04-12T16:21:30.493 回答
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 就可以打开它。

于 2012-04-12T17:03:11.643 回答
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 > .trans)。

于 2012-04-12T17:52:44.090 回答
-1

这不能用纯 CSS 来实现,尝试使用 JavaScript 或 jQuery

示例使您关闭,但单击后它不会保持活动状态。

于 2012-04-12T16:32:59.160 回答