使用标准图标集中提供的图标之一很容易:
$("#myButton").button({icons: {primary: "ui-icon-locked"}});
但是如果我想添加一个不属于框架图标集的我自己的图标怎么办?
我认为这就像给它你自己的 CSS 类和背景图像一样简单,但这不起作用:
.fw-button-edit {
background-image: url(edit.png);
}
有什么建议吗?
我还可以推荐:
.ui-button .ui-icon.your-own-custom-class {
background-image: url(your-path-to-normal-image-file.png);
width: your-icon-width;
height: your-icon-height;
}
.ui-button.ui-state-hover .ui-icon.your-own-custom-class {
background-image: url(your-path-to-highlighted-image-file.png);
width: your-icon-width;
height: your-icon-height;
}
然后输入JS代码即可:
jQuery('selector-to-your-button').button({
text: false,
icons: {
primary: "you-own-cusom-class" // Custom icon
}});
它对我有用,希望对你也有用!
我相信他不起作用的原因是因为你的图标的
background-image
属性被 jQuery UI 默认精灵图标背景图像覆盖。有问题的风格是:
.ui-state-default .ui-icon {
background-image: url("images/ui-icons_888888_256x240.png");
}
这比您的
.fw-button-edit
选择器具有更高的特异性,从而覆盖背景图像属性。由于它们使用精灵,因此 .ui-icon-locked
规则集仅包含获取精灵图像位置所需的 background-position
。我相信使用这个会起作用:
.ui-button .ui-icon.fw-button-edit {
background-image: url(edit.png);
}
或者其他具有足够特异性的东西。在此处了解有关 CSS 特异性的更多信息:http://reference.sitepoint.com/css/specificity
这是基于上面 Yi Jiang 和 Panayiotis 提供的信息,以及 jquery ui 按钮示例代码:
当我迁移一个早期的 JSP 应用程序时,该应用程序的工具栏上每个按钮都有图像,我希望将图像放在按钮声明本身中,而不是为每个工具栏按钮创建一个单独的类。
<div id="toolbarDocs" class="tableCaptionBox">
<strong>Checked Item Actions: </strong>
<button id="btnOpenDocs" data-img="<s:url value="/images/multi.png"/>">Open Documents</button>
<button id="btnEmailDocs" data-img="<s:url value="/images/email.png"/>">Attach to Email</button>
</div>
当然,还有很多按钮,不仅仅是上面两个。上面的 s 标签是 struts2 标签,但你可以将其替换为任何 URL
<button id="btnOpenDocs" data-img="/images/multi.png">Open Documents</button>
下面的脚本从按钮标签中查找属性 data-img,然后将其设置为按钮的背景图像。
它临时设置 ui-icon-bullet (任何任意现有样式),然后稍后更改。
此类定义临时样式(如果您打算使用它,最好为特定工具栏添加更多选择器,以便页面的其余部分不受影响)。实际图像将被下面的 Javascript 替换:
button.ui-button .ui-icon {
background-image: url(blank.png);
width: 0;
height: 0;
}
以及以下 Javascript:
$(document).ready(function () {
$("#toolbarDocs button").each(
function() {
$(this).button(
{ text: $(this).attr('data-img').length === 0? true: false, // display label for no image
icons: { primary: "ui-icon-bullet" }
}).css('background-image', "url(" + $(this).attr('data-img') +")")
.css('background-repeat', 'no-repeat');
});
});
此链接的解决方案对我来说非常有用: http://www.jquerybyexample.net/2012/09/how-to-assign-custom-image-to-jquery-ui-button.html
$(document).ready(function() {
$("#btnClose")
.text("")
.append("<img height='100' src='logo.png' width='100' />")
.button();
});
我向 JQuery UI 添加自定义图标的解决方案(使用精灵):
CSS:
.icon-example {
background-position: 0 0;
}
.ui-state-default .ui-icon.custom {
background-image: url(icons.png);
}
.icon-example
定义自定义图标文件中图标的位置。 .ui-icon.custom
使用自定义图标定义文件。
注意:您可能还需要定义其他 JQuery UI 类(如
.ui-state-hover
)。
JavaScript:
$("selector").button({
icons: { primary: "custom icon-example" }
});
在 msanjay 答案的基础上,我将其扩展为适用于 jquery ui 按钮和单选按钮的自定义图标:
<div id="toolbar">
<button id="btn1" data-img="/images/bla1.png">X</button>
<span id="radioBtns">
<input type="radio" id="radio1" name="radName" data-mode="scroll" data-img="Images/bla2.png"><label for="radio1">S</label>
<input type="radio" id="radio2" name="radName" data-mode="pan" data-img="Images/bla3.png"><label for="radio2">P</label>
</span>
</div>
$('#btn1').button();
$('#radioBtns').buttonset();
loadIconsOnButtons('toolbar');
function loadIconsOnButtons(divName) {
$("#" + divName + " input,#" + divName + " button").each(function() {
var iconUrl = $(this).attr('data-img');
if (iconUrl) {
$(this).button({
text: false,
icons: {
primary: "ui-icon-blank"
}
});
var imageElem, htmlType = $(this).prop('tagName');
if (htmlType==='BUTTON') imageElem=$(this);
if (htmlType==='INPUT') imageElem=$("#" + divName + " [for='" + $(this).attr('id') + "']");
if (imageElem) imageElem.css('background-image', "url(" + iconUrl + ")").css('background-repeat', 'no-repeat');
}
});
}
// HTML
<div id="radioSet" style="margin-top:4px; margin-left:130px;" class="radio">
<input type="radio" id="apple" name="radioSet" value="1"><label for="apple">Apple</label>
<input type="radio" id="mango" name="radioSet" value="2"><label for="mango">Mango</label>
</div>
// JQUERY
// Function to remove the old default Jquery UI Span and add our custom image tag
function AddIconToJQueryUIButton(controlForId)
{
$("label[for='"+ controlForId + "'] > span:first").remove();
$("label[for='"+ controlForId + "']")
.prepend("<img position='fixed' class='ui-button-icon-primary ui-icon' src='/assets/images/" + controlForId + ".png' style=' height: 16px; width: 16px;' />");
}
// We have to call the custom setting to happen after document loads so that Jquery UI controls will be there in place
// Set icons on buttons. pass ids of radio buttons
$(document).ready(function () {
AddIconToJQueryUIButton('apple');
AddIconToJQueryUIButton('mango');
});
// call Jquery UI api to set the default icon and later you can change it
$( "#apple" ).button({ icons: { primary: "ui-icon-gear", secondary: null } });
$( "#mango" ).button({ icons: { primary: "ui-icon-gear", secondary: null } });
在 CSS 中
.ui-button .ui-icon.custom-class {
background-image: url(your-path-to-normal-image-file.png);
width: your-icon-width;
height: your-icon-height;
}
.ui-state-active .ui-icon.custom-class, .ui-button:active .ui-icon.custom-class {
background-image: url(your-path-to-highlighted-image-file.png);
width: your-icon-width;
height: your-icon-height;
}
HTML 中
<button type="button" class="ui-button ui-widget ui-corner-all">
<span class="custom-class"></span> CAPTION TEXT
</button>
在 JavaScript 中
$("selector").button({
icons: { primary: "custom-class" }
});