一.定位

1)静态定位 

position:static(默认)

2)相对定位

position:relative(要配合top、bottom、left、right等属性来使用)

3)绝对定位

position:absolute

  • 绝对定位固定元素是相对于 <html> 元素或其最近的“positioned”祖先元素,一个“positioned”元素是指 position 值不是 static 的元素。

4)固定定位

position:fixed(要配合top、bottom、left、right等属性来使用)

  • 固定定位固定元素则是相对于浏览器视口本身

5)堆叠顺序

z-index

几种定位的区别:https://baijiahao.baidu.com/s?id=1631432397252663686&wfr=spider&for=pc

http://zh.learnlayout.com/position.html

二、弹性盒子Flexbox

display:flex

属性 备注
flex-direction 指定主轴的方向 row/column,默认是row
flex-wrap 换行 wrap/wrap-reverse,flex-direction和flex-wrap可以合并为flex-flow: row wrap;
flex 三个属性的缩写,flex-grow/flex-shrink /flex-basis flex:0 1 auto(默认)
align-items 控制在交叉轴的位置 stretch(默认)/center/flex-start/flex-end
justify-content 控制在主轴上的位置 flex-start(默认)/flex-end/center/space-around(均匀分布)/space-between(不会在两端留下任何空间)
order flex项排序 数字,默认0,越大越后面

三、布局

3.1 布局模型

  • flow 流动模型(默认)
  • float 浮动模型
  • layer 层模型

3.1.1 流动模型

两个典型的特征:

  • 块状元素以行的形式占据位置(独占一行),自上而下按顺序垂直延伸分布
  • 行内元素在所包含元素内从左到右水平分布显示

3.1.2 浮动模型

任何元素默认不能浮动,使用css定义浮动

div{float:left;}  div{float:right;}

3.1.3 层模型

三种形式:

  • 相对定位-position:relative
  • 绝对定位-position:absolute
  • 固定定位-position:fixed

3.1.4 z-index

利用该属性,可以改变元素相互覆盖的顺序

  • 只对定位元素有效(即position属性值为relative/absolute/fixed)
  • 父子关系处理:如果父元素z-index有效,那么无论族元素是否设置z-index都会在父元素上方
  • 相同z-index:若都没有设置改值,一个定位一个没有定位,定位元素覆盖未定位元素;若都没有定位但发生了重合或者都定位了且发生了位置重合,则按照文档流顺序,后面的覆盖前面的。

3.2 float详解

3.2.1 float多个特性

  • 破坏性——破坏了父标签的原本结构,父标签出现了坍塌

  • 包裹性——普通的div如果不设置宽度,会撑满整个屏幕宽度,设置了float之后,宽度自动调整为包裹着内容宽度,而不是撑满整个父容器

  • 清空格——正常的img之间是有空格的,增加了float之后,img之间没有空格,根本原因是float会导致节点脱离文档流结构

3.2.2 清除浮动

  • 为父元素添加    overflow:hidden(父元素就有了高度,但不会发生坍塌)
  • 浮动父元素
  • clear:both——通过在所有浮动元素下方添加一个clear:both的元素,可以消除float的破坏性。
  • clearfix——通过伪元素选择器,在div后面增加了一个clear:both的元素,跟第三种方法是一个道理

3.3 网页布局方式

3.3.1 一列布局

固定宽和高,设置margin:0 auto来水平居中

3.3.2 二列布局

最常见的就是使用float来实现,但会出现文本环绕等效果,需要及时清除浮动

  • 如何父级元素没有设置高度,则需要设置overflow:hidden来清除浮动产生的影响
  • 对于自己相邻元素清除浮动产生的影响用:clear:both;

3.3.3 三列布局

两侧定宽中间自适应

首先设置父级元素的宽度,可以左左右设置浮动。然后中间设置margin调整间距。 也可以都设置成左浮动,设置margin,调整间距。同样注意清除浮动的影响!

 <div class="main">
<div class="left">left</div>
<div class="middle">middle</div>
<div class="right">right</div>
</div>
.main{
width: 100%;
background: red;
overflow: hidden;
}
.left{
background: yellow;
float: left;
width: 100px;
}
.middle{
background: rosybrown;
float: left;
width: cacl(100%-200px);
}
.right{
background: green;
float: right;
width: 100px%;
}

或者为父级元素设置relative属性,再为子元素设置absolute属性,再分别定位,调整间距

<div class="parent" style="background-color: lightgrey;">
<div class="left" style="background-color: lightblue;">
<p>left</p>
</div>
<div class="center" style="background-color: pink;">
<p>center</p>
<p>center</p>
</div>
<div class="right" style="background-color: lightgreen;">
<p>right</p>
</div>
</div>
<style>
p{margin:;}
.parent{position: relative;height:40px;}
.left,.right,.center{position: absolute;}
.left{left:;width:100px;}
.right{right:;width: 100px;}
.center{left: 120px; right: 120px;}
</style>

