You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
没有定义z-index的值时,元素按照它们出现在 DOM 中的顺序堆叠(层级越低,出现位置越靠上)。非静态定位的元素(及其子元素)将始终覆盖静态定位(static)的元素,而不管 HTML 层次结构如何。
层叠上下文是包含一组图层的元素。 在一组层叠上下文中,其子元素的z-index值是相对于该父元素而不是 document root 设置的。每个层叠上下文完全独立于它的兄弟元素。另外,请注意,嵌套起着重要的作用,如果元素 B 位于元素 A 之上,则即使元素 A 的子元素 C 具有比元素 B 更高的z-index值,元素 C 也永远不会在元素 B 之上.
<style>
p:first-child {
background-color: yellow;
}
</style><body><p>This paragraph is the first child of its parent (body).</p><h1>Welcome to My Homepage</h1><p>This paragraph is not the first child of its parent.</p><div><p>This paragraph is the first child of its parent (div).</p><p>This paragraph is not the first child of its parent.</p></div></body>
E:last-child: 选择每个 E 元素是其父级的最后一个子级。
:not() 排除匹配的元素 比如 img:not([alt]) 选择没有写 alt 属性的图片
<p>
text 1
<button>Button 1</button><button>Button 2</button><button>Button 3</button><button>Button 4</button>
text 2
</p><style>
/* 除了最后一个元素都有右边距 */
button:not(:last-child) {
margin-right: 2em;
}
</style>
<divclass="media media--left"><aclass="media__image"><imgclass="media__object" src="//placehold.it/100x100" alt="" />
</a><divclass="media__body"><h3class="media__title">Title</h3><pclass="media__description">
A paragraph about the media
</p></div></div>
前言
溫故而知新,可以為師矣 ~
两种盒模型
box-sizing: content-box
(W3C 标准盒模型,非 IE 浏览器默认)与box-sizing: border-box
(IE 盒模型)。box-sizing: border-box
改变计算元素width
和height
的方式,border
和padding
的大小也将计算在内。BFC
BFC(Block Formatting Context),块级格式化上下文,是一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。
通俗一点来讲,可以把 BFC 理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部。
以下方式都会创建 BFC:
BFC 布局规则:
应用:
参考链接:
块元素,行内元素以及行内块
块状元素特征:
例子:
div
,h1-h6
、p
、ul
、ol
、dl
、li
、table
、article
、form
行内元素特征:
例子:
a
、span
、strong
、i
、em
、label
例子:
img
、input
、button
、input
、label
、select
、textarea
选择器优先级
居中布局
text-align: center
margin: 0 auto
absolute + transform
flex + justify-content: center
line-height: height
absolute + transform
flex + align-items: center
flex
position + margin
position + calc
position + transform
grid
tabel + tabel-cell
flex
position + margin
position + calc
position + transform
grid
tabel + table-cell
清除浮动
浮动带来的问题:
方式:
position 定位区别
static
:默认定位属性值。该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 top, right, bottom, left 和 z-index 属性无效。relative
: 元素的定位永远是相对于元素自身位置的,和其他元素没关系,也不会影响其他元素(因此会在此元素未添加定位时所在位置留下空白)。absolute
:绝对定位,相对非static
祖先元素定位,直到 html 根标签为止。fixed
:不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变sticky
: 粘性布局,可以看出是 position:relative 和 position:fixed 的结合体——当元素在屏幕内,表现为 relative,就要滚出显示器屏幕的时候,表现为 fixed请阐述
z-index
属性,并说明如何形成层叠上下文(stacking context)。CSS 中的
z-index
属性控制重叠元素的垂直叠加顺序。z-index
只能影响position
值不是static
的元素。没有定义
z-index
的值时,元素按照它们出现在 DOM 中的顺序堆叠(层级越低,出现位置越靠上)。非静态定位的元素(及其子元素)将始终覆盖静态定位(static)的元素,而不管 HTML 层次结构如何。层叠上下文是包含一组图层的元素。 在一组层叠上下文中,其子元素的
z-index
值是相对于该父元素而不是 document root 设置的。每个层叠上下文完全独立于它的兄弟元素。另外,请注意,嵌套起着重要的作用,如果元素 B 位于元素 A 之上,则即使元素 A 的子元素 C 具有比元素 B 更高的z-index
值,元素 C 也永远不会在元素 B 之上.每个层叠上下文是自包含的:当元素的内容发生层叠后,整个该元素将会在父层叠上下文中按顺序进行层叠。少数 CSS 属性会触发一个新的层叠上下文,例如
opacity
小于 1,filter
不是none
,transform
不是none
。参考资料:
常用选择器
简单选择器
*
#idName
.className
p
属性选择器
E[attr]
:input[disabled]
E[attr="val"]
:input[type="password"]
E[attr^="val"]:
a[href^="#"]`E[attr$="val"]
:a[href$=".jpg"]
E[attr*="val"]
:[class*=" icon-"]
(属性的值包含子字符串)伪选择器
E:hover
、E:focus
、E:not()
、E:first-child
、E:last-child
、E:nth-child(n)
、E:nth-last-child(n)
选择器组合
EF
:p.warning
E F
:div span
, 匹配所有位于任意<div>
元素之内的<span>
元素.E > F
:ul > li
, 匹配直接嵌套在<ul>
元素内的所有<li>
元素。E ~ F
:p ~ span
匹配同一父元素下,<p>
元素后的所有<span>
元素E + F
:h2 + p
会匹配所有紧邻在<h2>
元素后的<p>
元素分组选择器
div, span
,会同时匹配<span>
元素和<div>
元素参考链接
CSS 伪类和伪元素有哪些,它们的区别和实际应⽤
伪类
其核心就是用来选择那些不能够被普通选择器选择的文档之外的元素,比如
:hover
。还有
E:hover
、E:not()
、E:first-child
、E:last-child
、E:nth-child(n)
、E:nth-last-child(n)
等,作为个性选择器使用。:target
伪类: 表示元素被 hash 匹配时的状态:lang
伪类:元素匹配上指定语言时的状态,浏览器通过 lang 属性获得语言信息nth-child(an+b)
选中某些子元素,nth-child(odd)
选中第奇数个子元素,nth-child(even)
则为偶数:nth-of-type
按类型选中某些子元素E:first-child
匹配 E 的父元素中的第一个子元素 E, 匹配的父元素的第一个
元素
E:last-child
: 选择每个 E 元素是其父级的最后一个子级。:not()
排除匹配的元素 比如img:not([alt])
选择没有写 alt 属性的图片其他选择器
含有
type
的按type + 顺序 + 元素类型
选择,没有type
的按顺序 + 元素类型
选择伪元素
其核心就是需要创建通常不存在于文档中的元素,比如
::before
。::before
、::after
、::selection
、::first-line
、::first-letter
(常用清除浮动,画三角箭头、修饰文字等)哪些属性可以继承
某些属性会自动继承其父元素的计算值,除非显式指定一个值
有继承性的属性
可继承的属性:font-size, font-family, color
display:none、visibile:hidden、opacity:0 的区别
flex 布局
设置主轴的方向
flex-direction
可决定主轴的方向,有四个可选值:设置主轴的对齐方式
justify-content
属性定义了项目在主轴上的对齐方式,值如下:交叉轴的对齐方式
align-items
属性定义项目在交叉轴上如何对齐,值如下:主轴方向换行
默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap 属性定义,如果一条轴线排不下,如何换行。
多轴线方向
align-content 属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
Flex 项目属性
有六种属性可运用在 item 项目上:
参考资料:
rem 布局
rem 响应适配的原理是动态计算为当前页面的
newFontSize
并赋值给 html 根节点,从而 rem 参照可以根据根节点进行缩放。设计稿宽度 /
预设 font-size
= 实际屏幕宽度 /newFontSize
newFontSize
= 实际屏幕宽度 *预设 font-size
/ 设计稿宽度html 根元素 font-size 设置 13.33vm 是什么意思 ?
这也是 100px 的一种表示方式。
750px = 100vm, 即 1vm = 7.5px
100px / 1vm = 100px / 7.5px = 13.33vm
margin 重叠的问题
这里提到 margin,就不得不提一下 margin 的这一特性——纵向重叠。如
的纵向 margin 是 16px,那么两个
之间纵向的距离是多少?—— 按常理来说应该是 16 + 16 = 32px,但是答案仍然是 16px。因为纵向的 margin 是会重叠的,如果两者不一样大的话,大的会把小的“吃掉”。
只要元素满足下面任一条件即可触发 BFC 特性:
参考资料:
两列自适应布局
floa + bfc
在单列定宽单列自适应的两列布局中,经常用 float 和负 margin 配合实现布局效果。但由于 margin 取值只能是固定值,所以在两列都是自适应的布局中就不再适用。而 float 和 overflow 配合可实现两列自适应效果。使用 overflow 属性来触发 bfc,来阻止浮动造成的文字环绕效果。
flex
flex:1
占满剩余宽度(同样适用于垂直方向)flex + calc / float + calc
去除 inline-block 元素间间距的方法
推荐使用 font-size:0
更详细的介绍请看:去除 inline-block 元素间间距的 N 种方法
元素竖向的百分比设定是相对于容器的高度吗?
当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的,但是,对于一些表示竖向距离的属性,例如 padding-top , padding-bottom , margin-top , margin-bottom 等,当按百分比设定它们时,依据的也是父容器的宽度,而不是高度。
⽤纯 CSS 创建⼀个三⻆形的原理是什么?
利用伪元素画三角
如何解决移动端 Retina 屏 1px 像素问题
伪元素 + transform 实现:
如何用 css 或 js 实现多行文本溢出省略效果,考虑兼容性
注意:由于上面的三个属性都是 CSS3 的属性,没有浏览器可以兼容,所以要在前面加一个
-webkit-
来兼容一部分浏览器。响应式布局⽅案
响应式设计的适应性原则:网站应该凭借一份代码,在各种设备上都有良好的显示和使用效果。响应式网站通过使用媒体查询,自适应栅格和响应式图片,基于多种因素进行变化,创造出优良的用户体验。就像一个球通过膨胀和收缩,来适应不同大小的篮圈。
响应式网站的几个标志:
设计步骤
使用了 Normalize.css
@media
媒体查询来设置设置布局分界点,这是响应式布局的核心请解释什么是雪碧图(css sprites),以及如何实现?
雪碧图是把多张图片整合到一张上的图片。它被运用在众多使用了很多小图标的网站上(Gmail 在使用)。实现方法:
background-image
、background-position
和background-size
属性。好处:
:hover
伪类中的图片,不会出现闪烁。参考资料:
有什么不同的方式可以隐藏内容(使其仅适用于屏幕阅读器)?
这些方法与可访问性(a11y)有关。
visibility: hidden
:元素仍然在页面流中,并占用空间。width: 0; height: 0
:使元素不占用屏幕上的任何空间,导致不显示它。position: absolute; left: -99999px
: 将它置于屏幕之外。text-indent: -9999px
:这只适用于block
元素中的文本。即使 WAI-ARIA 是理想的解决方案,我也会采用绝对定位方法,因为它具有最少的注意事项,适用于大多数元素,而且使用起来非常简单。
参考资料:
CSS 动画
来个例子:
环形旋转器
CSS3 新特性有哪些?
1、边框(border-radius、box-shadow、border-image)
2、背景(background-image、background-size、background-origin、background-clip)
3、 渐变
4、 文本效果(text-shadow、box-shadow、text-overflow、word-wrap、word-break)
5、 字体(@font-face)
6、 2D 转换(transform 属性对元素进行移动 translate、缩放 scale、转动 rotate、拉长或拉伸)
7、3D 转换
8、transition 过渡
定义关键帧,可以实现更复杂的样式变化效果
css3 了解吗,主要用什么,animation,transition,translate,transform 这四个是干嘛的
css 作用域隔离方法
CSS 优化、提⾼性能的⽅法有哪些?
避免过度约束;避免后代选择符;避免链式选择符;使⽤紧凑的语法;避免不必要的命名空间;避
免不必要的重复;最好使⽤表⽰语义的名字。⼀个好的类名应该是描述他是什么⽽不是像什么;避
免!important,可以选择其他选择器;尽可能的精简规则,你可以合并不同类⾥的重复规则?
CSS 预处理器(Sass/Less/Postcss)
CSS 预处理器的原理: 是将类 CSS 语言通过 Webpack 编译 转成浏览器可读的真正 CSS。在这层编译之上,便可以赋予 CSS 更多更强大的功能,常用功能:
样式简写
1、margin、padding
外边距和内边距简写方式是一致的,以内边距举例说明:
2、background 背景
当使用简写属性时,属性值的顺序为::
以上属性无需全部使用,你可以按照页面的实际需要使用.
3、CSS3 border-radius 椭圆边框
CSS 库和自己常用的 css 样式
工程化
normalize.css
设置 HTML 标签的默认样式,使其在各个浏览器表现基本一致,保留标签的默认样式。
CSS reset
设置 HTML 标签的默认样式,使其在各个浏览器表现基本一致,让默认样式归零。
flex 样式
BEM
Block(Module / Component)
Element(Block 内的元素)
Modifier(修饰)
.block__element--modifier
css 自定义变量
CSS 变量,其中包含要在整个文档中重用的特定值。
参考
The text was updated successfully, but these errors were encountered: