【问题标题】:Div to the right of a float is causing a horizontal scroll浮动右侧的 Div 导致水平滚动
【发布时间】:2013-12-15 18:58:01
【问题描述】:

我有一个浮动到左侧的 div,其中有一个菜单,右侧的另一个 div 填充了其余空间,问题是,右侧的 div 设置为 100%,但正在运行关闭到页面的右侧并创建不需要的滚动。我认为原因是我放了左边距以允许左浮动div。有没有办法让右 div 填充其余空间而不创建水平滚动,但这样我也可以将东西向左对齐:0px 靠在浮动边缘。
我已将该页面放入我的其他域之一,以便您查看:
http://aspiresupportandhousing.com/cleanserve/

HTML:

<body>
<div id="lp_bt">
    <div id="logo_container_s">
    </div>
    <div id="menu_container_s">
      <nav id="secondary_nav">
        <ul>
          <li><a href="index.html">Home</a></li>
          <li><a href="#">About Us</a></li>
          <li><a href="#">Our Services</a></li>
          <li><a href="#">Cleaning</a></li>
          <li><a href="#">Contact Us</a></li>
        </ul>
      </nav>
    </div>
</div>
<div id="left_panel">
    <div id="logo_container">
    </div>
    <div id="menu_container">
      <nav id="primary_nav">
        <ul>
          <li><a href="index.html">Home</a></li>
          <li><a href="#">About Us</a></li>
          <li><a href="#">Our Services</a></li>
          <li><a href="#">Cleaning</a></li>
          <li><a href="#">Contact Us</a></li>
        </ul>
      </nav>
    </div>
</div>
<div id="right_panel">
    <div id="main_container">
      <div id="title">
      </div>
    </div>
</div>
</body>

CSS:

html {
    height: 100%;
    min-width: 1000px;
}

* {
    margin: 0px;
    padding: 0px;
}

body {
    height: 100%;
    min-width: 1000px;
    color: #000000;
}

/* Hidden */
#lb_bt {
    height: 30px;
width: 30px;
left: 30px;
}

#logo_container_s { 
left: -150px;
width: 150px;
height: 42px;
position: absolute;
background: url(logo.jpg);
z-index: 3000;
}

#menu_container_s {
left: -150px;
height: 400px;
width: 150px;
position: absolute;
z-index: 3000;
}
/* End Hidden */

/* Left Panel */
#left_panel {
height: 100%;
width: 150px;
float: left;
background-color: #26609E;
z-index: 2000;
}

#logo_container {
width: 150px;
height: 42px;
left: 0px;
top: 0px;
position: relative;
background: url(logo.jpg);
z-index: 3000;
}

#menu_container {
height: 400px;
width: 150px;
top: 0px;
left: 0px;
position: relative;
}

ul {
list-style: none;
text-align: left;
border-top: solid 1px #002954;
}

ul li {
display: list-item; 
}

ul li a:link, ul li a:visited {
font-family: Verdana, Geneva, sans-serif;
font-size: 14px;
font-weight: normal;
width: 800;
color: #FFFFFF;
line-height: 38px;
margin: 0px 10px;
padding: 0px 5px 8px 0px;
text-align: left;
text-decoration: none;
}

ul li a:hover, ul li a:active {
color: #2593C1;
}

@media only screen and (min-width: 280px) and (max-width: 800px) {
body {
    background: none rgba(161, 220, 254, 0.4);  
}

#left_panel {
    left: -150px;
    position: absolute;
}

#lp_bt {
    top: 0px;
    left: 0px;
    background: url(menu.jpg);
    width: 30px;
    height: 30px;
}

#lp_bt:hover {
    width: 150px;
    height: 100%;
    background: none #26609E;
}

#lp_bt:hover #secondary_nav {
    display: list-item; 
}

#lp_bt:hover #logo_container_s {
    left: 0px;
    top: 0px;
    position: relative;
}

#lp_bt:hover #menu_container_s {
    top: 0px;
    left: 0px;
    position: relative;
}
}
/* End Left Panel */

/* Right Panel */
#right_panel {
height: 100%;
width: 100%;
margin-left: 150px;
background: url(bg.jpg) no-repeat top left fixed;
background-size: cover;
position: absolute;
z-index: 1;
}

#main_container {
width: 700px;
height: 50%;
margin-left: auto;
margin-right: auto;
margin-top: auto;
background: rgba(255, 255, 255, 0.8);
border-radius: 30px 30px 30px 30px;
}

#title {
width: 600px;
height: 104px;
margin-left: auto;
margin-right: auto;
top: 30px;
background: url(title.png) no-repeat center center;
position: relative;
}

@media only screen and (min-width: 280px) and (max-width: 800px) {
#right_panel {
    background: none;
}
}

【问题讨论】:

  • JSFiddle 应附带的问题的主要示例;)
  • 我以前从未使用过它,但我会试一试并发布结果,我还放了一个指向临时链接的链接,我已经上传了文件以查看它的实时版本。

标签: css html css-float width


