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



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

怕我无法在您的示例代码和图像中弄清楚您想要单击的内容以及要显示的内容。但是,以下内容适用于具有纯 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小提琴演示。

不幸的是,似乎(在 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小提琴演示。

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

对代码进行这些修改将给你一个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;
    }

这将为您提供鼠标输入/鼠标离开类型效果。 我认为您无法仅使用CSS进行"点击"类型的效果。

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

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

然后在 css 中,您需要应用具有新大小和转换的类:

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

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

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

此示例可让您接近,但单击后它不会保持活动状态。

相关内容

  • 没有找到相关文章

最新更新