CSS引入方式有4种在线,在线,外部链,导入
除了加载css,外链 link还可以定义rss、rel和其他属性。不存在兼容性问题,javascript可以用来改变样式。
它是导入@importcss提供的,只能用来加载CSS,不支持通过javascript修改样式。
加载页面时,会同时加载链接,而@import要加载页面后才会加载,可能没有样式页面。
通常,页面从上到下加载。在将样式标签放入正文之前,为了先加载样式。
如果写在body标记之后,由于浏览器是逐行解析html文档的,在解析写在文档末尾的样式表时,会导致浏览器在解析样式表之前停止渲染,等待加载后再渲染,windows IE中可能会出现FOUC现象(页面闪烁)。
使用@import导入CSS时,会导致部分页面在IE中出现奇怪的现象:没有样式的页面内容显示瞬间闪烁,称为“文档样式临时失效”,简称FOUC。
当产生原因:样式表的加载时间晚于结构化html时,页面将在加载到该样式表时停止先前的呈现。等待样式表下载解析后,再重新渲染页面,会造成短暂的屏幕现象。
解决办法:只需要在两者之间添加一个or元素。
CSS选择器的解析是从上到下,从右到左,为了避免解析所有元素。
可继承的样式:字体大小、字体系列、颜色、ul、li、dl、dt、DD;
不可继承的样式:边框、填充、边距、宽度、高度
Id选择器
根据提供的唯一id号快速获取标签对象。
用作标签标签的for属性的值:用户名:这意味着当单击标签标签时,id为userid的标签将获得焦点。
类别选择器(类别)
标签选择器(h1)
相邻选择器
直接相邻元素选择器(h1 p)
相邻元素选择器(h2 ~ h2)
子选择器(ulli)
后代选择器(阿利)
通配符选择器(*)
属性选择器(a [rel="XXX"])
类别选择器(:悬停:第一个孩子.)
伪元素选择器(前:后3360.)
分组选择器
优先级由高到低!重要内联样式ID选择器类选择器标签选择器通配符选择器继承
优先级算法(权重)
元素(派生选择器):1
类别选择器:10
Id选择器:100
最大内嵌样式:1000
元素选择器的权重
继承的样式优先级最低。
比较多个权重相同的CSS选择器的优先级,定义的位置决定一切。从高到低有六个级别:
1.在样式/位于头部/标签中定义的CSS具有最高优先级。
2.位于样式/标记中的@import由样式表定义。
3.由链接/标签引入的样式表定义。
4.在由链接/标记引入的样式表中,通过@import导入样式表定义。
5.用户设置。
6.浏览器默认值。
Css中默认的盒模型是W3C盒模型,两者间的转换可以通过设置属性box-sizing来转换
box-sizing: content-box; // W3C盒模型标准
box-sizing: border-box; // IE盒模型标准
CSS 中存在一个 margin collapse,即边界塌陷或者说边界重叠。只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。
对于上下两个并排的 DIV 块而言,上面 DIV 的 margin-bottom 和下面 DIV 的 margin-top 会塌陷,会取上下两者 margin 里最大值作为显示值,只设置单个margin。
父级div中没有border,padding,inlinecontent,子级div的margin会一直向上找,直到找到某个标签包括border,padding,inline content(文本)中的其中一个,然后按此div 进行margin。
默认定位
类似于absolute定位,但是是相对于浏览器窗口进行定位
继承父级元素position属性值
粘性的-集合了flex和relative,参考杀了个回马枪,还是说说position:sticky吧
最初的优点就是在图文混排的时候可以很好的使文字周围在图片周围。另外当元素浮动了起来之后,它具有块级元素的一些性质例如可以设置宽高等,但它与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>
值描述none元素会被隐藏,不显示inline元素会被设置为内联元素,内部按行从左向右排列(元素前后没有换行符)block元素会被设置为块级元素,内部按列从上到下排列(元素前后带有换行符)inline-block元素会被设置为行内块级元素,不会独占一行的块级元素list-item元素会作为列表显示table元素会作为块级表格来显示(类似table),表格前后带有换行符flex元素会进入flex布局模式
两个inline-block元素放到一起会产生一段空白。
元素被当成行内元素放置的时候,元素之间的空白符(空格,回车换行等)都会被浏览器处理,根据CSS中空白属性的处理方式(否则是正常,合并多余空白),原来HTML代码中的回车换行被转成一个空白符,在字体不为0的情况下,空白符较长一定长度,所以inline-block的元素之间就出现了空隙。
该布局提供了一种更高效的方法对容器中的项目进行布局、对齐和分配空间,他没有方向上的限制,可以由开发人员自由操作(子元素的 vertical-align、float、clear 属性会失效)。
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 |;
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)建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值
white-space: nowrap; /* 首先,强制文本不换行;*/
overflow: hidden; /*其次,隐藏溢出;*/
text-overflow: ellipsis; /*最后,对溢出的文本用 ellipsis 省略号代替。*/
类似于轮播图,整体元素一直排列下去,假设有5个需要展示的全屏页面,那么高度将会是500%,但我们只能展示100%,剩下的内容可以通过transform进行Y轴定位,也可以通过margin-top实现
overflow:hidden | transition:all 1000ms ease
指的是页面根元素,也就是滚动条的默认的始作俑者元素。这就是为什么,绝对定位元素在left/top等值定位的时候,如果没有其他定位元素限制,会相对浏览器窗口定位的原因。
对于包含有
position:relative/position:absolute/position:fixed的定位元素,当其z-index值不是auto的时候,会创建层叠上下文。
CSS3的出现除了带来了新属性,同时还对过去的很多规则发出了挑战。例如,CSS3 transform对overflow隐藏对position:fixed定位的影响等。而这里,层叠上下文这一块的影响要更加广泛与显著。如下:
ITCSS(Inverted Triangle CSS)通过规范样式文件的组织结构来适应项目中特殊性不断增加的选择器。见以下倒立的三角形,其中每一层都代表一种样式的概念结构:
层级自上而下,选择器影响的 DOM 数量也越来越少,同时选择器特殊性递增。修改某个样式时我们可以轻易从相关组织文件中做出修改,而不影响其它样式,或是导致 CSS 样式继承的崩塌。
解决的主要是命名冲突和复用两个问题,在众多解决方案中,没有绝对的优劣。还是要结合自己的场景来决定。
bem就是块、元素、修饰符的思维去写样式。它不涉及具体的css结构,只是建议你如何命名css。
彻底抛弃 CSS,用 JavaScript 写 CSS 规则
使用JS编译原生的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样式,这种针对不同的浏览器/不同版本写相应的CSS code的过程,叫做CSS hack,写法大致归纳为3种:条件hack、属性级hack、选择符级hack。
规范的标签可以提高搜索引擎对页面的抓取效率,对SEO很有帮助
性能差异:
兼容性差异:
PXpx像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。EMem的值并不是固定的, em会继承父级元素的字体大小。(浏览器body中1em=16px)
REM(css3新增)使用rem相对的只是HTML根元素。集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。EX(不推荐)
opacity: 0; //1透明度为 0,整体都看不见了;
visibility: hidden; //2这个和上边类似;
display: none; //3消失,不占用位置;
background-color: rgba(0,0,0,0.2); //4只是背景色透明
渐进增强
优雅降级
所以
欢迎纠错,看到会及时修改哒!温故而知新,希望我们都可以保持本心,念念不忘,必有回响。