简体   繁体   English

CSS从右向左扩展宽度

[英]CSS expand width from right to left

I need to build an effect like jQuery's accordion. 我需要建立一种类似jQuery手风琴的效果。 I have 10 items that fill the screen; 屏幕上有10个项目; when the mouse hovers over an item, it expands in width. 当鼠标悬停在某个项目上时,它的宽度会扩大。 How I can make it expand from right to left for the last 5 items? 如何使最后5个项目从右向左扩展?

My HTML : 我的HTML:

<div class="wrap">
    <div style="width: 165.25px; background: rgb(228, 228, 230);" class="item"></div>
    <div style="width: 165.25px; background: rgb(35, 123, 192);" class="item"></div>
    <div style="width: 165.25px; background: rgb(20, 4, 4);" class="item"></div>
    <div style="width: 165.25px; background: rgb(182, 159, 36);" class="item"></div>
    <div style="width: 165.25px; background: rgb(162, 169, 180);" class="item"></div>
    <div style="width: 161px; background: rgb(37, 29, 4);" class="item"></div>
    <div style="width: 161px; background: red;" class="item"></div>
    <div style="width: 161px; background: rgb(88, 45, 45);" class="item"></div>
    <div style="width: 161px; background: rgb(202, 41, 176);" class="item"></div>
    <div style="width: 161px; background: rgb(24, 207, 185);" class="item"></div>
</div>

This is my css: 这是我的CSS:

.wrap{
    width:100%;
    float:left;
    height: 300px;
    overflow: hidden;
}

.item {
    float:left;
    height: 100%;
    display: block;
}

jQuery code: jQuery代码:

$('.item').each(function(e){
    $(this).css('width', ($(this).parent().width()/10));
});

$('.item').on('mouseenter', function(event) {
    $(this).stop().animate({width: "50%"}, {duration: 500});
}).on('mouseleave', function(event) {
    $(this).stop().animate({width: ($(this).parent().width()/10)}, {duration: 500});
});

jsFiddle link jsFiddle链接

Thanks. 谢谢。

You need to add another wrapper div inside with a big width which makes sure that your floating elements don't wrap to the next line. 您需要在内部添加另一个具有较大宽度的wrapper div,以确保浮动元素不会换行到下一行。 Then, scroll the outer wrapping div to the correct position when the hovered element is #5 or higher: 然后,当悬停的元素为#5或更高版本时,将外部包装div滚动到正确的位置:

$('.item').on('mouseenter', function(event) {
    //Animate width
    $(this).stop().animate({width: $(this).parent().parent().width()/2}, {duration: 500});
    if($(this).index() >= 5){
        //Animate scrollLeft
        var marginLeft = $(this).parent().parent().width() / 10 * 4;
        $(this).parent().parent().stop().animate({scrollLeft: marginLeft + 'px'}, {duration: 500});
    }
}).on('mouseleave', function(event) {
    //Animate width
    $(this).stop().animate({width: ($(this).parent().parent().width()/10)}, {duration: 500});
    //Animate scrollLeft
    $(this).parent().parent().stop().animate({scrollLeft: 0}, {duration: 500});
});

You can see it working here: jsFiddle link 您可以在这里看到它的工作原理jsFiddle链接

The idea is to reduce width of other items during increasing width of hovered element. 这个想法是在增加悬停元素的宽度时减少其他项目的宽度。

JSFiddle . JSFiddle

var items = $('.item');
var itemsCount = items.length;
var fullWidth = $('.item:first').parent().width();

items.each(function()
{
    $(this).css('width', fullWidth / itemsCount);
});

items.on('mouseenter', function()
{
    items.not(this).stop().animate({ width: fullWidth / itemsCount / 2 }, 500);
    $(this).stop().animate({ width: "50%" }, 500 );
});

items.on('mouseleave', function()
{
    items.stop().animate({ width: fullWidth / itemsCount }, 500);
});

There is one weird thing: due to fullWidth / itemsCount / 2 instead of correct fullWidth / (itemsCount - 1) / 2 there is empty place on right border of accordion, but with fullWidth / (itemsCount - 1) / 2 last element sometimes disappeares from screen. 有一件奇怪的事情:由于fullWidth / itemsCount / 2而不是正确的fullWidth / (itemsCount - 1) / 2在手风琴的右边框上有一个空的位置,但是带有fullWidth / (itemsCount - 1) / 2最后一个元素有时会消失从屏幕上。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM