6个你未必知道的css技巧分享(一文梳理CSS必会知识点)(1)

作者: 芋头yt

转发链接:https://mp.weixin.qq.com/s/A03YiPsvlREkB20ATW9Wcw

CSS引入有哪些引入方式?通过link和@import引入有什么区别?(* )Style 标签写在 body 后和 body 前有什么区别?什么是 FOUC(Flash of Unstyled Content)?如何来避免 FOUCCSS选择器

CSS选择器的解析是从上到下,从右向左解析,为了避免对所有元素进行解析

CSS选择器种类CSS选择器优先级

1. 位于<head/>标签里的<style/>中所定义的CSS拥有最高级的优先权。 2. 位于 <style/>标签中的 @import 引入样式表所定义。 3. 由<link/>标签所引入的样式表定义。 4. 由<link/>标签所引入的样式表内的 @import 导入样式表定义。 5. 用户设定。 6. 浏览器默认。

CSS伪类和伪元素CSS伪元素CSS伪类静态伪类(只用于a标签)动态伪类(使用时鼓励“LVHT”顺序)伪类和伪元素的根本区别CSS模型模型分类

6个你未必知道的css技巧分享(一文梳理CSS必会知识点)(2)

6个你未必知道的css技巧分享(一文梳理CSS必会知识点)(3)

转换盒模型

Css中默认的盒模型是W3C盒模型,两者间的转换可以通过设置属性box-sizing来转换

box-sizing: content-box; // W3C盒模型标准 box-sizing: border-box; // IE盒模型标准

盒子一些相关宽度边界塌陷

CSS 中存在一个 margin collapse,即边界塌陷或者说边界重叠。只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。

并排 DIV 边界塌陷(兄弟)

对于上下两个并排的 DIV 块而言,上面 DIV 的 margin-bottom 和下面 DIV 的 margin-top 会塌陷,会取上下两者 margin 里最大值作为显示值,只设置单个margin。

包含元素盒子塌陷(父子)

父级div中没有border,padding,inlinecontent,子级div的margin会一直向上找,直到找到某个标签包括border,padding,inline content(文本)中的其中一个,然后按此div 进行margin。

解决方法负值作用position 定位static(普通流定位)

默认定位

relative(相对定位)absolute(绝对定位)fixed(固定定位)

类似于absolute定位,但是是相对于浏览器窗口进行定位

inherit

继承父级元素position属性值

sticky (额外补充)

粘性的-集合了flex和relative,参考杀了个回马枪,还是说说position:sticky吧

float浮动优点

最初的优点就是在图文混排的时候可以很好的使文字周围在图片周围。另外当元素浮动了起来之后,它具有块级元素的一些性质例如可以设置宽高等,但它与inline- block还是有一些区别的,第一个就是关于横向排序的时候,float可以设置方向而inline-block方向是固定的;还有一个就是inline-block在使用时有时会有空白间隙的问题。

缺点

最明显的缺点就是浮动元素一旦脱离了文档流,就无法撑起父元素,会造成父级元素高度塌陷为0(盒子塌陷)。▲ 注意:设置元素浮动后,该元素的display值会变为block

清除浮动(*)

<div class="parent" style="overflow:hidden"> <div class="f"></div> </div>

<div class="parent"> //添加额外标签并且添加clear属性 <div class="f"></div> </div> <div style="clear:both"></div>

//添加:after伪元素 .parent:after{ content: ''; /* 设置添加子元素的内容是空 */ display: block; /* 设置添加子元素为块级元素 */ height: 0; /* 设置添加的子元素的高度0 */ visibility: hidden; /* 设置添加子元素看不见 */ clear: both; /* 设置clear:both */ } <div class="parent"> <div class="f"></div> </div>

display 布局

值描述none元素会被隐藏,不显示inline元素会被设置为内联元素,内部按行从左向右排列(元素前后没有换行符)block元素会被设置为块级元素,内部按列从上到下排列(元素前后带有换行符)inline-block元素会被设置为行内块级元素,不会独占一行的块级元素list-item元素会作为列表显示table元素会作为块级表格来显示(类似table),表格前后带有换行符flex元素会进入flex布局模式

