【问题标题】:CSS margin / padding / positioning issueCSS边距/填充/定位问题
【发布时间】:2017-02-12 05:11:23
【问题描述】:
    body  {
     background-color: white;
     color: #000000;
     font-family:"arial",arial;
     margin:auto;
     }



(header logo EWITA)    #header {
      position:relative;
      left:-150px;
      background-color:transparent;
      text-align:center;
      margin-top:50px;
      padding:0;}



(HR LINE)    hr.main {

      position:relative;
      top:-5px;
      background-color:#353535;
      height:10px;
      width:100%;
      margin:0;
      padding:0;
      z-index: -1;

      }

       #menubar {
     position:relative;
     background-image: URL('./pictures/menu.png');
     background-repeat:no-repeat;
     left:730px;
     top:-40px;
     height:25px;
     width:300px;
     background-color:transparent;
     color:#ffffff;
     padding:5 0 0 20;
    }


(menu bar)    table,tr,td {
      border-spacing:0;
      border-collapse:collapse;
      padding:0 10 0 10;
    }





(page after head)     #wrapper {

       margin:auto;
       min-height:500px;
       background-image: URL('./pictures/background.png');
       background-repeat: repeat-xy;
       z-index:-2;
       }



    #content {
      margin:auto;
      width:700px;
      background-color:#ffffff;
      margin-top: 40px;
      border:1px solid;
      padding: 50 30 50 30;

这是我的 css,我正在为客户编写一个页面,由于某些相对定位,它使我的背景出现问题,因为您看到 here 人力资源线之后的白线。

感谢所有回复的人。

【问题讨论】:

  • 白线?您的整个页面都是白色的,请更具体。
  • 蓝色下的 s020.radikal.ru/i714/1403/b8/1c656dd41b0b.png 是背景。我知道它真的很亮,无论如何.. ^^
  • margin-top: 40px; on #content 导致了您所谈论的问题的很大一部分
  • 我希望它有那个边距......但在背景上(但只有白色)

标签: html css margin padding


【解决方案1】:

编辑:

想知道如何更新这个答案,因为有很多话要说,最好从下往上看。这将带您进入这样的布局:

当您重新调整窗口等大小时,菜单和徽标应保持原位。


现在看看你的代码。更好了,但你还是有一些麻烦:

  1. border 仍然设置在图像上。 标记无效。
  2. repeat-xy 仍在后台使用。 属性值无效。
  3. #content 仍然有 padding 没有单位。 属性值无效。
  4. <br> 标签仍然用于在文本中创建段落。
  5. #content 之后有一个额外的}使 CSS 文件无效。

第 4 号。应该是固定的,但不是那么现在很重要。

正如我们已经讨论过 1-3 一样,很难理解为什么要保留它们。无效的标记和样式会导致不可靠的结果。

它在一个浏览器中看起来不错,在一个浏览器的一个版本中,在另一个版本中看起来很糟糕,在第三个版本中完全崩溃。您在代码和结果之间得到错误信息。何时或如果您将其修复为有效,其他可能会发生意想不到的变化,您必须做更多的工作来清理它。作为一个整体和规则第一。无论从如何做的角度来看,标记和样式有多么错误,一个必须将无效的标记和样式排除在外。

为了验证您的工作,并且您在体验方面处于何种位置,请始终这样做。做些小改动:验证。做些小改动:验证。等等。使用:


标记

现在的标记并不是最容易设计样式或以动态方式表现良好的。 hr 不是最容易使用的,并且在浏览器之间有所不同。 不要将表格用于菜单或样式。最好保留它们的用途:显示表格数据。对于您的菜单,您可以问自己:菜单是什么;好吧,这是一个清单。供最终用户浏览网站的选项列表。网络上有很多使用列表作为菜单的示例。在网络上搜索 CSS 列表菜单 等。您可以创建漂亮的、跨浏览器的可靠 CSS (不依赖 JavaScript)、菜单。


但让我们从基本标记开始:您通常会发现将整个页面包装在包装器中会很好。然后在其中添加子项。要定位主菜单、徽标等元素,最好为每个元素使用包装器并通过浮动、边距等定位它们。

一般使用边距和内边距。

页面布局

head
div
divider div

content





div
             页脚                        Div

头部
   Div 向左浮动   Div 向左浮动

      LOGO
菜单                
kbd>

样式+标记

