flex boxes are very useful for this sort of thing. They are great when you need to center or evenly-space items either horizontally or vertically. However, they aren't universally supported. They are fine on webkit browsers (iOS. Android, Safari, Chrome) and most modern browsers.
Here a little sample. I create my own list that is not a listview. This is for listing places from Foursquare. It's from a Rhodes application, so I use partials, similar to Rails. Hopefully, you can see how the partials build-up the list.
Note that I am using FontAwesome icons, so they scale nicely on all devices.
I've attached a sample list.
_index_nearby.erb
- <div data-role="page" data-dom-cache="true" class="places-page nearby-places-page">
- <%= render :partial => 'index_header' %>
- <div class="nearby-places-iscroll-wrapper" data-iscroll='{"snap":".place-li"}'">
- <%= render :partial => 'refresh_pulldown' %>
- <div class="places-list nearby-places-list">
- <%= render :partial => 'place', :collection => @places %>
- </div>
- </div>
- <%= render :partial => 'nearby_footer' %>
- </div>
_place.erb
- <div class="place-li" data-place-id="<%=place.object%>">
- <%= render :partial => 'place_buttons', :locals => {:place => place} %>
- <div class="place-li-info-wrapper flex-vcenter-wrapper">
- <div class="place-li-info flex-center">
- <%= render :partial => 'place_info', :locals => {:place => place} %>
- </div>
- </div>
- <div class="place-li-show-icon-wrapper show-icon-wrapper">
- <div class="place-li-icon-show flex-center ui-icon ui-icon-arrow-r"></div>
- </div>
- </div>
_place_buttons.erb
- <div class="split-btn-wrapper place-li-split-box">
- <div class="split-btn flex-vcenter-wrapper place-li-btn-chat">
- <i class="flex-center split-btn-icon icon-comment"></i>
- </div>
- <div class="split-btn flex-vcenter-wrapper btn-fav place-li-btn-fav<%= place.is_favorite? ? ' fav' : '' %>">
- <i class="flex-center split-btn-icon icon-heart"></i>
- </div>
- </div>
_place_info.erb
- <% # dist = "%.0f" % (5280.0 * @location.distance_from_ll(place.lat, place.lng))
- dist = 'NaN'
- %>
- <div class="place-li-name"><%= place.name %></div>
- <% if !place.primary_category_name.empty? %><div class="place-li-primary-cat"><%= place.primary_category_name %></div><% end %>
- <% if dist != 'NaN' %><div class="place-li-distance"><%= dist %> feet</div><% end %>
- <% if !place.address.empty? %>
- <div class="place-li-address">
- <div class="place-li-address-street"><%= place.address %></div>
- <% if !place.cross_street.empty? %><div class="place-li-address-cross">(<%= place.cross_street %>)</div><% end %>
- </div>
- <% end %>
- <div class="place-li-stats">
- <% if place.checkins_count.to_i > 0 %>Checkins:<%= place.checkins_count %><% end %>
- <% if place.users_count.to_i > 0 %>Users:<%= place.users_count %><% end %>
- <% if place.tips_count.to_i > 0 %>Tips:<%= place.tips_count %><% end %>
- <% if place.here_now_count.to_i > 0 %>Here:<%= place.here_now_count %><% end %>
- <!-- <% if place.chat_count.to_i > 0 %>Chat:<%= place.chat_count %><% end %> -->
- </div>
CSS