【从0到1学Web前端】CSS定位问题三(相对定位,绝对定位)

引子:

开始的时候我想先要解决一个问题,怎么设置一个div盒子撑满整个屏幕?

看下面的html代码:

<body>
    <div id="father-body">
        <div class="item1"></div>
    </div>
</body>

实现方法一:

html, body,#father-body{
            height:100%;
            width:100%;
            background-color:#123456;
        }

这里主要解释下%(百分号)在CSS中使用的问题。% 主要是在父级元素或者是祖先元素定义了固定的widthheight 的时候才可以使用(或者说使用的时候才会有效果)。

实现方法二:

#father-body{
            position:fixed;
            width:100%;
            height:100%;
            background-color:#123456;
        }

这里为#father-body 设置position属性,触发自身的BFC。当对自身使用widthheight的时候才可以生效。

position的fixed值的含义:

对象脱离常规流,使用 toprightbottomleft等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。

position属性的几个值的概念:

1.相对定位

有了以上的定义,来看一段代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    .item1, .item2, .item3{
        width:300px;
        height:100px;
        background-color:#123456;
        margin:20px;
    }
        .item2{
            position:relative;
            /*top:40px;
            left:40px;*/
            margin:40px 0 0 40px;
        }
    </style>
</head>
<body>
    <div>
        <div class="item1"></div>
        <div class="item2"></div>
        <div class="item3"></div>
    </div>
</body>
</html>

效果如下图:

当我们使用top right bottom left 这样的属性的时候,CSS代码如下:

<style type="text/css">
    .item1, .item2, .item3{
        width:300px;
        height:100px;
        background-color:#123456;
        margin:20px;
    }
        .item2{
            position:relative;
            top:40px;
            left:40px;
            /*margin:40px 0 0 40px;*/
        }
    </style>

可以看到的效果图如下图:

到这里可以验证当使用top right bottom left (这四个属性可以设置具体的像素数也可以设置百分比)这样属性改变元素的位置的时候,不会影响其他元素的位置。而使用margin 这样的属性改变元素的位置会影响其他元素的位置。

示意图如下(图片来自W3CSchool):


2.绝对定位

看下面的一段代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        body{margin:20px;}
        #body-div{
            padding:15px;
            background-color:#a0c8ff;
            border:1px solid #000000;
        }

        #body-div div{
            padding:10px;
            background-color:#fff0ac;
            border:1px solid #000000;
        }
    </style>
</head>
<body>
    <div id="body-div">
        <div class="item1">Box-1</div>
        <div class="item2">Box-2</div>
        <div class="item3">Box-3</div>
    </div>
</body>
</html>

效果图如下:

我们为Box-2设置绝对定位属性

.item2{
            position:absolute;
        }

此时Box-2脱离文档流,效果如下:

这个时候Box-3的位置会占据之前Box-2的位置。且Box-2和Box-3的左边框会重合。且盒子的宽度会根据盒子内部的元素自适应。

当盒子设置了绝对定位但是没有使用top right bottom left设置盒子的偏移量的时候,它仍会占据原先的位置。

那么当设置top right bottom left这些属性的时候会是什么效果呢?

设置下面的代码:

.item2{
            position:absolute;
            top:0;
            right:0;
        }

效果如下图:

那么当我们把直接父级元素设置为已定位的元素会怎么样呢?

由上可以得出两个结论:

1.使用绝对定位的盒子以它的“最近”的一个“已经定位”的“祖先元素”为基准进行偏移(定位)。如果没有已经定位的祖先元素,那么就会以浏览器窗口为基准进行定位。

2.决对定位的框从标准流中脱离,这意味着它们对其后的兄弟盒子的定位没有影响。其它的盒子好像就当这个盒子(绝对定位的盒子)不存在一样。

3.z-index属性

z-index属性用于调整定位时重叠块的上下位置,与它的名称一样,如果页面为x-y轴,则垂直于页面的方向为z轴。z-index大的页面位于其值小的的上面。

看下面的代码:

.item1{
            position:relative;
            z-index:3;
        }
        .item2{
            position:absolute;
            top:0;
            right:0;
            z-index:1;
        }

常见定位拓展:

以下的代码我都亲测过,均可以达到效果,就不在展示效果图(如果对代码有疑问可以留言):

1.水平居中

1.1行内元素的水平居中
/*行内元素水平居中*/
        #body-div{
            text-align:center;
        }
1.2块级元素的水平居中
/*块级元素水平居中*/
        #body-div{
            margin:0 auto;
        }
1.3多个块级元素水平居中
/*多个块级元素水平居中*/
        #body-div{
            text-align:center;
        }
        ##body-div-container{
            display:inline-block;
        }

2.水平垂直居中

2.1已知宽度高度的垂直水平居中
/*已知高度和宽度的水平垂直居中*/
        #body-div{
            position:relative;
        }
        #body-div-container{
            width:100px;
            height:100px;
            position:absolute;
            top:50%;
            left:50%;
            margin:-50px 0 0 -50px;
        }
2.2未知宽度高度的垂直水平居中
/*未知高度和宽度的水平垂直居中*/
        #body-div{
            position:relative;
        }
        ##body-div-container{
            position:absolute;
            margin:auto;
            top:0;
            right:0;
            bottom:0;
            left:0;
        }
2.3当被居中的元素是inline或者是inline-block
    #body-div{
            display:table-cell;
            text-align:center;
            vertical-align:middle;
        }
        ##body-div-container{

        }
时间: 2024-12-29 07:48:15