为了方便您自己使用临时边框和背景颜色来查看各种元素如何浮动。还可以使用浏览器内置工具来显示各种内容,例如边距等。这是非常宝贵的。

请记住,如果您使用边框,并且打算在成品上移除它们,它们会占用空间。

作为一个例子,你可以有这样的东西:

HTML:

<div id="wrap">
    <div id="head">
        <div id="logo">
            <a href="index.php">
                <img id="logo_img" src="http://cupido.g6.cz/pictures/header.png" alt="EWITA" />
            </a>
        </div>
        <div id="menubar">MENU</div>
    </div>
</div>

CSS:

* {
    margin     : 0;
    padding    : 0;
}
body {
    font-family: Arial;
    height     : 100%;
    background : orange;
}
#wrap {
    position   : relative;
    background : pink;
    width      : 100%;
    height     : 100%;
}
#head {
    position   : relative;
    width      : 800px;
    height     : 131px;
    margin     : 100px auto 0 auto;
    background : blue;
}
#logo {
    position   : relative;
    width      : 431px;
    float      : left;
    background : red ;
}
#logo_img {
    width      : 439px;
    height     : 131px;
    float      : left;
}
#menubar {
    position   : relative;
    background : #fff;
    width      : 300px;
    float      : left;
    margin-top : 107px;
    padding    : 3px 0 3px 10px;
}

注意:我通过以下方式对所有元素的边距和内边距进行硬重置:

* {
    margin : 0;
    padding; 0;
}

然后在我使用标签和元素时设置边距和填充。通常发现这是一种比其他方式更容易的方法。请记住,像 body 这样的东西也有填充等,并且经常会导致不需要的间距。

这样你也摆脱了底部的水平滚动条。

通过在 logomenubar 之类的东西上使用浮动,元素可以很好地对齐。


接下来我们可以添加分隔符。在这里,我们可以使用 div 并为顶部和底部设置边框。在内容上,我们使用填充在页眉、文本和页脚之间留出空间。我们还在内容顶部添加了与分隔线完美对齐的白色边框。

HTML:

<div id="divider"></div>
<div id="main_content">
    MAIN CONTENT
</div>
<div id="footer">
    FOOTER
</div>

CSS:

#divider {
    border-top   : 5px solid #353535;
    border-bottom: 3px solid #888;
}
#main_content {
    position   : relative;
    background : url('http://cupido.g6.cz/pictures/background.png');
    border-top : 2px solid #fff;
    padding    : 120px 0 130px 0;
}

接下来我们可以添加内容文本并设置样式。还为页脚添加了样式。

HTML

<div class="content_text">
    <p>
        text text text ...
    </p>
</div>

CSS:

.content_text {
    margin     : 0 auto;
    width      : 700px;
    background : #fff;
    border     : 1px solid;
    padding    : 50px 30px;

}
.content_text p {
    font-size  : 16px;
}

调整窗口大小等并看到它很好地浮动。


现在是时候添加菜单了。如前所述,我们可以使用列表作为菜单。它比桌子更适合这项任务。在这方面还要注意菜单可能有子项,因为这样的列表成为唯一合理的选项。

在菜单上还要注意:您可能不希望使用其他颜色来设置已访问链接的样式。但这当然取决于你。

HTML:

<ul>
    <li><a class="menu" href="smaler.php">úvodní&nbsp;stránka</a></li>
    <li><a class="menu" href="sluzby.php">služby</a></li>
    <li><a class="menu" href="kontakt.php">kontakt</a> </li>
</ul>

CSS:

由于我们已经将所有元素的边距和内边距设置为 0,这很简单:

#menubar ul {
    list-style : none;
}
#menubar li {
    padding    : 0 10px;
    float      : left;
}
a.menu {
    text-decoration : none;
    color      : #fff;
}
a.menu:hover,
a.menu:active {
    color      : #3cc8a8;
}

删除辅助颜色等,我们有一个版本 0.1 可供进一步测试和扩展。


原答案:


问题不止一个。首先是标记:

XHTML

<link rel="icon" type="image/png" href="./pictures/favicon.png">
Should be:
<link rel="icon" type="image/png" href="./pictures/favicon.png" />

<link rel="stylesheet" type="text/css" href="style.css">
Should be:
<link rel="stylesheet" type="text/css" href="style.css" />

