• 前端之css


    一. CSS引入方式

    现在的互联网前端分为三层:

    • HTML: 超文本标记语言. 从语义的角度描述页面结构.

    • CSS: 层叠样式表. 从审美的角度负责页面样式.
      JS: JavaScript. 从交互的角度描述页面行为.

    1. CSS优点:

    • 使数据和显示分开
    • 降低网络流量
    • 使整个网站视觉效果一致
    • 使开发效率提高了(耦合性降低, 一个人负责写html,一个人负责写CSS)

    比如说,有一个样式需要在100个页面上显示,如果是html来实现,那要写100遍,现在有了CSS,只要写一遍. 现在,html只提供数据和一些控件,至于其他的各种各样的样式则完全由CSS来提供.

    2. CSS引入方式:

    (1)行内样式

    在元素(标签)内部直接写属性(颜色,大小等样式)

    <p style="color: green">我是一个段落</p>
    
    (2)内接样式

    ​ 在head标签中,在style标签的内部写入CSS

    <style type="text/CSS">
            /*以下是CSS代码*/
            span{
                   color: yellow;
            }
    </style>
    
    (3)外接样式
    • 链入式

    在head标签中用link标签链入CSS

    <link rel="stylesheet" href="./index.CSS">
    
    • 导入式

    在style标签内部使用 @import url("#"); 导入CSS

    <style type="text/CSS">
            @import url('./index.CSS');
    </style>
    

    二. CSS选择器

    1. 基本选择器

    • (1)标签选择器

    标签选择器可以直接选中所有的标签元素, 比如div, ul, li, p等等, 不管标签藏得多深, 都能选中, 选中的是所有的标签, 而不是某一个, 所以说选择的是"共性"而不是"特性".

    用法:

    标签名:{color: red;}
    
    • (2)id选择器

    通过#id名来选中某个元素. 同一个页面中的id绝不可能重复, 任何标签都可以设置id. id的命名规范, 大小写都是严格区分的, 如aa和AA就是两个完全不同的属性值.

    用法:

    #id名{color: red;}
    
    • (3)类选择器

    所谓类就是指class, class与id非常相似, 任何的标签都可以添加类, 但是类是可以重复的, 属于归类的概念. 同一个标签中可以携带多个类, 用空格隔开.类选择器通过.类名来选中某个元素.

    用法:

    .类名{color: red;}
    
    • 总结:
      • a. 不要试图用一个类将我们的页面写完. 这个标签要携带多个类, 共同设置样式
      • b. 每个类要尽可能的小, 要有公共的概念, 能够让更多的标签使用
      • c. 尽量用class, 除非特殊的情况可以用id, 因为id一般是用在js中的, 即js是通过id来获取到元素的

    2. 高级选择器

    • (1)后代选择器

    使用空格表示后代选择器. 后代选择器, 顾名思义, 即父元素的后代(包括儿子, 孙子, 重孙子).

    用法:

    .container p{color: red;}
    
    • (2)子代选择器

    使用>表示子代选择器, 比如div>p, 仅仅表示的是当前div元素选中的(相邻)子元素p(即:不包括孙子).

    用法:

    .container>p{color: red;}
    
    • (3)并集选择器

    多个选择器之间使用逗号,隔开, 表示选中页面中的多个标签, 一些共性的元素, 可以使用并集选择器.

    用法:

    h3,content{color: red;}
    
    • (4)交集选择器

    使用.表示交集选择器. 同时用两种选择器选择一个标签元素, 例如div.active表示选中的是active和div都拥有的元素

    3. 属性选择器

    属性选择器, 字面的意思就是根据标签中的属性, 选中当前的标签.

    用法:

    [for]{color: red;}
    
    input[type='text']{background: red;}
    

    4. 伪类选择器

    伪类选择器一般用在超链接<a>标签中,使用<a>标签的伪类选择器, 我们一定要遵循爱恨准则----LoVe HAte.

    用法:

    a:link{color: #666;}				/*没有被访问过的a标签样式*/
    a:visited{color: yellow;}    		/*访问过后的a标签样式*/
    a:hover{color: green;}    			/*鼠标悬停时a标签的样式*/
    a:active{color: #yellowgreen;}   	/*鼠标按下时a标签的样式*/
    

    注意: link, visited, active这三个只有a标签有, 而horver其他元素也可以用.

    5. 伪元素选择器

    • (1)设置第一个首字母的样式:
    p:first-letter:{color:red; font-size:30;}
    
    • (2)在...之前添加内容:
    p:before{content: 'alex';}
    

    这个属性使用不多, 了解即可, 使用此伪元素选择器一定要结合content属性.

    • (3)在...之后添加内容:
    p:after{content: '&'; color: red; font-size: 40px;}
    

    这个属性使用非常频繁, 通常与布局有很大的关联(清除浮动).

    三. CSS继承性和层叠性

    CSS有两大特性: 继承性层叠性

    1. 继承性

    面向对象语言都会存在继承的概念, 在面向对象语言中, 继承的特点是: 派生类继承父类的属性和方法.

    CSS中的继承: 给父级设置一些属性, 子元素继承了父级该属性.

    • 注意:
      • 有一些属性是可以继承下来: color, font-*, text-*, line-*, 它们主要是一些文本级的标签元素;
      • 但是像一些盒子元素属性, 定位的元素(浮动, 绝对定位, 固定定位)不能继承.

    2. 层叠性和权重问题

    CSS中的层叠性: 权重大的标签覆盖掉了权重小的标签.

    权重: 谁的权重大,浏览器就会显示谁的属性.

    • 总结:
      • a. 先看标签元素有没有被选中, 如果选中了, 就计算元素(id, class, 标签数量)的权重. 谁的权重大, 就显示谁的属性, 权重一样大, 后来者居上.
      • b. 如果没有被选中的标签元素, 权重为0.
      • c. 如果属性都是被继承下来的, 权重都是0. 如果权重都是0, 则遵循"就近原则"(谁描述的近, 就显示谁的属性)

    3. !important 的使用

    !important: 设置权重为无限大(IE不支持)

    !important: 不影响继承来的权重, 只影响选中的元素. 不要随便使用!important,因为使用它会影响页面布局.

    用法:

    选择器(样式: 值!important;)
    

    四. 盒模型

    在CSS中, "box model"这一术语是用来设计和布局时使用的, 在网页中基本上都会显示一些方方正正的盒子. 我们称这种盒子叫盒模型.

    盒模型有两种: 标准模型和IE模型. 我们重点学习标准模型.

    1.盒模型示意图:

    2. 盒模型的属性

    • 内容的宽度
    • height: 内容的高度
    • padding: 内边距,边框到内容的距离
    • border: 边框,盒子的宽度
    • margin: 外边距,盒子边框到附近最近盒子的距离

    3. 盒模型的计算

    如果一个盒子设置了width, height, padding, border (先不设置margin, margin有坑),那么:

    盒子的真实宽度 = width + 2*padding + 2*border
    
    盒子的真实高度 = height + 2*padding + 2*border
    

    4. padding(内边距)

    padding解释内边距的意思, 它是边框到内容之间的距离. 另外, padding的区域是有背景颜色的, 并且背景颜色和内容的颜色一样, 也就是说background-color这个属性将填充满所有的border以内的区域.

    padding有四个方向, 分别描述四个方向的padding.

    • (1)写单独属性, 分别设置不同方向的padding, 如下:
    padding-top: 30px;
    
    padding-right: 30px;
    
    padding-bottom: 30px;
    
    padding-left: 30px;
    
    • (2)写综合属性, 用空格隔开, 如下:
    /*上 右 下 左*/
    padding: 20px 30px 40px 50px;
    
    /*上 左右 下*/
    padding: 20px 30px 40px;
    
    /*上下 左右*/
    padding: 20px 30px;
    
    /*上下左右*/
    padding: 20px;
    

    5. border(边框)

    border: 边框的意思, 描述盒子的边框. 边框有三要素: 粗细, 线性样式, 颜色.

    如果颜色不写, 默认是黑色.

    如果粗细不写, 默认不显示边框.

    如果只写线性样式, 默认的有: 上下左右3px的宽度, 实体样式, 黑色边框.如:

    border: solid;
    

    分别设置三要素, 如下:

    border- 3px;
    
    border-style: solid;    /*还有dotted、double、dashed*/
    
    border-color: red;
    

    注意: 值可以是1个, 2个, 3个, 4个, 对应关系跟上面介绍的padding综合属性是一样的.

    设置一个方向的三要素, 如下:

    border-top- 10px;
    border-top-style: solid;
    border-top-color: red;
    

    上面三行代码相当于下面这一行:

    border-top: 10px solid red;
    

    注意: border: none或者border: 0都表示没有设置样式.

    应用: 使用border来制作小三角

    /*小三角 箭头指向上方*/
    div{
         0;
        height: 0;
        border-bottom: 20px solid red;
        border-left: 20px solid transparent;
        border-right: 20px solid transparent;
    }
    

    6. margin(外边距)

    margin: 外边距的意思, 表示边框到最近盒子的距离. margin也有四个方向, 并且也可以设置1, 2, 3, 4个值.

    /*表示四个方向的外边距离为20px*/
    margin: 20px;
    
    /*表示盒子向下移动了30px*/
    margin-top: 30px;
    
    /*表示盒子向右移动了50px*/
    margin-left: 50px;
    margin-bottom: 100px;
    

    五. 清除默认样式

    有一些标签会默认自带样式, 比如<ul>标签默认有padding-left值, 有些默认有margin值, <ul>,<ol><a>标签也自带一些样式, 但是我们一般在做网页的时候不想用那些默认的样式, 所以需要清除页面标签中默认的样式, 以便我们更好的去调整元素的位置.

    虽然通配符选择器*可以解决问题, 但是这种方法效率不高, 不推荐. 我们要使用并集选择器来选中页面中应有的标签, 如下代码就是清除默认样式的一种写法, reset.css:

    参考网址: https://meyerweb.com/eric/tools/css/reset/

    参考代码:

    /* http://meyerweb.com/eric/tools/css/reset/ 
       v2.0 | 20110126
       License: none (public domain)
    */
    
    html, body, div, span, applet, object, iframe,
    h1, h2, h3, h4, h5, h6, p, blockquote, pre,
    a, abbr, acronym, address, big, cite, code,
    del, dfn, em, img, ins, kbd, q, s, samp,
    small, strike, strong, sub, sup, tt, var,
    b, u, i, center,
    dl, dt, dd, ol, ul, li,
    fieldset, form, label, legend,
    table, caption, tbody, tfoot, thead, tr, th, td,
    article, aside, canvas, details, embed, 
    figure, figcaption, footer, header, hgroup, 
    menu, nav, output, ruby, section, summary,
    time, mark, audio, video {
    	margin: 0;
    	padding: 0;
    	border: 0;
    	font-size: 100%;
    	font: inherit;
    	vertical-align: baseline;
    }
    /* HTML5 display-role reset for older browsers */
    article, aside, details, figcaption, figure, 
    footer, header, hgroup, menu, nav, section {
    	display: block;
    }
    body {
    	line-height: 1;
    }
    ol, ul {
    	list-style: none;
    }
    blockquote, q {
    	quotes: none;
    }
    blockquote:before, blockquote:after,
    q:before, q:after {
    	content: '';
    	content: none;
    }
    table {
    	border-collapse: collapse;
    	border-spacing: 0;
    }
    

    六. 标准文档流

    宏观的讲, 我们的web页面和ps等设计软件有本质的区别, web网页的制作, 是个"流", 从上而下, 像"织毛衣". 而设计软件, 想往哪里画东西, 就去哪里画.

    标准文档流下, 有一些现象, 比如: 空间折叠现象, 高矮不齐底边对齐现象等.

    标准文档流等级森严, 标签分为两种等级: 行内元素块级元素.

    1. 行内元素和块级元素的区别

    • 行内元素:
      • a. 与其他元素并排
      • b. 不能设置宽和高, 默认的宽度就是文字的宽度
    • 块级元素:
      • a. 独占一行, 不能与其他的任何元素并列
      • b. 能进行宽和高的设置. 如果不设置宽度, 那么宽度将默认变为父级的100%

    2. 标签的分类

    在以前的HTML学习中, 我们已经将标签分过类了, 当时分为: 文本级和容器级.

    • a. 从HTML的角度来讲, 标签分为:
      • 文本级标签: <p>, <span>, <a>, <b>, <i>, <u>, <em>
      • 容器级标签: <div>, <h1>~<h6>, <li>, <dt>, <dd>

    PS: 为什么说<p>是文本级标签呢? 因为<p>里面只能放"文字","图片"和"表单"元素, <p>里面不能放<h1>~<h6><ul>, <p>里面也不能放<p>.

    • b. 从CSS的角度来讲, CSS的分类和HTML很相像, 但是就<p>不一样:
      • 行内元素: 除了<p>之外, 所有的文本级标签, 都是行内元素. 而<p>虽是个文本级标签, 但它却是个块级元素
      • 块级元素: 所有的容器级标签都是块级元素, <p>标签也是块级元素.

    3. 块级元素和行内元素的相互转换

    我们可以通过display属性将块级元素和行内元素进行相互之间的转换.display即"显示模式".

    • a. 块级元素转换为行内元素, 通过设置: display: inline;
    • b. 行内元素转换为块级元素, 通过设置: display: block;

    4. 脱离标准文档流

    标准文档流里面的现在非常多, 导致很多页面效果无法实现, 如果我们现在就要设置并排宽高, 那该怎么办呢? 办法就是: 移民! 即脱离标准文档流.

    • CSS中一共有三种手段来使一个元素脱离标准文档流:
      • 浮动
      • 绝对定位
      • 固定定位

    七. 浮动

    浮动是CSS里面布局最多的一种属性, 也是很重要的一个属性. float表示浮动的意思, 它有如下属性值:

    • none: 表示不浮动, 默认
    • left: 表示左浮动
    • right: 表示右浮动

    想要学好浮动, 一定要知道它的四大特性:

    • a. 浮动的元素是脱标(脱离标准文档流)的, 标签一旦设置浮动, 就能够并排, 并且不再区分行内元素,块级元素, 也就能够设置宽高了

    • b. 浮动的元素互相贴靠

    • c. 浮动的元素有"字围"效果

    • d. 浮动的元素有收缩的效果, 即: 一个浮动元素, 如果没有设置width, 那么就会自动收缩为文字的宽度

    注意: 关于浮动, 我们要遵循一个原则: 永远不要设置一个盒子单独浮动.要浮动就一起浮动; 有浮动就一定要清除浮动.

    八. 清除浮动

    1. 浮动带来的不良影响

    首先来观察如下HTML和CSS代码:

    • HTML代码:
    <div class="father">
    	<div class="box1"></div>
        <div class="box2"></div>
        <div class="box3"></div>
    </div>
    <div class="father2"></div>
    
    • CSS代码:
    .father{
         1126px;
    }
    .box1{
         200px;
        height: 500px;
        float: left;
        background-color: red;
    }
    .box2{
         300px;
        height: 200px;
        float: left;
        background-color: green;
    }
    .box3{
         400px;
        height: 100px;
        float: left;
        background-color: blue;
    }
    .father2{
         1126px;
        height: 600px;
        background-color: purple;
    }
    

    从执行效果中发现: 如果不给父盒子设置一个高度, 那么浮动子元素是不会填充父盒子的高度的, 此时.father2的盒子就会跑到第一个位置上, 影响页面布局.

    浮动元素的确能实现页面元素的并排效果, 这既是它的优点也是它的缺点. 由于它同时也会造成页面布局的极大混乱, 所以我们要清除浮动.

    2. 清除浮动的四种方法

    清除浮动的方法有很多种, 在这里只介绍四种:

    • a. 给父盒子设置高度
    • b. 内墙法: 给浮动元素的后面加一个空的块级标签, 再给该标签设置clear:both属性
    • c. 伪元素清除法(常用)
    • d. overflow:hidden(常用)

    3. 伪元素清除浮动

    为元素清除浮动的写法如下:

    给浮动元素的父盒子, 也就是不浮动的元素, 添加一个clearfix类, 然后作如下设置:

    .clearfix:after{
        content: ".";
        display: block;
        height: 0;
        clear: both;
        visibility: hidden;
    }
    

    4. 关于overflow

    overflow属性规定当前内容溢出元素框时发生的事件.

    描述
    visible 默认值, 内容不会被修剪, 会呈现在元素框之外
    hidden 内容会被修剪, 超出元素框之外的部分不可见
    scroll 不管内容是否超出元素框都出现滚动条
    auto 如果内容超出元素框, 则浏览器会显示滚动条以便查看其余内容
    inherit 规定继承父元素的overflow属性的值

    这些事件逐渐演变成overflow:hidden清除法, 其实它是一个BFC区域, 具体参见: https://blog.csdn.net/riddle1981/article/details/52126522

    九. margin中的坑

    1. margin塌陷问题

    当给两个标准文档流下的兄弟盒子设置垂直方向上margin时, 那么以较大的为准, 我们称这种现象为塌陷. 记住这种现象, 在布局垂直方向盒子的时候要注意margin的用法. 水平方向上没有塌陷现象.

    当我们给标准文档流下的兄弟盒子设置浮动之后, 就不会出现margin塌陷的问题.

    2. margin: 0 auto;

    当一个<div>元素设置margin: 0 auto;时就会使盒子居中. 我们知道margin: 0 auto;表示上下外边距距离为0, 左右为auto的距离, 那么auto是什么意思呢? 若设置margin: 0 auto;, 我们发现盒子尽可能大的左右两边有很大的距离, 因为此时的盒子是居中的.

    • 注意:
      • a. 使用margin: 0 auto;时, 水平居中盒子必须有width, 要有明确的width值
      • b. 如果给盒子设置"浮动"或"固定定位"或"绝对定位",那么margin: 0 auto;失效
      • c. margin: 0 auto;使盒子居中,而不是使文本居中, 文字水平居中可以使用text-align: center

    3. margin和padding的区别

    margin属性描述的是兄弟盒子的关系, 而padding属性描述的是父子盒子的关系.

    先看如下两段代码:

    • CSS代码:
    .father{
         300px;
        height: 300px;
        background-color: blue;
    }
    .son{
         100px;
        height: 100px;
        background-color: orange;
        margin-top: 30px;
    }
    
    • HTML代码:
    <div class="father">
        <div class="son"></div>
    </div>
    

    运行上面代码, 发现两个盒子整体下移了30px, 其实我们只是想让子盒子下移30px, 父盒子不要动,但是父盒子因为没有设置border, 所以父盒子也掉下来了, 一旦给父盒子设置一个border就好了, 那么问题来了, 我们不可能在页面中无缘无故的去给盒子加一个border, 所以此时的解决办法只有一个, 就是使用父盒子的padding, 让子盒子向下走.

    • 修改后的CSS代码:
    .father{
         300px;
        height: 270px;
        background-color: blue;
        padding: 30px
    }
    .son{
         100px;
        height: 100px;
        background-color: orange;
    }
    

    十. 字体图标的使用

    阿里巴巴矢量图标库: http://www.iconfont.cn/

    十一. 文本属性和字体属性(常用的)

    1. 文本属性

    /*对齐方式*/
    text-align: left|right|center|justify(两端对齐,只适合英文);
    
    /*文本颜色*/
    color: 色值;
    
    /*首行缩进, 建议使用单位em*/
    text-indent: 2em;
    
    /*文本修饰:  无|下划线|上划线|中划线(删除线)*/
    text-decoration: none|underline|overline|line-through;
    
    /*设置行高*/
    line-height: 高度值;
    

    2. 字体属性

    font-weight: normal|bold|lighter|100~900|inhert;  
    /*100~300没有区别*/
    
    • font-family: 字体;
      • a. 网页中不是所有字体都能显示, 因为这个字体要看用户的电脑里面装没装, 比如你设置: font-family:”华文彩云”;, 如果用户电脑里面没有这个字体, 那么就会变成宋体.
      • b. 为了防止用户电脑里面没有你设置的那个字体, 我们通常写多用个逗号隔开的备选字体, 如: font-family: "Times New Roman","微软雅黑", 备选字体可以有无数个, 默认显示第一个, 没有安装第一个就显示第二个, 以此类推, 都没安装就显示宋体.
      • c. 我们要将英文字体放在最前面, 这样所有的中文, 就不能匹配英文字体, 就自动的变为后面的中文字体.
      • d. 所有的中文字体, 都有英语别名, 微软雅黑的英语别名是: Microsoft YaHei, 宋体的英语别名是SimSun
      • e. font属性能够将font-size(字体大小),line-height(行高),font-family(字体类型)合三为一: font:12px(大小)/30px(行高) "Times New Roman","Microsoft YaHei","SimSun";
      • f. 行高可以用百分比, 表示字号的百分之多少, 也可以用em单位, 表示字号的几倍. 一般来说, 都是大于100%的, 因为行高一定要大于字号. 例如:
        • font: 12px/200% "宋体"; 或者 font: 12px/2em "宋体"; 等价于 font: 12px/24px "宋体";
        • 反过来, 比如: font: 16px/48px "宋体"; 等价于 font: 16px/300% "宋体"; 或者 font: 16px/3em 宋体"";

    十二. background

    1. 颜色表示法

    颜色一共有三种表示方法: 单词, rgb表示法, 十六进制表示法.

    • rgb表示法: rgb(红色 绿色 蓝色)三原色

    光学显示器, 每个像素都是由三原色的发光原件组成的, 靠明亮度不同调成不同的颜色.

    用法: rgb(111,234,123); , r, g, b的每个值的取值范围是0~255

    • 十六进制表示法: 所有用#开头的值, 都是十六进制的

    用法: #a0a0a0; #112233; 可以简写成 #123;

    2. background-color 属性表示设置背景颜色

    用法: background-color: #0f0;

    3. background-image 表示设置该元素的背景图片

    用法: background-image: url('paper.gif');

    4. background-repeat:repeat 表示设置该元素的平铺方式

    用法: background-repeat:repeat(默认)|repeat-x|repeat-y|no-repeat|inherit;

    5. background-position 表示设置背景图片的位置

    /*第一个值是水平位置,第二个值是垂直位置*/
    background-position: x% y%|Xpx Ypx;
    /*第一个值如果是*/
    

    6. 图片精灵图技术

    CSS雪碧, 即CSS Sprite, 也有人叫它CSS精灵, 是一种CSS图像合并技术, 该方法是将小图标和背景图像合并到一张图片上, 然后利用CSS的背景定位来显示需要显示的图片部分.

    • CSS精灵图应用原理:

    只有一张大的合并图, 每个小图标节点如何显示单独的小图标呢? 其实就是截取大图一部分显示, 而这部分就是一个小图标.

    • 使用精灵图的好处:
      • (1) 利用CSS Sprites能很好地减少网页的http请求, 从而大大的提高页面的性能, 这也是CSS Sprites最大的优点, 也是其被广泛传播和应用的主要原因
      • (2) CSS Sprites能减少图片的字节, 曾经比较过多次3张图片合并成1张图片的字节总是小于这3张图片的额字节总和
      • (3) 解决了网页设计师在图片命名上的困扰, 只需对一张集合的图片上命名就可以了, 不需要对每一个小元素进行命名, 从而提高了网页的制作效率
      • (4) 更换风格方便, 只需在一张或少张图片上修改图片的颜色或样式, 整个网页的风格就可以改变. 维护起来更加方便
    • 使用精灵图的不足:
      • (1) CSS精灵图的最大问题是内存使用
      • (2) 拼图维护比较麻烦
      • (3) 精灵图技术使CSS的编写变得困难
      • (4) CSS精灵图调用的图片不能被打印

    7. 应用

    我们可以使用background综合属性制作通天banner, 什么是通天banner呢? 就是一般我们电脑屏幕都是1439, 但是设计师给我们的banner图都会比这个大, 那么我们可以以此属性制作通天banner, 如下:

    background: red url(images/banner.jpg) no-repeat center top;
    

    十三. 定位

    定位3种: 相对定位, 绝对定位, 固定定位

    1. 相对定位(相当于自己原来的位置定位)

    • 现象和使用:
      • a. 如果对当前元素仅仅设置了相对定位, 那么与标准文档流的盒子没有什么区别
      • b. 设置相对定位之后, 我们才可以使用四个方向的属性: top, bottom, left, right
    • 特性:
      • a. 不脱离标准文档流
      • b. 形影分类
      • c. 老家留坑, 就是原来的位置还在(占着茅坑不拉翔)

    注意: 以上特性可以证明: 相对定位在页面中没有什么太大的作用, 它会影响我们的页面布局, 我们不要使用相对定位来做压盖效果.

    • 用途:
      • a. 微调元素位置
      • b. 做绝对定位的参考(父相子绝), 绝对定位中会介绍此内容
    • 参考点: 以自己原来位置做参考点

    2. 绝对定位

    • 特性:
      • a. 脱离标准文档流
      • b. 做遮盖效果, 提升了层级, 设置绝对定位之后, 不区分行内元素和块级元素, 都能设置宽高
    • 参考点:
      • (1) 单独设置一个绝对定位的盒子:
        • a. 当我们使用top属性描述的时候, 是以页面的左上角(跟浏览器的左上角区分)为参考点来调整位置的
        • b. 当我们使用bottom属性描述的时候, 是以首屏页面左下角为参考点来调整位置的
      • (2) 以父辈盒子作为参考点(常用):
        • a. 父辈元素设置相对定位, 子元素设置绝对定位, 那么会以父辈元素左上角为参考点, 这个父辈可以是父亲,爷爷,曾爷爷
        • b. 如果父亲设置了定位, 则会以父辈元素左上角为参考点; 如果父亲没有设置定位, 则会以设置了定位的父辈元素为参考点
        • c. 不仅仅是父相子绝, 父绝子绝和父固子绝都是以父辈元素为参考点

    注意: 父绝子绝没有实际意义, 做网站的时候不会出现父绝子绝, 因为绝对定位脱离标准文档流, 影响页面的布局. 相反, "父相子绝"在我们的页面布局中, 是常用的布局方案, 因为父亲设置相对定位, 不脱离标准文档流, 子元素设置绝对定位, 仅仅的是在当前父辈元素内调整该元素的位置.

    还要注意, 绝对定位的盒子无视父辈的padding.

    作用: 页面布局常见的"父相子绝"非常重要, 必须掌握!

    3. 固定定位(当前已固定的元素不会随着页面滚动而滚动)

    • 特性:
      • a. 脱标现象
      • b. 压盖现象
      • c. 提升层级
      • d. 固定不变
    • 参考点:
      • a. 设置固定定位, 如果用top描述, 那么是以浏览器的左上角为参考点
      • b. 如果用bottom描述, 那么是以浏览器的左下角为参考点
    • 作用:
      • a. 返回到顶部
      • b. 固定导航栏
      • c. 设置小广告

    4. z-index

    这个东西非常简单, 它有以下四大特性, 只要记住了每个特性, 页面布局时就不会找不到盒子的情况了:

    • a. z-index值表示谁压着谁, 数值大的压盖住数值小的
    • b. 只有定位了的元素, 才能有z-index, 也就是说, 不管是相对定位,绝对定位还是固定定位, 它们都可以使用z-index, 而浮动元素不能使用z-index
    • c. z-index值没有单位, 就是一个正整数, 默认的z-index值为0, 如果大家都没有z-index值, 或者z-index值一样, 那么谁写在HTML后面, 谁就在上面压着别人. 定位了的元素, 永远压住没有定位的元素
    • d. 从父现象: 父亲怂了, 儿子再牛逼也没用. 即父亲的z-index值较小, 儿子的z-index再大也没用

    5. 应用: 绝对定位的盒子居中

    可以当作公式记下来:

    position: absolute;
    left: 50%;
    margin-left: -width/2;  /*即自身宽度的一半*/
    
  • 相关阅读:
    NSString
    xib和storyboard的使用方法
    drawRect画线和使用CGContext
    CGAffineTransform动画
    【概念】静态成员
    【c#】Application.Exit和Close有什么不同
    【c#】const和readonly关键字
    【概念】设计模式
    【概念】常见数据结构与算法
    【概念】索引器
  • 原文地址:https://www.cnblogs.com/982336352ryan/p/9924033.html
Copyright © 2020-2023  润新知