`

CSS学习笔记--定位

 
阅读更多


CSS 定位机制

CSS 有三种基本的定位机制:普通流、浮动和绝对定位。

除非专门指定,否则所有框都在普通流中定位。也就是说,普通流中的元素的位置由元素在 (X)HTML 中的位置决定。

块级框从上到下一个接一个地排列,框之间的垂直距离是由框的垂直外边距计算出来。

行内框在一行中水平布置。可以使用水平内边距、边框和外边距调整它们的间距。但是,垂直内边距、边框和外边距不影响行内框的高度。由一行形成的水平框称为行框(Line Box),行框的高度总是足以容纳它包含的所有行内框。不过,设置行高可以增加这个框的高度。

在下面的章节,我们会为您详细讲解相对定位、绝对定位和浮动。

CSS position 属性

通过使用 position 属性,我们可以选择 4 种不同类型的定位,这会影响元素框生成的方式。

position 属性值的含义:

static

默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。

relative

元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。

absolute

元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。

fixed

元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。

inherit

规定应该从父元素继承 position 属性的值。


提示:相对定位实际上被看作普通流定位模型的一部分,因为元素的位置相对于它在普通流中的位置。


CSS 相对定位

设置为相对定位的元素框会偏移某个距离。元素仍然保持其未定位前的形状,它原本所占的空间仍保留。

相对定位是一个非常容易掌握的概念。如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。


注意,在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间。因此,移动元素会导致它覆盖其它框。


CSS 绝对定位

设置为绝对定位的元素框从文档流完全删除,并相对于其包含块定位,包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。

绝对定位使元素的位置与文档流无关,因此不占据空间。这一点与相对定位不同,相对定位实际上被看作普通流定位模型的一部分,因为元素的位置相对于它在普通流中的位置。

普通流中其它元素的布局就像绝对定位的元素不存在一样。


对于定位的主要问题是要记住每种定位的意义。所以,现在让我们复习一下学过的知识吧:相对定位是“相对于”元素在文档中的初始位置,而绝对定位的元素的位置相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块

注释:根据用户代理的不同,最初的包含块可能是画布或 HTML 元素。

提示:因为绝对定位的框与文档流无关,所以它们可以覆盖页面上的其它元素。可以通过设置 z-index 属性来控制这些框的堆放次序。


CSS 浮动

浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。

由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。

float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。

如果浮动非替换元素,则要指定一个明确的宽度;否则,它们会尽可能地窄。

行框和清理

浮动框旁边的行框被缩短,从而给浮动框留出空间,行框围绕浮动框。

因此,创建浮动框可以使文本围绕图像:


要想阻止行框围绕浮动框,需要对该框应用 clear 属性。clear 属性的值可以是 left、right、both 或 none,它表示框的哪些边不应该挨着浮动框。

为了实现这种效果,在被清理的元素的上外边距上添加足够的空间,使元素的顶边缘垂直下降到浮动框下面:


这是一个有用的工具,它让周围的元素为浮动元素留出空间。

让我们更详细地看看浮动和清理。假设希望让一个图片浮动到文本块的左边,并且希望这幅图片和文本包含在另一个具有背景颜色和边框的元素中。您可能编写下面的代码:


这种情况下,出现了一个问题。因为浮动元素脱离了文档流,所以包围图片和文本的 div 不占据空间。

如何让包围元素在视觉上包围浮动元素呢?需要在这个元素中的某个地方应用 clear:


不幸的是出现了一个新的问题,由于没有现有的元素可以应用清理,所以我们只能添加一个空元素并且清理它。


这样可以实现我们希望的效果,但是需要添加多余的代码。常常有元素可以应用 clear,但是有时候不得不为了进行布局而添加无意义的标记。

不过我们还有另一种办法,那就是对容器 div 进行浮动:


这样会得到我们希望的效果。不幸的是,下一个元素会受到这个浮动元素的影响。为了解决这个问题,有些人选择对布局中的所有东西进行浮动,然后使用适当的有意义的元素(常常是站点的页脚)对这些浮动进行清理。这有助于减少或消除不必要的标记。



元素居中:

用CSS让元素居中显示并不是件很简单的事情—同样的合法CSS居中设置在不同浏览器中的表现行为却各有千秋。让我们先来看一下CSS中常见的几种让元素水平居中显示的方法。

  1.使用自动外边距实现居中
  CSS中首选的让元素水平居中的方法就是使用margin属性—将元素的margin-left和margin-right属性设置为auto即可。在实际使用中,我们可以为这些需要居中的元素创建一个起容器作用的div。需要特别注意的一点就是,必须为该容器指定宽度:
  div#container {

  margin-left: auto;

  margin-right: auto;

  width: 168px;

  }

  在大多数主流浏览器中,这种方法都非常有效,即使是Windows平台上的IE6,在其标准兼容模式(compliance mode)下也能够正常显示。但不幸的是,在更低版本的IE中,这种设置却并不能实现居中效果。所以若想在实际项目中使用这种方法,那么就要确保用户的IE浏览器版本不低于6.0。
  尽管在支持上不尽如人意,但大多数设计师都建议尽可能地使用这种方法。该方法也被认为是在各种用CSS实现元素水平居中方法中最正确、最合理的一种。
  2.使用text-align实现居中
  另一种实现元素居中的方法是使用text-align属性,将该属性值设置为center并应用到body元素上即可。这种做法是彻头彻尾的hack,但它却能兼容大多数浏览器,所以在某些情况下也自然必不可少。
  之所以说它是hack,是因为这种方法并没有将文本属性应用到文本上,而是应用到了作为容器的元素上。这也给我们带来了额外的工作。在创建好布局必须的div之后,我们要按照如下代码为body应用text-align属性:

  body{

  text-align:center;

  }

  之后会出现什么问题吗?body的所有子孙元素都会被居中显示。
  因此,我们就需要用再写一条规则,让其中的文本回到默认的居左对齐:

  p {
  text-align:left;
  }

  可以想象这条附加的规则将带来一些不便。另外,真正完全遵循标准的浏览器并不会改变容器的位置,而只会让其中的文字居中显示。
  3.组合使用自动外边距和文本对齐
  因为文本对齐居中方式有着良好的向下兼容性,且自动外边距方式也被大多数当代浏览器支持,所以很多设计师将二者组合起来使用,以期让居中效果得到最大限度的跨浏览器支持:

  body {
  text-align: center;
  }
  #container {
  margin-left: auto;
  margin-right: auto;
  border: 1px solid red;
  width: 168px;
  text-align: left
  }

  可是这始终是个hack,无论如何也算不上完美。我们还是需要为居中容器中的文本编写附加的规则,但至少在各个浏览器中看起来都不错。
  4.负外边距解决方案
  负外边距解决方案远不是仅仅为元素添加负外边距这么简单。这种方法需要同时使用绝对定位和负外边距两种技巧。
  下面是该方案的具体实现方法。首先,创建一个包含居中元素的容器,然后将其绝对定位于相对页面左边边缘50%的位置。这样,该容器的左外边距将从页面50%宽度的位置开始算起。
  然后,将容器的左外边距值设置为负的容器宽度的一半。这样即可将该容器固定在页面水平方向的中点。

  #container {
  background: #ffc url(mid.jpg) repeat-y center;
  position: absolute;
  left: 50%;
  width: 760px;
  margin-left: -380px;
  }

  看,没有任何hack!虽然这并不是首选的解决方案,但也是个不错的方法,且适用性极广—甚至在Netscape Navigator 4.x中都没有任何问题,很令人吃惊,不是吗?所以若想得到最广泛的浏览器支持,那么这种方法将会是最好的选择。




替换和不可替换元素:

元素是文档结构的基础,在CSS中,每个元素生成了一个包含了元素内容的框(box,也译为“盒子”)。但是不同的元素显示的方式会有所不同,例如<div>和<span>就不同,而<strong>和<p>也不一样。在文档类型定义(DTD)中对不同的元素规定了不同的类型,这也是DTD对文档之所以重要的原因之一。

1. 替换和不可替换元素

从元素本身的特点来讲,可以分为替换和不可替换元素。

a) 替换元素

替换元素就是浏览器根据元素的标签和属性,来决定元素的具体显示内容。

例如浏览器会根据<img>标签的src属性的值来读取图片信息并显示出来,而如果查看(X)HTML代码,则看不到图片的实际内容;又例如根据<input>标签的type属性来决定是显示输入框,还是单选按钮等。

(X)HTML中的<img>、<input>、<textarea>、<select>、<object>都是替换元素。这些元素往往没有实际的内容,即是一个空元素,例如:

<img src=”cat.jpg” />
<input type="submit" name="Submit" value="提交" />

浏览器会根据元素的标签类型和属性来显示这些元素。可替换元素也在其显示中生成了框。

b) 不可替换元素

(X)HTML 的大多数元素是不可替换元素,即其内容直接表现给用户端(例如浏览器)。例如:

<p>段落的内容</p>

段落<p>是一个不可替换元素,文字“段落的内容”全被显示。

2. 显示元素

除了可替换元素和不可替换元素的分类方式外,CSS 2.1中元素还有另外的分类方式:块级元素(block-level)和行内元素(inline-level,也译作“内联”元素)。

a) 块级元素

在视觉上被格式化为块的元素,最明显的特征就是它默认在横向充满其父元素的内容区域,而且在其左右两边没有其他元素,即块级元素默认是独占一行的。

典型的块级元素有:<div>、<p>、<h1>到<h6>,等等。

通过CSS设定了浮动(float属性,可向左浮动或向右浮动)以及设定显示(display)属性为“block”或“list-item”的元素都是块级元素。

但是浮动元素比较特殊,由于浮动,其旁边可能会有其他元素的存在。而“list-item”(列表项<li>),会在其前面生成圆点符号,或者数字序号。

b) 行内元素

行内元素不形成新内容块,即在其左右可以有其他元素,例如<a>、<span>、<strong>等,都是典型的行内级元素。

display属性等于“inline”的元素都是行内元素。几乎所有的可替换元素都是行内元素,例如<img>、<input>等等。

不过元素的类型也不是固定的,通过设定CSS 的display属性,可以使行内元素变为块级元素,也可以让块级元素变为行内元素。




在一种情况下,即使没有进行显式定义,也会创建块级元素。这种情况发生在把一些文本添加到一个块级元素(比如div)的开头。即使没有把这些文本定义为段落,它也会被当作段落对待:

<div>

some text

<p>Some more text.</p>

</div>

在这种情况下,这个框称为无名块框,因为它不与专门定义的元素相关联。


分享到:
评论

相关推荐

    CSS学习笔记-适合初学者

    【CSS学习笔记-适合初学者】 CSS,全称Cascading Style Sheets,即层叠样式表,是网页设计中用于控制页面布局和样式的语言。它与HTML或XML(包括SVG、XHTML等)等标记语言配合使用,使得网页内容表现更加丰富、美观...

    css-html-jsp-xml学习笔记

    【CSS】 CSS,全称Cascading Style Sheets,是一种样式表语言,用于定义HTML或XML(包括如...这些笔记涵盖了Web开发的基础知识,适合初学者入门,通过学习和实践,可以逐步掌握创建动态、响应式和数据驱动的网页应用。

    CSS学习笔记~~~~

    在`CSS学习笔记-01.md`、`CSS学习笔记-02.md`和`CSS学习笔记-03.md`中,可能会深入讲解这些概念,包括更多选择器用法、布局技巧、CSS3特效和预处理器的使用,帮助读者逐步掌握这个强大的样式语言。

    HTML&CSS基础自学笔记---实现静态网页

    CSS则提供了丰富的样式控制,包括但不限于文字样式、背景设置、盒子模型、浮动、定位、以及动画和3D效果。文字样式可以通过`color`、`font-size`等属性调整;背景可以设置颜色、图像、重复方式等;盒子模型包括`...

    《韩顺平轻松搞定网页设计》DIV+CSS学习笔记

    - **选择器**:CSS提供了多种类型的选择器,包括元素选择器、类选择器、ID选择器等,用于精准地定位并应用样式到特定的HTML元素上。 - **元素选择器**:如`p`、`div`等,直接根据元素类型进行样式设置。 - **类...

    CSS样式学习笔记之二:定位

    在CSS样式的学习中,定位(Positioning)是一个关键的概念,它允许我们精确地控制元素在网页上的布局。本文将深入探讨CSS定位机制,包括static、relative、absolute、fixed以及flex和grid布局中的定位规则。 首先,...

    笔记-day08-前端基础CSS第六天.pdf

    今天,我们将学习 CSS 定位的基础知识,包括为什么需要使用定位、定位的组成部分、定位模式的分类和特点等。 为什么需要使用定位? ----------------- 在学习 CSS 定位之前,我们需要了解为什么需要使用定位。在...

    HTML_CSS学习笔记.docx

    - 浮动(float)、定位(position)以及新的布局模式,如 Flexbox(弹性盒模型)。 14. Flexbox: - 提供了一种灵活的布局方式,允许内容沿主轴和交叉轴方向自动调整。 15. CSS3 样式设置小技巧: - 使用预...

    DIV+css学习笔记

    总的来说,`DIV+CSS`学习笔记涵盖了CSS的基础概念、选择器、布局、定位、文本、图像、链接样式以及列表等多个方面,是构建网页布局和设计不可或缺的知识。深入理解和熟练运用这些知识点,可以提升网页设计的效率和...

    div css学习笔记

    以上内容总结了DIV CSS学习笔记中的关键知识点,包括文档类型声明、CSS选择器、CSS引入方式、布局模型以及背景与边框设置。这些知识对于前端开发者来说至关重要,能够帮助他们创建结构良好、样式丰富的网页。

    CSS学习笔记(手写版)

    ### CSS学习笔记(手写版) #### CSS基础知识 **CSS**(Cascading Style Sheets,层叠样式表)是一种用于定义HTML文档外观的语言。它可以让网页具有更好的视觉表现力,同时使得HTML文档更加语义化。 1. **CSS选择...

    黑马前端css笔记.zip

    总结,"黑马前端css笔记.zip"包含了CSS3的重要知识点,如选择器扩展、媒体查询、响应式设计、渐变效果、布局技术(Flexbox和Grid)以及动画过渡等。这些内容对于前端开发人员深入理解和运用CSS3至关重要,能帮助他们...

    CSS学习笔记 培训时候老师讲的我做的笔记

    【CSS学习笔记】是我在参加专业培训时记录的详尽资料,这些笔记涵盖了从基础到进阶的各种CSS知识点,对于想要深入理解或学习CSS的人来说,具有很高的参考价值。以下是笔记中涉及的一些关键概念和技巧: 1. **CSS...

    html css js全套学习笔记+举例

    CSS使用选择器来定位HTML元素,并应用样式规则。CSS3新增了许多功能,如多列布局、伪类和伪元素、边框和背景图像的高级处理、以及过渡和动画,极大地提升了网页的视觉表现力。此外,CSS3还支持媒体查询,实现响应式...

    狂神Java学习笔记————前端入门——html、css、JavaScript学习代码

    【狂神Java学习笔记——前端入门——HTML、CSS、JavaScript学习代码】是针对初学者的一份详实的学习资料,这份笔记记录了跟随B站知名up主“遇见狂神说”的java系列视频中关于前端开发的基础内容。笔记内容不仅与视频...

    CSS 学习笔记之CSS Selector

    CSS选择器是CSS(层叠样式表)中用于定位网页元素并为其添加样式的重要工具。理解并熟练掌握CSS选择器是每个前端开发者的基础技能。下面将详细解释CSS选择器的各种类型及其用法。 1. 类型选择器: 类型选择器是最...

    html+css学习笔记.pdf

    在HTML+CSS学习笔记中,我们重点讨论了以下几个CSS知识点: 1. **CSS选择符**: - **标签选择符**:通过HTML标签名如`&lt;p&gt;`,`&lt;h1&gt;`等来指定样式。 - **ID选择符**:使用`#`后跟唯一的ID名称,适用于页面中只出现...

    CSS样式学习笔记之一:基础知识

    这篇学习笔记将引导我们深入了解CSS的基本概念、选择器、盒模型、布局方式以及样式优先级等核心知识点。 首先,我们从CSS的基本概念开始。CSS是一种样式语言,用于描述HTML或XML(包括如SVG、MathML等各种XML方言)...

    【DIV+CSS学习笔记】CSS样式命名规范

    - `layout.css`用于布局相关的样式,如页面结构和定位。 - `font.css`包含所有字体相关样式。 - `link.css`专门处理链接的样式。 - `print.css`用于设置打印时的样式,确保打印版面的合理性。 2. **类和ID命名...

    css网页布局学习笔记

    本学习笔记将深入探讨CSS在网页布局中的应用,帮助读者掌握如何利用CSS创建美观且响应式的网页。 一、CSS基础 在了解网页布局之前,我们需要熟悉CSS的基本语法和选择器。CSS通过选择器来指定要应用样式的HTML元素,...

Global site tag (gtag.js) - Google Analytics