【从0到1学Web前端】CSS定位问题三(相对定位,绝对定位)的相关文章

零基础学WEB前端-CSS

CSS指层叠样式表(Cascading Style Sheets),CSS 是标准的布局语言,用来控制元素的尺寸.颜色.排版.CSS 由 W3C 发明,用来取代基于表格的布局.框架以及其他非标准的表现方法.样式 (style) 定义如何显示 HTML 元素:样式通常存储于样式表中:外部样式表存储于 CSS 文件中. CSS可以解决html代码对样式定义的重复,提高了后期样式代码的可维护性,并增强了网页的显示效果功能.简单一句话:CSS将网页内容和显示样式进行分离,提高了显示功能. 1.CSS基础

【从0到1学Web前端】CSS定位问题二(float和display的使用)

display 属性规定元素应该生成的框的类型. 这个属性用于定义建立布局时元素生成的显示框类型.对于 HTML 等文档类型,如果使用 display 不谨慎会很危险,因为可能违反 HTML 中已经定义的显示层次结构.对于 XML,由于 XML 没有内置的这种层次结构,所有 display 是绝对必要的. 浏览器支持: 所有主流浏览器都支持 display 属性. 注释:任何版本的 Internet Explorer (包括 IE8)都不支持 "inherit"."inlin

【从0到1学Web前端】CSS伪类和伪元素

1.CSS中的伪类 CSS 伪类用于向某些选择器添加特殊的效果. 语法: selector : pseudo-class {property: value} CSS 类也可与伪类搭配使用 selector.class : pseudo-class {property: value} 如下面的一段代码: a.red : visited {color: #FF0000} <a class="red" href="css_syntax.asp">CSS Syn

【从0到1学Web前端】javascript中的ajax对象(一)

现在最流行的获取后端的(浏览器从服务器)数据的方式就是通过Ajax了吧.今天就来详细的来学习下这个知识吧.如果使用ajax来访问后段的数据,浏览器和浏览器端的js做了那些工作呢?我做了一个图,请大家看一下: 1.原生js的Ajax请求的方式 由上面的图我们大致的知道了ajax访问后端数据的一个过程.最重要的就是检测浏览器,创建XMLHttpRequest对象的过程: 代码如下: /* 判断是否支持XMLHttpRequest */ function createXHR() { if (typeo

女孩子适合学web前端还是Java编程?

近几年随着互联网的快速发展,对于Web前端开发的人才需求越来越大,就业薪资也不断的上升,随着行业的火爆,高薪回报吸引了很多有志青年投身互联网行业.女孩子适合学Web前端还是Java? 纵观现阶段互联网Web前端开发工程师的就业人员,女孩子从事这个行业的比例不大,由于这种现象的存在,当有女孩说想要学Web前端开发,很多不一样的声音就出来了,说女生不适合做程序员,其实不然,没有什么东西是你天生做不了的,干不了,只能说明你还不够努力. 虽然少,不是照样有女孩子在做么?而且由于男女比例不协调,所以女生做

新手学web前端应该学什么?

随着互联网的发展速度迅猛,web前端工程师越来越火热,想学习Web前端开发吗 ? 若想成为web前端工程师需要掌握哪些知识?今天小编总结了成为web前端工程师需要掌握的所有知识. 一.基础 1.H5标签 1.1.H5引进的一些新的标签,需要注意article.header.footer.aside.nav以及HTML的标题结构 1.2.理解浏览器解析HTML的过程,理解DOM的树形结构,及相应API 1.3.理解HTML标签在各个浏览器上的默认样式(代理样式),理解CSS中的重置样式表的概念 1

学web前端开发,哪个机构好呢

学习web前端开发已然成为一种潮流,甚至有很多做后台的转行来学.学习web开发,选择一家好的web前端开发机构至关重要.但是,现在各类的web前端开发机构如雨后春笋般迅速崛起,这也增加了我们的选择难度.那么,学web前端开发,哪个机构好呢?我们可以从以下几点进行考察: 第一点,课程是否不断更新,是否符合企业需求 随着时代的发展,各类的IT技术也在不断的更新,当然了web前端开发技术也不例外,作为一名web前端工程师,只有不断的学习新知识才能赶上时代的发展步伐. 所以,这就需要各类的web前端培训

女生学Web前端优势往往很明显

学Web前端的女生不算少数,女生学习的成果也往往不比男生差,前端偏向设计.交互和产品方向,需要更加贴合用户,女生心思细腻,对页面细节把控更好,更具美感,对用户心理把握更准,这样的优势往往是男生所不具备的,女生学Web前端其实一定问题也没有. [关于工作] 1.负责前端架构设计: 2.对Web项目的前端实现方案提供专业指导及监督: 3.对新人及相关开发人员进行前端技能培训: 4.设计并实施前端优化策略: 5.负责前端前沿技术的研究. [关于日常] 1.既有对于新奇技术的不断尝试,也有基础知识的不断

从0开始学web前端

什么是web前端   所谓web前端,就是web给用户展示的东西. 在国内,web前端开发是一个全新的行业,所以国内大学内并没有成熟的课程体系,所以很多学习的人无非是通过自学,以及培训这两种方式.但是自学是很难的,而且现在网上很多的视频以及学习资料都是过期的. 网页制作是计算机专业同学在大学期间都会接触到的一门课程,而学习网页制作所用的第一个集成开发环境(IDE)想必大多是Dreamweaver,这种所见即所得的"吊炸天"IDE为我们制作网页带来了极大的方便.入门快.见效快让我们在不知