【解决方案1】:

你需要使用 CSS 位置。

一个小例子 Codepen

CSS

*{margin:0;padding:0;}


#divleft {
 position:absolute;
 top:0;bottom:0;left:0;
 width:250px;
 background: red;
}

#divright {
 position:absolute;
 top:0;
 bottom:0;
 left:250px;
 right:0;
 background: green;
}

【讨论】:

  • 我不能这样做的原因是因为我的 left_panel 是一个浮点数并且需要是静态的,但是如果我需要,right_panel 需要能够垂直滚动,如果我错了请纠正我(正如我不断向人们解释的那样,我是 CSS 的菜鸟)但我认为这种方式不会允许右手在需要时垂直滚动。不过感谢您的回答,我可以看到这对其他项目非常有用。
  • 如果您需要滚动一个 div,只需将 overflow:auto 放在 #divright 上即可 ^^。 #divleft 将是静态的,但如果您的 divleft 中有很多内容,则会出现滚动。 (对不起我的英语不好^^')
  • 听起来这对于我想要实现的目标来说是一个更简单的解决方案,您是否在浏览器中预览过它并尝试缩小窗口宽度?您会注意到菜单消失并出现一个小图标,将鼠标悬停在该图标上并返回,我是否以复杂的方式完成了此操作?还是我做得很好?没问题,抱歉我缺乏CSS知识>.
  • 媒体查询对于不同的屏幕尺寸是一个很好的解决方案,你也将使用带有 css 位置的媒体查询。但是 (=D) 我们曾经有一个 100% 宽度的菜单。而且它会比当你点击按钮时菜单不会消失。我认为使用 javascript 而不是所有权会更好:悬停。我们正在远离你的问题。 ^ ^
  • 我明白你的意思,但问题是,我更喜欢尽可能多地使用 CSS(目前),因为我不知道任何 JS,而且我还是 CSS 新手,所以我会在尝试学习一些 JS 之前,最好先熟悉 CSS,如果我尝试一次学习太多,我的大脑会爆炸,太多的代码要记住 >.
【解决方案2】:

看起来#left_panel 和#right_panel 是绝对定位的,您可以简单地删除负边距表单#left_panel:

#left_panel {
    left: 0px;
    position: absolute;
}

...然后从#right_panel 中删除 100% 的宽度并定位它:

#right_panel {
    top:0; right:0; bottom:0; left:150px;
}

http://jsfiddle.net/Pz7PP/

【讨论】:

  • 感谢您的回答,我设法用 Danko 给出的答案解决了这个问题,但我会记住这一点以备不时之需。不过有一件事,左边的面板是一个浮动,我看到你说两个面板都是绝对定位的,所以浮动是绝对定位的吗? (我对 CSS 有点菜鸟,还在学习中)
  • @TristanD27 在绝对定位的元素上浮动是完全多余的,因为绝对元素是从“流”中取出的,并且表现得像一个完全独立的层。浮动相对于其父级定位,但仍保留在流中(尽管它们可能以其他方式出现)。这是an article about floats,可能有用。
  • 这就是我的想法,但我对此表示质疑,因为您说“#left_panel 和 #right_panel 是绝对定位的”但是; #left_panel { 高度:100%;宽度:150px;向左飘浮;背景颜色:#26609E; z 指数:2000; }
  • 你稍后在你的媒体查询中添加#left_panel {left: -150px; position: absolute;}
【解决方案3】:

你的卷轴是因为你有一个margin-left 给你的

#right_panel

您有三个解决方案,其中涉及对 #right_panel 的 CSS 进行一些更改

  • 一种使用方法calc()设置宽度:

    #right_panel {
       width: calc( 100% - 150px);
    }
    
  • 两个更改您的z-index 值并删除margin-left:

    #right_panel {
       width:100%;
       margin-left:0;
       z-index:-1;
    }
    
  • 三个用box-sizing和padding代替margin:

    #right_panel {
      box-sizing:border-box;
      padding-left:150px;
      width:100%;
      margin:0;
    }
    

【讨论】:

  • 太棒了,非常感谢,我使用 CSS 的时间不长,我还在学习,但那会非常方便。我的编码看起来适合初学者吗?
  • 看起来不错,尽量保持简单...检查编辑答案
  • 对我来说太快了:D。 Calc 在我的 Codepen 上不起作用。我们可以在特定文件上使用这个属性吗?
  • 我猜这不是我想要做的简单方法吗?我认为如果我使用填充而不是边距,由于 div 从左侧开始齐平,所以背景图像不会很好地适合面板?还是没有区别?盒子尺寸有什么作用?
  • @ColoO 注意 calc 包含在 CSS3 检查兼容性中 caniuse.com/calc ... 如果您添加填充或边框,Tristan box-sizing 有助于保持您定义的宽度不变,因为通常这些值增加总宽度...如果您添加填充,您的 bg 图像不受影响
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 2012-11-14
  • 2015-09-26
  • 1970-01-01
相关资源
最近更新 更多