前端知识体系-CSS

DevOps传教士
• 阅读 1098

盒模型

前端知识体系-CSS

页面是由许多盒模型组成的,每个元素都可以视为一个盒模型

BOX = margin + border + padding + content

种类:
W3C标准盒模型 | IE盒模型
box-sizing:
content-box | border-box

唯一区别:
标准盒模型:
width = content
IE盒模型:
width = content + border + padding

其他:
使用IE盒模型时,确定宽高后放大padding/border的值会压缩content的大小

CSS优先级

!important优先级最高

权重:
1000:内联样式
100: id选择器
10: 类选择器 | 伪类 | 属性选择器
1: 标签选择器 | 伪元素

伪类&伪元素

如何区分:
是否创建了新元素? 伪元素 : 伪类

伪元素:
创建了一个虚拟容器(元素),我们可以在其中添加内容或样式

CSS3官方定义翻译:
伪元素可以创建一些文档语言无法创建的虚拟元素。
比如:文档语言没有一种机制可以描述元素内容的第一个字母或第一行,但伪元素可以做到(::first-letter、::first-line)。
同时,伪元素还可以创建源文档不存在的内容。
比如使用 ::before 或 ::after。

伪类:
弥补了CSS选择器的不足,用来更方便地获取信息

1.格式化DOM树以外的信息。
比如: a标签的:link、:visited 等。这些信息不存在于DOM树中。
2.不能被常规CSS选择器获取到的信息。
比如:要获取第一个子元素,我们无法用常规的CSS选择器获取,但可以通过 :first-child 来获取到。

浏览器呈现页面的流程

  1. 读取所有html代码并解析,生成: dom tree
  2. 读取样式并解析,生成: style rules
  3. dom tree + style rules = render tree
  4. 浏览器根据render tree 绘制页面

实现水平垂直居中

已知宽高
1.
margin:auto
需要已知宽高,否则父子会重叠

.parent {
    position:relative;
}
.child {
    position:absolute;
    left:0;
    top: 0;
    bottom: 0;
    right: 0;
    margin: auto;

}
2.
负margin

.child {
    width:100px;
    height: 100px;
    position: absolute;
    left:50%;
    top:50%;
    //左右margin设置为宽高的一半负值
    margin-left:-50px;
    margin-top:-50px;
} 

3.
table-cell

.parent {
    width:300px;
    height:300px;
    display: tavle-cell;
    vertical-align: center;
    text-align: center;
}
.child {
    display:inline-block;
    width:50%;
    height:50%;
}

未知宽高
1.
CSS3新增transform属性

.parent {
    position:relative;
}
.child {
    position:absolute;
    left:50%;
    top:50%;
    transform: translate(-50%, -50%);
}

2.
flex布局

.child {
    display:flex;
    justify-content:center;
    align-items:center;
}

特殊情景解决方案

行内元素垂直居中

//水平居中
text-align:center;
//垂直居中
//行高等于包含块的height
line-height: 50px 

position

规定元素定位类型

默认值: static,继承性: 无

可能值:
absolute:
绝对定位元素, 脱离文档流
相对于非static定位的第一个父元素定位

relative:
相对定位元素, 遵循文档流
相对于其正常位置进行定位

static:
没有定位, 遵循文档流
元素出现于正常的文档流中
top, right, bottom, left 等属性失效

fixed:
绝对定位元素, 脱离文档流
相对于浏览器窗口定位

inherit:
从父元素继承position属性值

注意的点:

  1. relative进行top,left等操作后,元素视觉上的位置发生了变化, 但是仍然占的是之前的文档流
  2. 绝对定位元素 absolute, fixed都会脱离文档流

回流与重绘

如何区分:
文档流是否发生了变化? 回流 : 重绘

回流:
部分元素的规模尺寸布局发生了变化,需要重建render tree

重绘:
只影响元素的外观、风格
不引起布局的改变,更新部分属性即可

回流必重绘, 重绘不一定回流

display:none&visibility:hidden

如何区分:
是否占据文档流? visibility:hidden : display:none

display:none:
彻底消失
将会隐藏它以及所有的后代元素
所占文档流消失,浏览器不会解析该元素
页面: 回流+重绘

visibility:hidden:
视觉上的隐藏, 可以理解为透明度为0
仍然占据文档流,浏览器仍然会解析该元素
页面: 重绘

都具有继承性, 但是
父元素设置visibility:hidden, 子元素重新设置visibility: visible, 又会重新显示
父元素设置display:none, 子元素设置显示也不会生效

纯CSS画常规几何图形

圆:
通过设置圆角边框属性border-radius 实现

div {
    width: 100px;
    height: 100px;
    background: red;
    border-radius: 50px;
}

前端知识体系-CSS

椭圆
设置border-radius

div {
  width: 200px;
  height: 100px;
  background: red;
  border-radius: 100px / 50px;
}

前端知识体系-CSS

三角形
设置border-top/left/right/bottom 与transparent透明颜色结合完成

div {
  width: 0;
  height: 0;
  border-top: 100px solid red;
  border-left: 50px solid transparent;
  border-right: 50px solid transparent;
}

前端知识体系-CSS

参考:CSS画几何图形

px em rem 区别

px:
绝对长度单位(争议)
像素,是相对于显示器屏幕分辨率而言的
1px就是指一个显示像素

em:
相对长度单位
相对的是其父级的字体大小,即倍数。

例:
如果一个设置了font-size:1.2em的元素在另一个设置了font-size:1.2em的元素里,而这个元素又在另一个设置了font-size:1.2em的元素里,那么最后计算的结果是1.2X1.2X1.2=1.728em

rem:
相对长度单位
始终相对于根元素<html>

