最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Shrink div elements while adding new ones - Stack Overflow

programmeradmin10浏览0评论

I'll try to explain it as best as I can. I want to apply this principle to my own.

Tab Add Example

As you can see I'm adding 'tabs' to tab bar. When I add enough tabs to fill the whole tab bar, and I keep adding more, those tabs basically resize to fit the div. I don't want them to expand the div or to use the scroll bar to move among them. I want them to shrink within the div. You can see the exact example on the GIF I linked.

It should also behave the same on window resize.

Window Resize Example

Do you have any ideas on how to achieve this? I tried with JQuery but it was too much 'hard coding', it wouldn't work on resize, nor different screen resolutions.

HTML I want to apply:

<div class="l_tabs">
 <div>
  <ul id="myTab1" class="nav nav-tabs bordered">
   <li class="tab-add"></li>
   <li class="contentTab"></li>
   <li class="contentTab"></li>
   <li class="contentTab"></li>
   <li class="contentTab"></li>
  </ul>
 </div>
</div>

When I add new tab it adds this
<li class="contentTab"></li>

JSFiddle

Any suggestions?

I'll try to explain it as best as I can. I want to apply this principle to my own.

Tab Add Example

As you can see I'm adding 'tabs' to tab bar. When I add enough tabs to fill the whole tab bar, and I keep adding more, those tabs basically resize to fit the div. I don't want them to expand the div or to use the scroll bar to move among them. I want them to shrink within the div. You can see the exact example on the GIF I linked.

It should also behave the same on window resize.

Window Resize Example

Do you have any ideas on how to achieve this? I tried with JQuery but it was too much 'hard coding', it wouldn't work on resize, nor different screen resolutions.

HTML I want to apply:

<div class="l_tabs">
 <div>
  <ul id="myTab1" class="nav nav-tabs bordered">
   <li class="tab-add"></li>
   <li class="contentTab"></li>
   <li class="contentTab"></li>
   <li class="contentTab"></li>
   <li class="contentTab"></li>
  </ul>
 </div>
</div>

When I add new tab it adds this
<li class="contentTab"></li>

JSFiddle

Any suggestions?

Share Improve this question edited Aug 26, 2016 at 8:22 Dino asked Aug 26, 2016 at 8:11 DinoDino 8,29213 gold badges48 silver badges92 bronze badges
Add a ment  | 

4 Answers 4

Reset to default 15

You can do this with Flexbox, you just need to set flex-basis

$(".add").click(function() {
  $(".tabs").append('<li class="tab">Lorem ipsum</li>');
})

$('.remove').click(function() {
  $('.tab').last().remove();
})
.tabs {
  display: flex;
  list-style: none;
  padding: 0;
}
.tab {
  border: 1px solid black;
  flex-basis: 200px;
  text-align: center;
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="tabs">
  <li class="tab">Lorem ipsum</li>
</ul>

<button class="add">Add Tab</button>
<button class="remove">Remove Tab</button>

You can use display: table and display: table-cell for this:

$("#add").click(function() {
  $("<li>", { "class": "tab", "text": "Lorem ipsum" }).appendTo(".tabs");
});

$("#del").click(function() {
  $(".tab").last().remove();
});
.tabs {
  display: table;
  border-collapse: collapse;
  padding: 0;
}
.tab {
  display: table-cell;
  width: 200px;
  border: 1px solid black;
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul class="tabs">
  <li class="tab">Lorem ipsum</li>
</ul>

<button id="add">Add Tab</button>
<button id="del">Remove Tab</button>

$('.tab-add').click(function() {
  $('.tab-add').html('+');
  var lastCount = $('#myTab1 li:last-child').html();
  var plusOne = parseInt(lastCount) + 1;
  $('#myTab1').append('<li class="contentTab">' + plusOne + '</li>');
});
* {
  margin: 0; padding: 0;
}
.l_tabs {
  width: 100%;
  background-color: red;
}
#myTab1 {
  display: flex;
  list-style-type: none;
}
#myTab1 li {
  display: flex; 
  justify-content: center;
  flex: 1;
  line-height: 50px;
  color: white;
  background-color: hsla(0, 0%, 20%, 1);
}
#myTab1 li:nth-child(even) {
  background-color: hsla(0, 0%, 40%, 1);
}
.tab-add:hover {
  background-color: hsl(0, 55%, 55%)!important;
  cursor: pointer;
}
<script src="https://ajax.googleapis./ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="l_tabs">
 <div>
  <ul id="myTab1" class="nav nav-tabs bordered">
   <li class="tab-add">click to add</li>
   <li class="contentTab">1</li>
   <li class="contentTab">2</li>
   <li class="contentTab">3</li>
   <li class="contentTab">4</li>
  </ul>
 </div>
</div>

fiddle

https://jsfiddle/Hastig/mx2mxgg1/2/

You can use flexbox to do exactly what you want

ul {
  display: -webkit-box;
}


ul li {
  -webkit-box-flex: 1;
  background: #ddd;
  padding: 10px 15px 6px 15px;
  white-space: nowrap;
  overflow: hidden;
  max-width: 180px;
  min-width: 60px;
  border: solid #ccc 1px;
  border-bottom: none;
  border-radius: 5px 5px 0 0;
  text-overflow: ellipsis;  
}
发布评论

评论列表(0)

  1. 暂无评论