3.3.4 混合布局

在一列布局的基础上,保留top和foot部分,将中间的main部分改造成两列或三列布局,小的模块可以再逐级同理划分。

<div class="top"></div>
<div class="main">
<div class="left">left</div>
<div class="right">right</div>
</div>
<div class="footer"></div>
.top{
height: 100px;
background: teal;
}
.footer{
height: 100px;
background: wheat;
}
.main{
width: 100%;
background: red;
overflow: hidden;
}
.left{
background: yellow;
float: left;
width: 50%;
}
.right{
background: green;
float: right;
width: 50%;
}

3.4 对齐方式

3.4.1 水平居中

(1)行内元素的水平居中

如果被设置元素为文本、图片等行内元素时,在父元素中设置text-align:center实现行内元素水平居中,将子元素的display设置为inline-block,使子元素变成行内元素

<div class="parent" style="background-color: gray;">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>
<style>
.parent{text-align: center;}
.child{display: inline-block;}
</style>

(2)块状元素的水平居中(定宽)

当被设置元素为定宽块级元素时用 text-align:center 就不起作用了。可以通过设置“左右margin”值为“auto”来实现居中的。

<div class="parent" style="background-color: gray;">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>
.child{
width: 200px;
margin: 0 auto;
}

(3)块状元素的水平居中(不定定宽)

在实际工作中我们会遇到需要为“不定宽度的块级元素”设置居中,比如网页上的分页导航,因为分页的数量是不确定的,所以我们不能通过设置宽度来限制它的弹性。

可以直接给不定宽的块级元素设置text-align:center来实现,也可以给父元素加text-align:center 来实现居中效果。

当不定宽块级元素的宽度不要占一行时,可以设置display 为 inline 类型或inline-block(设置为 行内元素 显示或行内块元素)

<div class="container">
<ul>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
</ul>
</div>
.container{text-align:center;background: beige}
.container ul{list-style:none;margin:;padding:;display:inline-block;}
.container li{margin-right:8px;display:inline-block;}

3.4.2 垂直居中

和水平居中一样,这里要讲垂直居中,首先设定两个条件即父元素是盒子容器且高度已经设定

场景1:子元素是行内元素,高度是由其内容撑开的

这种情况下,需要通过设定父元素的line-height为其高度来使得子元素垂直居中

