【问题标题】:grid/list toggle view with Bootstrap 4 Cards使用 Bootstrap 4 Cards 的网格/列表切换视图
【发布时间】:2018-10-08 23:35:51
【问题描述】:

我想使用 bootstrap 4 卡创建一个网格/列表视图。

<div class="well well-sm">
    <strong>Display:</strong>
    <div class="btn-group">
        <a href="#" id="list" class="btn btn-default btn-sm"><span class="fas fa-list-ul"></span>List</a> 
        <a href="#" id="grid" class="btn btn-default btn-sm"><span class="fas fa-th-large"></span>Grid</a>
    </div>
</div>

jquery:

$('#list').click(function(event){
  event.preventDefault();
  $('.card-deck').addClass('list-group-item');
  $('.card-deck').removeClass('grid-group-item');
  $(this).addClass('active');
  $('#grid').removeClass('active');
});

$('#grid').click(function(event){
  event.preventDefault();
  $('.card-deck').removeClass('list-group-item');
  $('#list').removeClass('active');
  $(this).addClass('active');
  $('.card-deck').addClass('grid-group-item');

});

我有另一个帖子的代码:Bootstrap 4 card/panel with image left of header and title

<div class="card">
    <div class="row no-gutters">
        <div class="col-auto">
            <img src="//placehold.it/200" class="img-fluid" alt="">
        </div>
        <div class="col">
            <div class="card-block px-2">
                <h4 class="card-title">Title</h4>
                <p class="card-text">Description</p>
                <a href="#" class="btn btn-primary">BUTTON</a>
            </div>
        </div>
    </div>
    <div class="card-footer w-100 text-muted">

    </div>
</div>

但我想要的是,当单击网格时,视图会变为堆叠的卡片块,如下所示:

<div class="card-deck>
    <div class="card" style="width: 18rem;">
        <img class="card-img-top" src="..." alt="Card image cap">
        <div class="card-body">
            <h5 class="card-title">Card title</h5>
            <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
            <a href="#" class="btn btn-primary">Go somewhere</a>
        </div>
    </div>
</div>

如何做到这一点? 它与 bootstrap 4 一起使用很重要。

感谢您的帮助。

纳比

【问题讨论】:

    标签: jquery css bootstrap-4


    【解决方案1】:

    首先,我会为您的每个容器添加一个id,例如类或 id 'grid-view' 和 'list-view':

    <div class="card" id="grid-view">
        <div class="row no-gutters">
            <div class="col-auto">
                <img src="//placehold.it/200" class="img-fluid" alt="">
            </div>
            <div class="col">
                <div class="card-block px-2">
                    <h4 class="card-title">Title</h4>
                    <p class="card-text">Description</p>
                    <a href="#" class="btn btn-primary">BUTTON</a>
                </div>
            </div>
        </div>
        <div class="card-footer w-100 text-muted">
    
        </div>
    </div>
    

    和

    <div class="card-deck" id="list-view">
        <div class="card" style="width: 18rem;">
            <img class="card-img-top" src="..." alt="Card image cap">
            <div class="card-body">
                <h5 class="card-title">Card title</h5>
                <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
                <a href="#" class="btn btn-primary">Go somewhere</a>
            </div>
        </div>
    </div>
    

    然后我会在Js文件中使用hide()和show()函数:

    $('#list').click(function(event){
        ...
        $('#grid-view').hide();
        $('#list-view').show();
    });
    
    $('#grid').click(function(event){
       ...
        $('#grid-view').show();
        $('#list-view').hide();
    });
    

    确保在页面初始化时隐藏其中一个视图。

    【讨论】:

    • 您好,感谢您的回复。我有 200 多个产品要显示,添加 2 个 div 视图会给页面增加很多重量,有没有办法通过更改 css 和添加类来做到这一点?
    • @NabiArshad 我真的不知道该如何回答。就个人而言(并且因为我没有答案:))我更喜欢花时间首先加载所有内容。这是一个选择。但是想一想,如果您只想在单击时加载相应的 html,则意味着您必须在每次单击时重新加载 html,这也可能会花费时间和重量。
    • 是的,我明白你的意思,但肯定还有像这里这样的另一种方式:codepen.io/bootstrapped/pen/RRBdbm。但是用 bs4 卡?
    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多