inline、block、inline-block三者区block块级特点:inline内联特点:inline-block 特点:使用 display:inline-block 会产生什么问题?又如何解决?(*)

两个inline-block元素放到一起会产生一段空白。

产生空白的原因

元素被当成行内元素放置的时候,元素之间的空白符(空格,回车换行等)都会被浏览器处理,根据CSS中空白属性的处理方式(否则是正常,合并多余空白),原来HTML代码中的回车换行被转成一个空白符,在字体不为0的情况下,空白符较长一定长度,所以inline-block的元素之间就出现了空隙。

解决办法flex布局

该布局提供了一种更高效的方法对容器中的项目进行布局、对齐和分配空间,他没有方向上的限制,可以由开发人员自由操作(子元素的 vertical-align、float、clear 属性会失效)。

容器属性(6个)

flex-direction: row | row-reverse | column | column-reverse;

flex-wrap: nowrap | wrap | wrap-reverse;

flex-flow: flex-direction||flex-wrap;

justify-content: flex-start | flex-end | center | space-between | space-around;

align-items: flex-start | flex-end | center | baseline | stretch;

align-content: flex-start | flex-end | center | space-between | space-around |;

项目属性(6个)

align-self: auto | flex-start | flex-end | center | baseline | stretch;

flex: none | [ 'flex-grow' 'flex-shrink'? || 'flex-basis']该属性有两个快捷值: auto(1 1 auto)none(0 0 auto)建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值

overflow溢出如何实现:单行文本溢出加 ...(*)

white-space: nowrap; /* 首先,强制文本不换行;*/ overflow: hidden; /*其次,隐藏溢出;*/ text-overflow: ellipsis; /*最后,对溢出的文本用 ellipsis 省略号代替。*/

全屏滚动的原理?需要哪些css属性?原理

类似于轮播图,整体元素一直排列下去,假设有5个需要展示的全屏页面,那么高度将会是500%,但我们只能展示100%,剩下的内容可以通过transform进行Y轴定位,也可以通过margin-top实现

涉及css属性

overflow:hidden | transition:all 1000ms ease

BFC块级格式上下文什么是BFC?如何触发BFC?(*)BFC布局规则:
  1. 内部的Box会在垂直方向,一个接一个地放置。
  2. Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
  3. 每个元素的margin box的左边, 与包含块的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
  4. BFC的区域不会与外部float box重叠。
  5. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
  6. 计算BFC的高度时,浮动元素也参与计算
BFC的作用及原理:IFC行内格式上下文z-index层叠上下文元素层叠时,覆盖关系准则(*)同父同级元素父子层级元素层叠上下文的创建根层叠上下文

指的是页面根元素,也就是滚动条的默认的始作俑者元素。这就是为什么,绝对定位元素在left/top等值定位的时候,如果没有其他定位元素限制,会相对浏览器窗口定位的原因。

定位元素与传统层叠上下文

对于包含有position:relative/position:absolute/position:fixed的定位元素,当其z-index值不是auto的时候,会创建层叠上下文。

CSS3与新时代的层叠上下文

CSS3的出现除了带来了新属性,同时还对过去的很多规则发出了挑战。例如,CSS3 transform对overflow隐藏对position:fixed定位的影响等。而这里,层叠上下文这一块的影响要更加广泛与显著。如下:

  1. z-index值不为auto的flex项(父元素display:flex|inline-flex).
  2. 元素的opacity值不是1.
  3. 元素的transform值不是none.
  4. 元素mix-blend-mode值不是normal.
  5. 元素的filter值不是none.
  6. 元素的isolation值是isolate.
  7. will-change指定的属性值为上面任意一个。
  8. 元素的-webkit-overflow-scrolling设为touch
CSS管理方案ITCSS