集相对大小和绝对大小的优点于一身,
通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。

双飞翼布局、圣杯布局

概念:
圣杯布局与双飞翼布局针对的都是
三列左右栏固定中间栏边框自适应的网页布局

要求:
三列布局,中间宽度自适应,两边定宽;
中间栏要在浏览器中优先展示渲染;
允许任意列的高度最高;

实现:

1.
构建html

    <body>
        <div class="container">
            <div class="main"> main </div>
            <div class="left"> left </div>
            <div class="right"> right </div>
        </div>

    </body>

2.
设置基本样式

    .main, .left, .right {
        min-height: 130px;
    }
    .main {
        background: blue;
    }
    .left {
        background: green;
        width: 200px;
    }
    .right {
        background: red;
        width: 300px;

    }

效果图:

前端知识体系-CSS
3.
设置container的padding

    .container {
        padding: 0 300px 0 200px;
    }

前端知识体系-CSS
4.
三个子元素全部设置左浮动

    .main, .left, .right {
        min-height: 130px;
        float: left;
    }

前端知识体系-CSS

5.
将主题main元素设置为100%宽度

    .main {
        background: blue;
        width: 100%;

前端知识体系-CSS

6.
设置左右负margin

    .left {
        background: green;
        width: 200px;
        margin-left: -100%;
    }
    .right {
        background: red;
        width: 300px;
        margin-left: -300px;

    }

前端知识体系-CSS

7.
调整left和right的位置

    .left, .main, .right {
        position: relative
    }
    .left {
       left:-200px;
    }
    .right {
        right: -300px;
    }

前端知识体系-CSS
flex 实现

    <style>
        .container{
            display: flex;
            min-height: 130px;
        }     
        .main{
            flex-grow: 1;
            background-color: blue;
        }
        .left{
            order: -1;
            flex-basis: 200px;
            background-color: green;
        }
        .right{
            flex-basis: 300px;
            background-color: red;
        }

    </style>

    <body>
        <div class="container">
            <div class="main"> center </div>
            <div class="left"> left </div>
            <div class="right"> right </div>
        </div>

    </body>

BFC IFC

margin塌陷

负margin的影响&应用

http 1.0 1.1 2.0

-JS
-VUE
-计算机网络

点赞
收藏
评论区
推荐文章
晴空闲云 晴空闲云
2年前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
菜园前端 菜园前端
2年前
你真的了解的CSS3盒模型和CSS3特性知识吗
原文链接:什么是CSS3?CSS3是CSS一个新的标准,直接理解为是CSS的升级版,里面新增了很多样式(特性)。CSS3盒子模型:::warningCSS3盒子模型必须要掌握,否则你在实际开发中遇到样式错乱很难排查问题。:::旧版的IE浏览器与其它浏览器解
凯特林 凯特林
4年前
你可能不知道的10个CSS新功能(2021版)
多年来,CSS已经超越了背景颜色、边框、文本样式、边距和盒模型。现代CSS能够提供一系列的功能,而在过去,您需要JavaScript或变通方法来实现这些功能。为了庆祝它在2021年取得的成就,在这篇文章中,我们想看看一些你可能不知道的令人惊叹的CSS新特性。我们将强调web设计人员和开发人员可以用现代CSS做的很酷的事情,讨论用例,浏览器支持,并给你一个
Jacquelyn38 Jacquelyn38
4年前
十分钟快速实战Three.js
前言本文不会对Three.js几何体、材质、相机、模型、光源等概念详细讲解,会首先分成几个模块给大家快速演示一盒小案例。大家可以根据这几个模块快速了解Three.js的无限魅力。学习我们会使用Three.js简单做一个立方体,为了大家更能宏观的了解Three.js。我将会分解成代码段(模块)来进行开发。模块如下:场景对象网格模型
Wesley13 Wesley13
3年前
Vtiger CRM 几处SQL注入漏洞分析,测试工程师可借鉴
本文由云社区发表0x00前言干白盒审计有小半年了,大部分是业务上的代码,逻辑的复杂度和功能模块结构都比较简单,干久了收获也就一般,有机会接触一个成熟的产品(vtigerCRM)进行白盒审计,从审计的技术难度上来说,都比公司内的那些业务复杂得多,而真正要提高自己技术水平,更应该看的也是这些代码。vtigerCRM是一个客
Wesley13 Wesley13
3年前
unity2017 光照与渲染(一)
光照&渲染(基于unity2017.2.0)1.CustomSkybox天空盒最丰富的环境光a.TextureShape改成Cube。b.把图片直接丢给天空,就会自动生成材质。c.参数Exposure曝光度,Rotation旋转天空盒。
Stella981 Stella981
3年前
Ruby on Rails 学习笔记(三)
从模型开始,先建立模型而不是建立支架 ruby script/generate model ad name:string description:text price:decimal seller_id:integer email:string img_rul:string从新迁移一下数据库rake db:migrate空模型
Stella981 Stella981
3年前
HTML前端开发之路——弹性盒模型
弹性盒模型(FlexibleBox)是一个CSS3新增布局模块,用于实现容器里项目的对齐、方向、排序;弹性盒模型最大的特效在于,能够动态的修改子元素的宽度和高度,以满足在不同尺寸屏幕下的恰当布局;下面是弹性盒模型的元素基本概念:!(http://static.oschina.net/uploads/space/2016/0212/210
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Grid布局和Flex布局
Flex布局(弹性布局)Flex是弹性布局,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为Flex布局。行内元素也可以使用Flex布局。采用Flex布局的元素,称为Flex容器。flexitem项目是Flex布局的元素,简称项目。容器:水平的主轴(mainaxis)和垂直的交叉轴(crossaxis),单个项目占据的主轴空间叫做m