【问题标题】:How do I stop a CSS layout from distorting when zooming in/out?如何在放大/缩小时阻止 CSS 布局扭曲?
【发布时间】:2012-03-31 08:02:25
【问题描述】:

我已经建立了一个非常基本的站点,其中包含一个#container div,其中包括#navbar 和#content。但是,当我放大或缩小时,#navbar 会扭曲,如果我放大链接会被推到彼此下方而不是内联。如果我缩小,链接之间会添加太多填充。我怎样才能阻止这个?

HTML:

<div id="navbar">
<ul>
    <li><a href="index.html">Home</a></li>
    <li><a href="top.html">Top</a></li>
    <li><strong><a href="free.html">FREE</a></strong></li>
    <li><a href="photo.html">Photo</a></li>
    <li><a href="about.html">About</a></li>
    <li><a href="contact.html">Contact Us</a></li>
</ul>
</div>

<div id="content">

<p>Some sample text.<p>

</div>


</div>

CSS:

#container {

    position: static;
    background-color: #00bbee;
    margin-left: 20%;
    margin-right: 20%;
    margin-top: 7%;
    margin-bottom: 15%;
    border: 2px solid red;


}

#navbar  ul{

    list-style: none;



}

#navbar  li{

    display: inline;

}

#navbar li a{

    text-decoration: none;
    color: #11ff11;
    margin: 3%;
    border: 1px dotted orange;
    padding-left: 4px;

}

#navbar li a:hover {

    background-color: white;
    color: green;

}

#navbar {

    background-color: #eeeeee;
    padding-top: 2px;
    padding-bottom: 5px;
    border: 1px solid yellow;

}

我怎样才能阻止它扭曲?

另外,我对 CSS 还是很陌生,我被教导使用 % 而不是 px。那正确吗?还有什么你要指出的,请告诉我。

提前致谢!

【问题讨论】:

  • 您使用什么浏览器进行测试?他们通常以非常不同的方式处理缩放。我认为百分比也会把事情搞砸。
  • 我不会担心的。一些浏览器具有“文本缩放”功能,而不是缩放整个页面。最好将精力集中在文本大小发生变化时不会扭曲的布局上……而不是浏览器缩放实现,它会有所不同,您无法真正控制它。
  • 我正在使用火狐。必须有一种方法来阻止它扭曲,我知道当我之前尝试制作 css 布局时,页面的不同部分会扭曲并相互下方。
  • Pztar,你有没有给出你认为满意的答案?
  • @Pztar 关于百分比,有时间和地点。这也适用于 px、em、rem、pt、pc 等...为了保持布局看起来相同,您可能希望相关元素使用 px

标签: css zooming distortion


【解决方案1】:

由于这个问题仍然得到不断的关注,我将发布我目前使用的解决方案。

CSS 媒体查询:

@media screen and (max-width: 320px) { 

/*Write your css here*/

}

@media screen and (max-width: 800px) { 

}

查看: CSS-Tricks + device sizesMedia Queries

【讨论】:

    【解决方案2】:

    您将要使用 css 媒体查询来为 css 中的不同样式设置断点。如果使用得当,它将解决任何失真问题。

    【讨论】:

      【解决方案3】:

      给你,这很像上面的建议,但它有一个固定宽度的内容区域,如果你正在寻找全宽我很抱歉 (;_;)

      <style>
      body {
          margin:0px;
      }
      #container {
          width:990px;
          background-color: #00bbee;
          margin:0 auto;
          border: 2px solid red;
      }
      #navbar ul {
          list-style: none;
      }
      #navbar li {
          display: inline;
      }
      #navbar li a {
          text-decoration: none;
          color: #11ff11;
          margin: 3%;
          border: 1px dotted orange;
          padding-left: 4px;
      }
      #navbar li a:hover {
          background-color: white;
          color: green;
      }
      #navbar {
          background-color: #eeeeee;
          padding-top: 2px;
          padding-bottom: 5px;
          border: 1px solid yellow;
      }
      </style>
      
      <div id="container">
        <div id="navbar">
          <ul>
            <li><a href="index.html">Home</a></li>
            <li><a href="top.html">Top</a></li>
            <li><strong><a href="free.html">FREE</a></strong></li>
            <li><a href="photo.html">Photo</a></li>
            <li><a href="about.html">About</a></li>
            <li><a href="contact.html">Contact Us</a></li>
          </ul>
        </div>
        <div id="content">
          <p>Some sample text.
          <p> 
        </div>
      </div>
      

      【讨论】:

        【解决方案4】:

        这主要是因为你已经以百分比设置了宽度或边距属性。如果这样做,请确保为此类元素提供最大宽度

        【讨论】:

        • 请详细说明你的答案
        【解决方案5】:

        我只会为页面上的所有元素/div 设置绝对高度和宽度。

        id {高度:250px;宽度:500px}

        或者您也可以使用 min/max-width/hight 来调整不同屏幕尺寸或调整浏览器窗口大小时的页面布局。

        【讨论】:

          【解决方案6】:

          不同的浏览器使用不同的缩放技术。他们都有缺点。使用百分比会引入舍入误差。没有简单的答案。

          见:http://www.codinghorror.com/blog/2009/01/the-two-types-of-browser-zoom.html

          【讨论】:

            【解决方案7】:

            要解决放大问题,请尝试将min-width 属性添加到您的外部计数器(#container#navbar?)。 设置min-width 可防止网页尝试缩小到超出指定宽度(即 300 像素)。如果您放大得太远,而不是 &lt;div&gt; 中的元素向下跳到下一行,您的导航栏将停止缩小,并且页面底部会出现一个滚动条。

            示例(在您的样式表中):

            #navbar {min-width:300px;}
            

            实现此目的的另一个好方法是将 min-width 属性应用于页面正文。

            示例(在您的样式表中):

            body {min-width:300px;}
            

            最后,如果你想让你的导航栏跨越页面的整个宽度,请在样式表中使用{clear:both;}

            【讨论】:

            • 不要使用 { clear: both;如果您不使用浮点数......并且根据您在问题中发布的示例,您没有使用浮点数。
            【解决方案8】:

            我有一个类似的问题,我通过在导航菜单周围添加一个额外的 div 来解决这个问题。然后我添加了以下内容

            #menu-container {
                position: absolute;
                white-space: nowrap;
                overflow: hidden;
            
            }
            

            这阻止了它的换行。希望它有效。

            【讨论】:

            • 隐藏东西不是解决办法
            【解决方案9】:

            嗯....您是否尝试过添加 min-width/min-height 属性?您可以在#container div 中包含这些属性。这样做可能会奏效。

            【讨论】:

              猜你喜欢
              • 2022-11-15
              • 1970-01-01
              • 1970-01-01
              • 2012-11-26
              • 1970-01-01
              • 2011-07-19
              • 2013-05-02
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多