ICEfaces
  1. ICEfaces
  2. ICE-7245

ace:DataTable Headers Travel Over Page BG in IE7

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.1-Beta
    • Fix Version/s: 2.1-Beta2, 3.0
    • Component/s: ACE-Components
    • Labels:
      None
    • Environment:
      Williams POC, IE7
    • Affects:
      Documentation (User Guide, Ref. Guide, etc.), Compatibility/Configuration

      Description

      This bug is a result of absolutely positioned elements in the header being contained due to the TH having position:relative. It is related to the hasLayout bug quintessential to the IE 7 experience. Using overflow:hidden, to force hasLayout or obscure the rendering error was unsuccesful.

        Issue Links

          Activity

          Hide
          Nils Lundquist added a comment -

          Adding before scroll and after scroll screenshot.

          Show
          Nils Lundquist added a comment - Adding before scroll and after scroll screenshot.
          Hide
          Nils Lundquist added a comment - - edited

          This is a bug in the ice:panelDivider with IE 7 (and possibly 6) and any positioned contents, when scrolling.
          I've added a style tag to screen1.xhtml that adds position:relative to the top half of the divider and fixes the problem.

          Adding the IE specific zoom:1; CSS attribute would also work long term and avoid any side effects position:relative might have. The issue is with an internal property of IE, 'hasLayout' and both CSS attribute serve to enable it.

          Show
          Nils Lundquist added a comment - - edited This is a bug in the ice:panelDivider with IE 7 (and possibly 6) and any positioned contents, when scrolling. I've added a style tag to screen1.xhtml that adds position:relative to the top half of the divider and fixes the problem. Adding the IE specific zoom:1; CSS attribute would also work long term and avoid any side effects position:relative might have. The issue is with an internal property of IE, 'hasLayout' and both CSS attribute serve to enable it.
          Hide
          Arran Mccullough added a comment -

          Is this an app specific fix or is there a change to the component code to resolve this?

          Show
          Arran Mccullough added a comment - Is this an app specific fix or is there a change to the component code to resolve this?
          Hide
          Nils Lundquist added a comment -

          I have committed a fix to the POC that is app specific for now, but the panelDivider component will also be updated shortly.

          Show
          Nils Lundquist added a comment - I have committed a fix to the POC that is app specific for now, but the panelDivider component will also be updated shortly.
          Hide
          Brad Kroeger added a comment -

          This issue is not panelDivider specific, when the ice:panelDivider is removed, I still see both problems outlined in ICE-7247.

          Two IE7 styling issues are currently reproducible in the Williams poc:

          1 - Header text is not moving with the dataTable. In the poc, when you expand the panel at the top, the datatable moves down but the header text does not.

          2 - If you change the ace:dataTable in screen2.xhtml to the following, you will see the header columns bleed outside the width of the scrollbar and the column headers overlap the scrollbar :

          <ace:dataTable rendered="#

          {not screen2.graph}

          "
          value="#

          {screen2.tableItems}

          "
          var="tableItem"
          style="width:900px; overflow:auto;">
          <ace:columnGroup type="header">
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          <ace:column headerText="Williams">Williams</ace:column>
          </ace:columnGroup>
          </ace:dataTable>

          Show
          Brad Kroeger added a comment - This issue is not panelDivider specific, when the ice:panelDivider is removed, I still see both problems outlined in ICE-7247. Two IE7 styling issues are currently reproducible in the Williams poc: 1 - Header text is not moving with the dataTable. In the poc, when you expand the panel at the top, the datatable moves down but the header text does not. 2 - If you change the ace:dataTable in screen2.xhtml to the following, you will see the header columns bleed outside the width of the scrollbar and the column headers overlap the scrollbar : <ace:dataTable rendered="# {not screen2.graph} " value="# {screen2.tableItems} " var="tableItem" style="width:900px; overflow:auto;"> <ace:columnGroup type="header"> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> <ace:column headerText="Williams">Williams</ace:column> </ace:columnGroup> </ace:dataTable>
          Hide
          Brad Kroeger added a comment -

          As per Ken's suggestions on Skype, I have surrounded the ace:datatable with a div with overflow:auto; and zoom:1; this did not fix either of the two problems.

          Show
          Brad Kroeger added a comment - As per Ken's suggestions on Skype, I have surrounded the ace:datatable with a div with overflow:auto; and zoom:1; this did not fix either of the two problems.
          Hide
          Brad Kroeger added a comment -

          I tried adding overflow:auto; zoom:1; to the style attribute of ace:datatable and it is not fixing the issue.

          Show
          Brad Kroeger added a comment - I tried adding overflow:auto; zoom:1; to the style attribute of ace:datatable and it is not fixing the issue.
          Hide
          Nils Lundquist added a comment -

          This is a problem with every scrollable container for any ace:dataTable in IE7. Zoom must be applied to the container with the scrollbar- not simply wrapping it. No change to the table would fix the issue other than complete header redesign, without using positioning, which has been necessary to enable many of the layouts requested.

          The issue must be fixed at this point by correct styling of the scrollable container.

          Show
          Nils Lundquist added a comment - This is a problem with every scrollable container for any ace:dataTable in IE7. Zoom must be applied to the container with the scrollbar- not simply wrapping it. No change to the table would fix the issue other than complete header redesign, without using positioning, which has been necessary to enable many of the layouts requested. The issue must be fixed at this point by correct styling of the scrollable container.
          Hide
          Brad Kroeger added a comment -

          Adding the recommended fix to the issue:

          The fix is the same everywhere. Find some notable attribute of the element with the scrollbar- horizontal or vertical, and use that, or give it an ID and write an in page css rule that adds zoom:1. If the zoom 1 is placed correctly, all of the header + scrolling rendering issues are corrected.

          If you knew where the tables were going to be scrolled you could add a more general rule to a app-wide css doc.

          Show
          Brad Kroeger added a comment - Adding the recommended fix to the issue: The fix is the same everywhere. Find some notable attribute of the element with the scrollbar- horizontal or vertical, and use that, or give it an ID and write an in page css rule that adds zoom:1. If the zoom 1 is placed correctly, all of the header + scrolling rendering issues are corrected. If you knew where the tables were going to be scrolled you could add a more general rule to a app-wide css doc.
          Hide
          Nils Lundquist added a comment - - edited

          It turns out after more testing that zoom:1 is not sufficient to fix this bug, though it does change the behavior.

          The proper fix is to add position:relative to the container. In the case of screen2.xhtml to the div .screen2DataTable.

          For every app that seeks to be IE7 compat, if the table is designed to overgrow its parent, that parent should have position relative set.

          Ex.
          <style type="text/css">
          .screen2DataTable

          { position:relative; }

          </style>
          <ace:container styleClass="screen2DataTable" ...

          or more intelligently styling by adding a "scrollable fix rule" to some global css file and ...

          .ie7OverflowFix

          { position:relative; }

          <ace:container styleClass="ie7OverflowFix" style="overflow:auto; width:x; height:x;">
          <ace:datatable ...

          Show
          Nils Lundquist added a comment - - edited It turns out after more testing that zoom:1 is not sufficient to fix this bug, though it does change the behavior. The proper fix is to add position:relative to the container. In the case of screen2.xhtml to the div .screen2DataTable. For every app that seeks to be IE7 compat, if the table is designed to overgrow its parent, that parent should have position relative set. Ex. <style type="text/css"> .screen2DataTable { position:relative; } </style> <ace:container styleClass="screen2DataTable" ... or more intelligently styling by adding a "scrollable fix rule" to some global css file and ... .ie7OverflowFix { position:relative; } <ace:container styleClass="ie7OverflowFix" style="overflow:auto; width:x; height:x;"> <ace:datatable ...
          Hide
          Ken Fyten added a comment -

          Need to document this technique in the Wiki.

          Show
          Ken Fyten added a comment - Need to document this technique in the Wiki.

            People

            • Assignee:
              Brad Kroeger
              Reporter:
              Nils Lundquist
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: