如何将自定义图标添加到标准jQuery UI主题?

时间:2010-10-01 02:52:34

标签: jquery-ui button icons

可以轻松使用标准图标集中的其中一个图标:

$("#myButton").button({icons: {primary: "ui-icon-locked"}});

但是,如果我想添加一个不属于框架图标集的我自己的图标呢?

我认为这就像给自己带有背景图像的CSS类一样简单,但这不起作用:

.fw-button-edit {
    background-image: url(edit.png);
}

有什么建议吗?

8 个答案:

答案 0 :(得分:62)

我还可以推荐:

.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
        }});

它对我有用,并希望它也适合你!

答案 1 :(得分:14)

我相信他不会工作的原因是因为你的图标的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

答案 2 :(得分:3)

这是基于上面的Yi Jiang和Panayiotis提供的信息以及jquery ui button sample code

当我迁移早期的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');
            });
  });

答案 3 :(得分:2)

此链接的解决方案对我很有用: 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();
});​

答案 4 :(得分:0)

我的解决方案是向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" }
});

答案 5 :(得分:0)

建立在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');
      }
    });
}

答案 6 :(得分:0)

// 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 } });

答案 7 :(得分:0)

在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" }
});