我正在尝试从基本结构创建一个简单的ui标签。
我有四个标签
当我拖动Orange
和More
时,他们的身高会增加并且当摔跤恢复正常时。 Apple
和Mango
元素不会发生这种情况。
HTML:
<div id="tabs">
<ul>
<li><a href="#tabs-1">Apple</a>
<span class="ui-icon ui-icon-close" role="presentation">Remove Tab</span>
</li>
<li>
<a href="#tabs-2">Orange</a>
<span class="ui-icon ui-icon-close" role="presentation">Remove Tab</span>
</li>
<li>
<a href="#tabs-3">Mango</a>
<span class="ui-icon ui-icon-close" role="presentation">Remove Tab</span>
</li>
<li>
<a href="#tabs-4">More</a>
<span class="ui-icon ui-icon-close" role="presentation">Remove Tab</span>
</li>
</ul>
<div id="tabs-1"><p>Apple</p></div>
<div id="tabs-2"><p>Orange</p></div>
<div id="tabs-3"><p>Mango</p></div>
<div id="tabs-4"><p>More</p></div>
</div>
CSS:
#tabs li .ui-icon-close {
float: left;
margin: 0.4em 0.2em 0 0;
cursor: pointer;
}
JS :JSFIDDLE
var tabs = $("#tabs").tabs();
// Make Tabs Sortable
tabs.find(".ui-tabs-nav").sortable({
axis: "x",
stop: function () {
tabs.tabs("refresh");
}
});
// close icon: removing the tab on click
tabs.delegate("span.ui-icon-close", "click", function () {
var panelId = $(this).closest("li").remove().attr("aria-controls");
$("#" + panelId).remove();
tabs.tabs("refresh");
});
答案 0 :(得分:0)
好吧,我所建议的是一种黑客攻击,但由于它是一个相当直接的问题,我们手中没有多少,我的想法是设置 min-width > li #tabs 中的元素大于当前宽度,大约 3px 。
原因:当有人试图拖动元素时, li 元素的宽度由js设置,最终导致UI失真。
黑客:使用此脚本:
$(document).ready(function(){
$('#tabs li').each(function(){
var wd = (parseInt($(this).css('width').replace('px',''))+3)+'px';
$(this).css('min-width',wd);
});
});
答案 1 :(得分:0)
为需要的人发布最终代码..
更改为<span>
到ui按钮有效..
<强> HTML:强>
<div id="tabs">
<ul>
<li><a href="#tabs-1">Apple</a>
<button>close</button>
</li>
<li>
<a href="#tabs-2">Orange</a>
<button>close</button>
</li>
<li>
<a href="#tabs-3">Mango</a>
<button>close</button>
</li>
<li>
<a href="#tabs-4">More</a>
<button>close</button>
</li>
</ul>
<div id="tabs-1"><p>Apple</p></div>
<div id="tabs-2"><p>Orange</p></div>
<div id="tabs-3"><p>Mango</p></div>
<div id="tabs-4"><p>More</p></div>
</div>
<强> CSS:强>
body { font-size: 62.5%; }
#tabs li button {
margin-top:8%;
margin-right:2px;
font-size: 55%;
}
<强> JS:强>
var tabs = $("#tabs").tabs();
// Make Tabs Sortable
tabs.find(".ui-tabs-nav").sortable({
axis: "x",
stop: function () {
tabs.tabs("refresh");
}
});
// close icon: removing the tab on click
tabs.delegate("span.ui-icon-close", "click", function () {
var panelId = $(this).closest("li").remove().attr("aria-controls");
$("#" + panelId).remove();
tabs.tabs("refresh");
});
$("button").button({
icons: {
primary: "ui-icon-close"
},
text: false
});
答案 2 :(得分:0)
我遇到了这个问题,我认为这是最好的解决方法。
修复:排序开始时,添加额外的1px宽度。排序结束时,它将自动恢复为原始宽度。 见例:
$(function() {
var tabs = $( "#tabs" ).tabs();
tabs.find( ".ui-tabs-nav" ).sortable({
axis: "x",
start: function(event, ui) {
ui.helper.width(ui.helper.width() + 1);
}
});
});