<img src="./pictures/header.png" width="439" height="131" border="0" alt="">
Should be XHTML 1.0 Strict img tag does not have a border attribute, and need
to be closed:
<img src="./pictures/header.png" width="439" height="131" alt="" />

<hr class="main" /></hr>
Should be:
<hr class="main" />

使用段落来分组文本,而不是:

Text<br/><br/>Text<br/><br/>Text ...

但是:

<p>Text</p><p>Text</p><p>Text... </p>

CSS

内联 cmets 无效,请使用:

/* some comment */
Not:
// some comment

您的大多数 padding 值都缺少单位。如果一个值不为零,则需要一个单位,例如ptpx 等。使用:

padding: 5px 0 0 20px;
/* Not: */
padding: 5 0 0 20;

如果你不这样做,它没有/(不应该有任何)效果。

background-repeat 没有repeat-xy。使用:

background-repeat: repeat;
/* not */
background-repeat: repeat-xy;

或者什么都没有,因为这是默认设置。


先解决这些问题。然后为你的事物设置一些颜色,这样更容易理解你想要什么。您可以稍后将它们改回来。使用红色、蓝色等。

Example.


关于零宽度无空格的bug,如Vim中所示:

【讨论】:

  • @Vova:很高兴你发现它有帮助。另请注意,我在最终的 CSS 中添加了一些注释。在 HTML、CSS 等方面,我还没有完全学会,猜想没有人会。这篇文章也很短,(尽管对于这个网站来说很长;)。作为初学者,最终结果可能没问题,但您可能会发现需要更改的内容(如果您使用其中任何一项)。强烈建议您阅读以下内容:docs.webplatform.org/wiki/css/tutorials 以熟悉其中的许多主题。他们还有 HTML 文章等。
  • @Vova:还有。我在代码中的重置相当粗糙。在 Web 上搜索诸如 CSS reset 之类的内容以查看该主题。例如:stackoverflow.com/q/11578819/3278057 你可能会发现你想在你的 CSS 或类似的顶部包含类似 meyerweb.com/eric/tools/css/reset 的东西。这一切都取决于需求。
  • 现在...我几乎完成了所有更改...当我将其转换为 PHP 并将其上传到网络上...它向我展示了主要内容和页脚之间的 div 中的一个洞- 正如你在这里看到的:gvp.cz/~mryshchuk/index.php 否则...通过 html 一切正常 (gvp.cz/~mryshchuk/pc-servis.html)
  • @Vova:在页脚打开 &lt;div 之前有一个不可见的 0xfeff 字节。这可能会导致您看到的问题。
  • 结果如下所示:&lt;feff&gt;&lt;div id="footer"&gt; Copyright © 2014, EWITA s.r.o. &lt;/div&gt; &lt;/div&gt; 其中&lt;feff&gt; 是一个字节,可能是您的 PHP 文件中的一个杂散字节。将您的编辑器设置为显示不可见字符并将其删除。
【解决方案2】:

尝试添加这个 CSS:

CSS:

#wrapper {

margin: auto;
min-height: 500px;
background-image: URL('../images/squared_metal.png');
background-repeat: repeat-xy;
z-index: 10;
padding-top:10px;
margin-top:-30px; 
}

#content {
margin:auto;
width:700px;
background-color:#ffffff;
margin-top: 10px;
border:1px solid;
padding: 50 30 50 30;
}

我最初完全忽略了'padding-top' css 属性。感谢大家提供这些信息!

请使用此 CSS 更新您的网站,并让我知道它是否有效!因为我在自己的机器上测试过,所以你应该把 background-url 改回你的自定义 .png 文件。

【讨论】:

  • 是的,我试过了……现在看看。我还对此#content { margin:auto; 进行了更改宽度:700 像素;背景颜色:#ffffff;边距顶部:40px; (> 80 PX) 边框:1px 实心;填充:50 30 50 30;如果我离开了 40,它就在该线下方的位置,但我希望内容 div 在线下方 20 像素...但已经有背景.. 有麻烦:(((
  • 您根本不需要空格吗?
  • 对,我一点也不想要。
  • 我注意到您将“内容”ID 中的 margin-top 设置为 80 像素,为什么不将其保留为 40 像素,这样标题和包装器之间就不会有空格?
  • 因为我希望页面上的#content 稍微低一点。正如我所写的,如果它是 40,那么没关系,没有空格,但就在灰线下面...遗憾的是它不是我想要的。