<div class="wrap line-height">
<span class="span">111111</span>
</div>
.wrap{
width:200px ;
height: 300px;
line-height: 300px;
border: 2px solid #ccc;
}
.span{
background: red;

场景2:子元素是块级元素但是子元素高度没有设定

在这种情况下实际上是不知道子元素的高度的,无法通过计算得到padding或margin来调整,但是还是存在一些解法。

通过给父元素设定display:table-cell;vertical-align:middle来解决

<div class="wrap">
<div class="non-height ">11111</div>
</div>
.wrap{
width:200px ;
height: 300px;
border: 2px solid #ccc;
    display: table-cell;
    vertical-align: middle;
}
.non-height{
background: green;
}

场景3:子元素是块级元素且高度已经设定

计算子元素的margin-top或margin-bottom,计算方法为父(元素高度-子元素高度)/2

<div class="wrap ">
<div class="div1">111111</div>
</div>
.wrap{
width:200px ;
height: 300px;
border: 2px solid #ccc;
}
.div1{
width:100px ;
height: 100px;
margin-top: 100px;
background: darkblue;
}

3.4.3 水平垂直居中

(1)水平对齐+行高

text-align + line-height实现单行文本水平垂直居中

<style>
.test{
text-align: center;
line-height: 100px;
}
</style>
<div class="test" style="background-color: lightblue;width: 200px;">测试文字</div>

(2)水平+垂直对齐

<style>
.parent{
display: table-cell;
text-align: center;
vertical-align: middle;
}
.child{
display: inline-block;
}
</style>
<div class="parent" style=" width:200px; height:100px;">
<div class="child" style="">测试文字</div>
</div>
  • 若子元素是图像,可不使用table-cell,而是其父元素用行高替代高度,且字体大小设为0。子元素本身设置vertical-align:middle
<div class="parent" style="background-color: gray; width:200px; ">
<img class="child" src="http://sandbox.runjs.cn/uploads/rs/26/ddzmgynp/img1.gif" width="50%" alt="test">
</div>
<style>
.parent{
text-align: center;
line-height: 100px;
font-size:;
}
.child{
vertical-align: middle;
}
</style>

(3)相对+绝对定位

使用absolute,利用绝对定位元素的盒模型特性,在偏移属性为确定值的基础上,设置margin:auto

<style>
.parent{
position: relative;
}
.child{
position: absolute;
top:;
left:;
right:;
bottom:;
height: 50px;
width: 80px;
margin: auto;
}
</style>
<div class="parent" style="background-color: lightgray; width:200px; height:100px; ">
<div class="child" style="background-color: lightblue;">测试文字</div>
</div>

Day6前端学习之路——布局的更多相关文章

  1. jQuery延迟加载(懒加载)插件 – jquery.lazyload.js-Web前端(W3Cways.com) - Web前端学习之路

    Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...

  2. 前端学习之路-CSS介绍,Html介绍,JavaScript介绍

    CSS介绍 学前端必备掌握CSS样式,css为层叠样式表,用来定义页面的显示效果,加强用户的体验乐趣,那么如何用css到html中呢? style属性方式 利用标签中的style属性来改变显示样式 & ...

  3. Day7前端学习之路——多栏布局

    该文章主要讨论两栏布局和三栏布局,三栏布局包括很著名的圣杯布局和双飞翼布局 一.两栏布局的七种方法(左边固定,右边自适应) 原理: block水平元素宽度能够跟随父容器调节的流动特性,block级别的 ...

  4. web前端学习之路

    test 随着自己对于web前端知识了解的越多,越来越发现自己真的好菜 一脸茫然阶段 两年前大学接触网页设计,那时对于网页设计一窍不通,只是看了一本自己大学编的一本入门教材,我甚至不知道那些网页设计的 ...

  5. Day1前端学习之路——概述

    终于下定决心要好好学习前端知识了,以后会把学习过程中的一些随笔记录在这里.HTML.CSS.JavaScript这三大前端语言在大三的时候就有所接触,但是学习的不够深入,这一次希望能够坚持下去. 学习 ...

  6. 前端学习_01_css网页布局

    引子 之前也自己陆陆续续地学了一些web方面的知识,包括前段和后端都有涉及到,自己也比较感兴趣,感谢peter老师,愿意无偿提供从零开始的教学,之前也看过peter老师的一些视频,节奏非常适合我,决心 ...

  7. 前端学习之路之CSS (四)

    Infi-chu: http://www.cnblogs.com/Infi-chu/ CSS盒子模型    概念:CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际 ...

  8. 前端学习之路——scss篇

    一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 二.安装和使用 Sass依赖于ruby环境,所以装sass之前先 ...

  9. 前端学习之路——Git篇

    本文只是一个个人学习Git的笔记,如有错误的地方,还望指出,谢谢!参考资料如下: <Git教程--廖雪峰的官方网站 > bootstrap里面的--git_guide Git安装 在网上搜 ...

随机推荐

  1. load文件到hive,并保存

    DataFrame usersDF = sqlContext.read().load("hdfs://spark1:9000/users.parquet"); usersDF.se ...

  2. 【UWP】使用 LiteDB 存储数据

    序言: 在 UWP 中,常见的存储数据方式基本上就两种.第一种方案是 UWP 框架提供的 ApplicationData Settings 这一系列的方法,适用于存放比较轻量的数据,例如存个 Bool ...

  3. 20190918Java课堂记录

    1. EnumTest.java public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; ...

  4. excel中为什么不显示单引号

    解决:打两个就可以了!因为:一个单引号表示该单元格为文本属性.

  5. Numpy科学计算从放弃到入门

    目录 一.什么是Numpy ndarray对象 相关文档 二.如何创建数组 三.如何访问数组 下标索引 切片索引 布尔型索引 整数索引 方形索引 四.如何做算数运算 五.如何使用统计函数 六.数组转置 ...

  6. .net core 3.1 DbFirst mysql

    这是一套完全配置正确的方式 创建项目此步骤省略 打开nuget 搜索 Pomelo.EntityFrameworkCore.MySql 添加完毕该引用之后nuget 搜索 Microsoft.Enti ...

  7. 洛谷P2585 [ZJOI2006]三色二叉树

    题目描述 输入输出格式 输入格式: 输入文件名:TRO.IN 输入文件仅有一行,不超过10000个字符,表示一个二叉树序列. 输出格式: 输出文件名:TRO.OUT 输出文件也只有一行,包含两个数,依 ...

  8. 你可能不知道的 Python 技巧

    英文 | Python Tips and Trick, You Haven't Already Seen 原作 | Martin Heinz (https://martinheinz.dev) 译者 ...

  9. [计算几何+图论]doge

    题意 在平面直角坐标系上,你有一只doge在原点处.doge被绳子拴住了,绳子不会打结,没有弹性(但很柔软),并且长度为L.平面上有一些目标,因此你的doge会按照顺序去捡起它们,但是doge只能走直 ...

  10. CSS-13-块级元素和行内元素

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...