2010-03-30 28 views
0

请注意,在重新调整浏览器水平尺寸时,第一个HTML/CSS是如何工作的。它将缩小不超过800像素左右,但只要您拖动浏览器的右边缘就会扩大。它也会正确溢出顶部表格并水平滚动。CSS div/overflow:为什么第一个HTML文件可以工作,但不是第二个?

我不喜欢第一个代码片段的地方是滚动条的位置。我希望它显示在字段集的边界内,因此即使我将浏览器缩小到800像素宽,我也可以看到字段集边框的左侧和右侧。

第二个代码片段与第一个代码片段完全相同,只是我在字段集合内和网格周围添加了另一个div标签。请注意,如果缩小浏览器的视口,顶部字段集的宽度将无法正确缩小。关于为什么它不起作用的任何想法,我能做些什么来使它像第一个代码片段一样工作?

我不认为我清楚地描述了这一点,但如果您并排运行并扩展和收缩浏览器窗口的水平边缘,则会看到两者之间的差异。

我很新的CSS和HTML布局,所以我理解为什么CSS处理大小在某些情况下做的方式仍然真的让我感到困惑。

工作HTML文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <meta http-equiv="Content-Style-Type" content="text/css"></meta> 

    <style type="text/css"> 
     #divBody { 
      margin-top: 5px; 
      top:24px; 
      margin-top: 10px; 
     }    
     #divContainer 
     { 
      top: 5px; 
      position:relative; 
      min-height:100%; 
      #width:expression(document.body.clientWidth < 830? "800": "90%"); 
      width:90%; 
      min-width: 800px; 
      padding-bottom:70px; 
     } 
     #divMasterGrid { 
      position:relative; 
      margin:5px; 
      top:5px; 
      width:99%; 
      margin:0 auto; 
      overflow-x:scroll; 
     } 
     #divRadioButtonArea { 
      position:relative; 
      top:20px; 
      height:51px; 
      font-size: 12px; 
      width:99%; 
      margin:5px; 
     } 
    </style> 
    <title>TEST TEST</title> 
</head> 


<body id="divBody"> 
    <div id="divContainer" class="gridRegion"> 

     <div id="divMasterGrid"> 
      <fieldset style="margin: 5px;"> 
       <legend style="font-size: 12px; color: #000;">Numbers</legend> 
       <table border="1px"> 
       <tr> 
        <td>One 
        </td> 
        <td>Two 
        </td> 
        <td>Three 
        </td> 
        <td>Fout 
        </td> 
        <td>Five 
        </td> 
        <td>Six 
        </td> 
        <td>Seven 
        </td> 
        <td>Eight 
        </td> 
        <td>Nine 
        </td> 
        <td>Ten 
        </td> 
        <td>Eleven 
        </td> 
        <td>Twelve 
        </td> 
        <td>Thirteen 
        </td> 
        <td>Fourteen 
        </td> 
        <td>Fifteen 
        </td> 
        <td>Sixteen 
        </td> 
        <td>Seventeen 
        </td> 
        <td>Eighteen 
        </td> 
        <td>Nineteen 
        </td> 
        <td>Twenty 
        </td>       
       </tr> 
       </table> 
      </fieldset> 
     </div> 


     <div id="divRadioButtonArea"> 
      <fieldset style=" padding-left: 5px;"> 
       <legend style="color: #000; height:auto">Colors</legend> 
       <table style="width:100%;padding-left:5%;padding-right:5%;"> 
        <tr> 
         <td> 
          <input type="radio" name="A" value="Y"/><label>Red</label> 
         </td> 
         <td> 
          <input type="radio" name="O" value="O"/><label>White</label> 
         </td> 
         <td> 
          <input type="radio" name="W"/><label>Blue</label> 
         </td> 
        </tr> 
       </table> 
      </fieldset> 
     </div> 

    </div> 
</body> 
</html> 

损坏的HTML文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <meta http-equiv="Content-Style-Type" content="text/css"></meta> 
    <style type="text/css"> 
     #divBody { 
      margin-top: 5px; 
      top:24px; 
      margin-top: 10px; 
     }    
     #divContainer 
     { 
      top: 5px; 
      position:relative; 
      min-height:100%; 
      #width:expression(document.body.clientWidth < 830? "800": "90%"); 
      width:90%; 
      min-width: 800px; 
      padding-bottom:70px; 
     } 
     #divTopFieldSet { 
      position:relative; 
      margin:5px; 
      top:5px; 
      width:99%; 
     } 
     #divRadioButtonArea { 
      position:relative; 
      top:20px; 
      height:51px; 
      font-size: 12px; 
      width:99%; 
      margin:5px; 
     } 
     #divTable { 
      position:relative; 
      width:99%; 
      margin:5px auto; 
      overflow-x:scroll; 
     } 

    </style> 
    <title>TEST TEST</title> 
</head> 


