Search code examples
jquery-mobilejquery-mobile-listview

Is it possible to have buttons take the appearance of links in a jQuery Mobile Listview?


I'm trying to create a Listview that contains a mix of buttons and links. Is there any additions/adjustments I can make to the markup to have buttons appear the same as links? At this stage, I'm trying to do as much as I can in markup and not custom CSS (or JS!)

The markup I'm using is:

<ul data-role="listview" data-inset="true">
    <li><a href="#">Edit</a></li>
    <li>
        <form action="#">
            <button type="submit">Publish</button>
        </form>
    </li>
    <li>
        <form action="#">
            <button type="submit">Delete</button>
        </form>
    </li>
</ul>

What I'd like is this:

Listview
(source: reb4.me)

I only seem able to get this:

Listview bad
(source: reb4.me)


Solution

  • Here is a way to do it.

    jQM 1.4

    To get the arrow icons on the right, add the classes ui-btn ui-btn-icon-right ui-icon-carat-r to the buttons:

    <ul data-role="listview" data-inset="true">
        <li><a href="#">Edit</a>
        </li>
        <li>
            <form action="#">
                <button type="submit" class="ui-btn ui-btn-icon-right ui-icon-carat-r">Publish</button>
            </form>
        </li>
        <li>
            <form action="#">
                <button type="submit" class="ui-btn ui-btn-icon-right ui-icon-carat-r">Delete</button>
            </form>
        </li>
    </ul>
    

    Then to remove the extra padding, borders, shadows etc. add this CSS:

    .ui-li-static {
        padding: 0 !important;
    }
    .ui-li-static form button {
        margin: 0;
        box-shadow: none !important;
        border: 0;
        text-align: left;
    }
    

    Here is a DEMO

    jQM 1.3

    If you are stuck with jQM 1.3 it is a little more complicated:

    <ul data-role="listview" data-inset="true">
        <li><a href="#">Edit</a>
        </li>
        <li>
            <form action="#">
                <button type="submit" class="ui-btn ui-btn-icon-right ui-icon-carat-r">Publish</button>
            </form>
            <span class="ui-icon ui-icon-arrow-r ui-icon-shadow fakeLinkIcon">&nbsp;</span>
        </li>
        <li>
            <form action="#">
                <button type="submit" class="ui-btn ui-btn-icon-right ui-icon-carat-r">Delete</button>
            </form>
            <span class="ui-icon ui-icon-arrow-r ui-icon-shadow fakeLinkIcon">&nbsp;</span>
        </li>
    </ul>
    
    .ui-li-static {
        padding: 0 !important;
    }
    .fakeLinkIcon {
        position: absolute;
        right: 10px;
        top: 50%;
        margin-top: -9px;
    }
    .ui-li-static form div.ui-submit{
        padding-right: 2.5em;
    }
    .ui-li-static form div.ui-submit {
        margin: 0;
        box-shadow: none !important;
        border: 0;
        text-align: left;
        border-radius: 0;
    }
    .ui-li-static form div.ui-submit .ui-btn-inner{
        padding-left: 15px;  
    }
    .ui-last-child form div.ui-submit {
         border-bottom-right-radius: 16px;   
         border-bottom-left-radius: 16px;   
    }
    .ui-first-child form div.ui-submit {
         border-top-right-radius: 16px;   
         border-top-left-radius: 16px;   
    }
    

    DEMO