ITCSS(Inverted Triangle CSS)通过规范样式文件的组织结构来适应项目中特殊性不断增加的选择器。见以下倒立的三角形,其中每一层都代表一种样式的概念结构:

6个你未必知道的css技巧分享(一文梳理CSS必会知识点)(4)

层级自上而下,选择器影响的 DOM 数量也越来越少,同时选择器特殊性递增。修改某个样式时我们可以轻易从相关组织文件中做出修改,而不影响其它样式,或是导致 CSS 样式继承的崩塌。

6个你未必知道的css技巧分享(一文梳理CSS必会知识点)(5)

命名方案

解决的主要是命名冲突和复用两个问题,在众多解决方案中,没有绝对的优劣。还是要结合自己的场景来决定。

OOCSSSMACSSBEM

bem就是块、元素、修饰符的思维去写样式。它不涉及具体的css结构,只是建议你如何命名css。

Style-Components

彻底抛弃 CSS,用 JavaScript 写 CSS 规则

CSS Modules

使用JS编译原生的CSS文件,使其具备模块化的能力

按需加载CSS浏览器兼容性浏览器CSS样式初始化

由于每个浏览器的css默认样式不尽相同,所以最简单有效的方式就是对其进行初始化,在所有CSS开始前,先把marin和padding都设为0,以防不同浏览器的显示效果不一样(推荐初始化库Normalize.css)。

浏览器私有属性

为避免日后W3C公布标准时有所变更,会加入一个私有前缀,比如-webkit-border-radius,通过这种方式来提前支持新属性。等到日后W3C公布了标准,border-radius的标准写法确立之后,再让新版的浏览器支持border-radius这种写法。常用的前缀有:

对于私有属性的顺序要注意,把标准写法放到最后,兼容性写法放到前面

-webkit-transform:rotate(-3deg); /*为Chrome/Safari*/ -moz-transform:rotate(-3deg); /*为Firefox*/ -ms-transform:rotate(-3deg); /*为IE*/ -o-transform:rotate(-3deg); /*为Opera*/ transform:rotate(-3deg);

CSS hack

有时我们需要针对不同的浏览器或不同版本写特定的CSS样式,这种针对不同的浏览器/不同版本写相应的CSS code的过程,叫做CSS hack,写法大致归纳为3种:条件hack、属性级hack、选择符级hack。

自动化插件常见的CSS兼容性问题有哪些CSS优化及性能提升WEB标准以及W3C对于结构的要求:

规范的标签可以提高搜索引擎对页面的抓取效率,对SEO很有帮助

对于CSS和JS来说:问几个问题Q1: 当position跟display、overflow、float这些特性相互叠加后会出现什么情况?Q2:display:none 与 visibility:hidden 的区别是什么?Q3:border:none;与border:0;有什么区别?

性能差异:

兼容性差异:

Q4:px | em| REM 有什么区别?

PXpx像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。EMem的值并不是固定的, em会继承父级元素的字体大小。(浏览器body中1em=16px)

REM(css3新增)使用rem相对的只是HTML根元素。集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。EX(不推荐)

Q5:视口单位 vw、vh、vmin、vmaxQ6:RGBA() 与 opacity 在透明效果上有什么区别?Q7:png、jpg、 jpeg、 bmp、gif 这些图片格式解释一下,分别什么时候用。有没有了解过webp?Q8:隐藏或者透明元素的方法?

opacity: 0; //1透明度为 0,整体都看不见了; visibility: hidden; //2这个和上边类似; display: none; //3消失,不占用位置; background-color: rgba(0,0,0,0.2); //4只是背景色透明

Q9:css sprites是什么?如何使用?Q10:什么是渐进增强和优雅降级?

渐进增强

优雅降级

所以

巨人的肩膀最后

欢迎纠错,看到会及时修改哒!温故而知新,希望我们都可以保持本心,念念不忘,必有回响。

作者: 芋头yt

转发链接:https://mp.weixin.qq.com/s/A03YiPsvlREkB20ATW9Wcw

,