<body id="divBody"> 
    <div id="divContainer" class="gridRegion"> 

     <div id="divTopFieldSet"> 
      <fieldset style="margin: 5px;"> 
       <legend style="font-size: 12px; color: #000;">Numbers</legend> 
       <div id="divTable"> 
        <table border="1px"> 
        <tr> 
         <td>One 
         </td> 
         <td>Two 
         </td> 
         <td>Three 
         </td> 
         <td>Fout 
         </td> 
         <td>Five 
         </td> 
         <td>Six 
         </td> 
         <td>Seven 
         </td> 
         <td>Eight 
         </td> 
         <td>Nine 
         </td> 
         <td>Ten 
         </td> 
         <td>Eleven 
         </td> 
         <td>Twelve 
         </td> 
         <td>Thirteen 
         </td> 
         <td>Fourteen 
         </td> 
         <td>Fifteen 
         </td> 
         <td>Sixteen 
         </td> 
         <td>Seventeen 
         </td> 
         <td>Eighteen 
         </td> 
         <td>Nineteen 
         </td> 
         <td>Twenty 
         </td>       
        </tr> 
        </table> 
       </div> 
      </fieldset> 
     </div> 


     <div id="divRadioButtonArea"> 
      <fieldset style=" padding-left: 5px;"> 
       <legend style="color: #000; height:auto">Colors</legend> 
       <table style="width:100%;padding-left:5%;padding-right:5%;"> 
        <tr> 
         <td> 
          <input type="radio" name="A" value="Y"/><label>Red</label> 
         </td> 
         <td> 
          <input type="radio" name="O" value="O"/><label>White</label> 
         </td> 
         <td> 
          <input type="radio" name="W"/><label>Blue</label> 
         </td> 
        </tr> 
       </table> 
      </fieldset> 
     </div> 

    </div> 
</body> 
</html> 
+0

唉,IE只CSS也是白搭! – 2010-03-30 17:30:21

+0

在我工作的地方,除了firefox之外,我们还必须支持IE 7(不是8),所以恐怕我们会陷入#width解决方案。 Ie6根本不处理最小宽度设置。这是一个耻辱。 – user305328 2010-03-30 17:42:27

回答

0

我希望这是你的意思:

我搬到溢出-X和宽度规则为#divTopFieldSet - 当body变得太不适用时div的内容正确滚动罗列包含桌子。

说实话,我不是100%确定这个的根本原因。当一个百分比宽度的元素被设置为overflow:scroll时,它不会自动收缩来裁剪它的内容 - 看起来元素的子元素扮演一个角色。由于表格具有自己的最小宽度(由单元格的内容决定),因此周围的容器不会收缩超出表格的外边缘。最重要的是,计算百分比宽度 - width:99%;意味着“父容器宽度的99%” - 如果父容器不是基于视口的大小,那么在调整大小时99%不会更改,要么。

尽管如此,将溢出规则应用到树的更上方的容器(divTopFieldSet)确实有效。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <meta http-equiv="Content-Style-Type" content="text/css"></meta> 
    <style type="text/css"> 
     #divBody { 
      margin-top: 5px; 
      top:24px; 
      margin-top: 10px; 
     }    
     #divContainer 
     { 
      top: 5px; 
      position:relative; 
      min-height:100%; 
      #width:expression(document.body.clientWidth < 830? "800": "90%"); 
      width:90%; 
      min-width: 800px; 
      padding-bottom:70px; 
     } 
     #divTopFieldSet { 
      position:relative; 
      margin:5px; 
      top:5px; 
      width:99%; 
      overflow-x:scroll; 
     } 
     #divRadioButtonArea { 
      position:relative; 
      top:20px; 
      height:51px; 
      font-size: 12px; 
      width:99%; 
      margin:5px; 
     } 
     #divTable { 
      margin:5px auto; 
     } 

    </style> 
    <title>TEST TEST</title> 
</head> 


<body id="divBody"> 
    <div id="divContainer" class="gridRegion"> 

     <div id="divTopFieldSet"> 
      <fieldset style="margin: 5px;"> 
       <legend style="font-size: 12px; color: #000;">Numbers</legend> 
       <div id="divTable"> 
        <table border="1px"> 
        <tr> 
         <td>One 
         </td> 
         <td>Two 
         </td> 
         <td>Three 
         </td> 
         <td>Fout 
         </td> 
         <td>Five 
         </td> 
         <td>Six 
         </td> 
         <td>Seven 
         </td> 
         <td>Eight 
         </td> 
         <td>Nine 
         </td> 
         <td>Ten 
         </td> 
         <td>Eleven 
         </td> 
         <td>Twelve 
         </td> 
         <td>Thirteen 
         </td> 
         <td>Fourteen 
         </td> 
         <td>Fifteen 
         </td> 
         <td>Sixteen 
         </td> 
         <td>Seventeen 
         </td> 
         <td>Eighteen 
         </td> 
         <td>Nineteen 
         </td> 
         <td>Twenty 
         </td>       
        </tr> 
        </table> 
       </div> 
      </fieldset> 
     </div> 


     <div id="divRadioButtonArea"> 
      <fieldset style=" padding-left: 5px;"> 
       <legend style="color: #000; height:auto">Colors</legend> 
       <table style="width:100%;padding-left:5%;padding-right:5%;"> 
        <tr> 
         <td> 
          <input type="radio" name="A" value="Y"/><label>Red</label> 
         </td> 
         <td> 
          <input type="radio" name="O" value="O"/><label>White</label> 
         </td> 
         <td> 
          <input type="radio" name="W"/><label>Blue</label> 
         </td> 
        </tr> 
       </table> 
      </fieldset> 
     </div> 

    </div> 
</body> 
</html> 

让我们知道这是不是你所需要的...

+0

感谢您看看它Beejamin。我查看了第一个代码片段,并将其与您的解决方案并排运行,结果大致相同。 根据你所说的,这听起来像浏览器计算宽度的顺序与第二个代码片段没有正确利用溢出滚动机制的事实有关。浏览器计算维度的订单上的任何想法? 如果body是所有东西的父div,并且容器div占用了这个宽度的90%,然后它从parent-to-child继续下去,我预计溢出将起作用。 – user305328 2010-03-30 21:05:40

相关问题