If there isn’t enough room to display both the column title and sort icons in all column headers in a view panel, you can end up with an uneven look. In this post, I’ll show how to use CSS to move the sort icons down to a new line.
Column Header Layout
If you’re using a view panel with sortable columns, you will ideally not have too many columns and instead have enough screen real estate that the sort icons don’t make a difference.
However, a common scenario is that there are a lot more columns crammed in and some (but not all) sort icons wrap to a new line. This ends up causing an uneven look.
In addition, the icons take up space, so you may have columns that have a 1- or 2-letter code, but the sort icon makes the column 2-3 times wider than it needs to be, so you lose precious real estate.
If that happens and you’d like to make them consistent, you can use CSS to always move the sort icons to the next line.
Column Header Source
In order to apply CSS to adjust the layout, we need to view the page source to see what’s being generated.
This snippet contains the tags that start the view panel (line 1), start the column header row (lines 2-3), and display the first column header (lines 4-16).
<table id="view:_id1:viewPanel1" class="xspDataTable"> <thead> <tr> <th scope="col"> <div class="xspPanelViewColumnHeader"> <span> <a id="view:_id1:viewPanel1:viewColumn1:__internal_header_title_id" href="#" class="xspPanelViewColumnHeader"> <span class="xspPanelViewColumnHeader">Group</span> </a> </span> <span> <img id="view:_id1:viewPanel1:viewColumn1:__internal_header_sort_icon" src="/domjava/xsp/theme/common/images/sort_none.gif" alt="Sort Toggle" title="Sort Toggle" class="xspImageViewColumnHeaderSort"> </span> </div> </th>
This shows that a column header div contains a span with the column title and another span with the sort icon.
Adding a New Line with CSS
This gives us enough information to know how to target the proper element with CSS. There are several ways to go about it. My example will target the table (with class name), div (with class name), and then get the first span tag. It will add the new line after the first span.
table.xspDataTable div.xspPanelViewColumnHeader span:first-of-type:after { content: '\A'; white-space: pre; }
The '\A'
in the content attribute denotes a new line with CSS. It does not work to put a <br>
tag there. The white-space
attribute is also required or you may not see any difference.
Now, all of the sort icons appear on a separate line.
You can tweak it by adjusting the space between the lines or centering, etc, but this gets the ball rolling.
Also, if you want to modify the images themselves, you can target .xspImageViewColumnHeaderSort
with CSS.
