CSS进阶技巧与最佳实践

   日期:2024-12-26    作者:ykchenxi 移动:http://3jjewl.riyuangf.com/mobile/quote/52735.html

1.display:none与visibility:hidden的区别
相同:他们都能让元素不可见
区别

CSS进阶技巧与最佳实践

  • display:none会让元素完全消失,不再占据任何空间;visibility:hidden会让元素不可见但元素本来的空间继续占据,只是内容不可见。
  • display:none是非继承属性,子孙节点会跟随父节点一起消失,即使修改子孙节点属性也无法显示;visibility:hidden是继承属性,子孙节点继承父节点消失,但通过设置visibility属性可以让子孙节点显示。

2.link与@import的区别

  • link是HTML方式@import是CSS方式
  • link最大限度支持并行下载@import过多嵌套导致串行下载
  • link可以通过rel="alternate stylesheet"指定候选样式
  • @import必须在样式规则之前,可以在css文件中引用其他文件
  • 总体来说:link优于@import

3.CSS有哪些继承属性

  • 关于文字排版的属性
    font
    word-break
    letter-spacing
    text-align
    text-rendering
    word-spacing
    white-space
    text-indent
    text-transform
    text-shadow
  • line-height
  • color
  • visibility
  • cursor

4.外边距折叠
外边距折叠就是margin-collapse

  • 两个相邻的外边距都是正数时,折叠结果是他们两者之间较大的值
  • 两个相邻的外边距都是负数时,折叠结果是他们两者绝对值的较大值
  • 两个外边距一正一负时,折叠结果是两者相加的和

5.标准CSS盒子模型和低版本IE的盒子模型

  • css盒模型也称标准(W3C)盒模型,ie盒模型也称怪异盒模型
  • 标准盒模型:元素宽度 = width + padding + border + margin
  • 怪异盒模型:元素宽度 = width + margin

6.CSS的选择器

  • id选择器"#id"
  • 类选择器".class"
  • 标签选择器(“div,h1,p”
  • 相邻选择器(“p1 + p2”
  • 子选择器(“ul > li”
  • 后代选择器(“ul li”
  • 通配符选择器"*“”
  • 属性选择器(“a[rel = ‘external’]”
  • 伪类选择器(“a:hover”

7.CSS3新增伪类

  • li:first-of-type 选择属于其父元素的首个元素的每个元素
  • li:last-of-type 选择属于其父元素的最后一个元素的每个元素
  • li:only-of-type 选择属于其父元素唯一的元素的每个元素
  • li:only-child 选择属于其父元素的唯一子元素的每个元素
  • li:nth-child(n) 选择属于其父元素的第n个子元素的每个元素
  • :after 在元素之前添加内容,常用来清除浮动
  • :before 在元素之后添加内容
  • :enabled 选择器匹配每个已启用的元素,常用在表单元素上
  • :disabled 控制表单按钮的禁用状态
  • :checked 单选框或者复选框的选中状态

8.如何居中div?如何居中一个浮动元素?如何让绝对定位的div居中
如果需要居中的元素为常规流中的lnline元素,为父元素设置text-align:center即可实现元素居中

如果需要居中的元素为block元素:1.为元素设置宽高 2.设置左右maigin为auto

 

如果需要居中的元素为浮动元素:1.为元素设置宽高 2.position:relative 3.浮动方向偏移量设置为50% 4.浮动方向上的margin设置为元素宽高的一半乘以-1

 

如果需要居中的元素为绝对定位元素:1.为元素设置宽高 2.设置左右偏移量都为0 3.设置左右外边距都为auto

 

9.如何竖直居中一个元素

  • 绝对定位居中
  • 如果居中元素为行内元素,可以设置父级height与line-height相等
  • 设置margin/padding居中
  • 相对位置偏移居中
  • flex居中设置align-item:center

10.display有哪些值以及他们的作用

  • block 块级元素,独占一行,可以设置宽高
  • inline-block 内联块元素,并排显示,可以设置宽高
  • inline 内联元素,并排显示,不可以设置宽高
  • none 此元素必会被显示
  • list-item 此元素会作为列表显示
  • table 此元素会作为块级表格来显示
  • inherit 规定应该从父元素继承display属性的值

11.position及relative和absolute定位原点

  • absolute 绝对定位,相对于上一个定位的父元素进行定位
  • fixed 固定定位,相对于浏览器窗口进行定位
  • relative 相对定位,相对于其正常位置进行定位
  • static 默认值,没有定位,元素出行在正常文档流中
  • inherit 规定从父元素继承position属性的值

12.CSS3有哪些新特性

  • 新增选择器 li:nth-child(n)
  • 弹性盒模型 display:flex
  • 多列布局 column-count:num
  • 媒体查询 @media(max-width:520px){.box:{column-count:1}}
  • 个性化字体 @font-face{font-family:BorderWeb;src:url(BORDERW0.eot)}
  • 颜色透明度 color:rgba(255,0,0,0.5)
  • 圆角 border-radius:50%/20px
  • 渐变 background:linear-gradient(red,gold,blue)
  • 阴影 box-shadow:2px 2px 2px rgba(0,64,128,0.5)
  • 倒影 box-reflect:below 2px
  • 文字装饰 text-stroke-color:red
  • 文字溢出 text-overflow:ellipsis
  • 背景效果 background-size: 100px 100px
  • 边框效果 border-image:url(ak.png) 0 10
  • 平滑过渡 transition:all 0,3s ease-in 0.1s
  • 动画 @keyframes anim-1 {50%{border-radius:50%}} animation:anim-1 1s
  • 转换
    1.旋转 transform:rotate(90deg)
    2.倾斜 transform:skew(90deg,-10deg)
    3.位移 transform:translate(20px,20px)
    4.缩放 transform:scale(0.5)

12.用css创建一个三角形的原理
把上左右三边的边框隐藏掉

 

13.一个满屏品字布局如何设计

  • 上面的div宽度100%
  • 下面的两个div分别宽50%
  • 然后用float或者inline使其不换行即可

14.li与li之间有空白间隙是什么原因引起的,如何解决
行框的排列会受到中间空白(回车/空格)等的影响,因为空格也属于字符,这些空白也会被应用样式占据空间,所以会有间隔,把字体大小设置为0就可以解决了

15.display:inline-block 什么时候会显示间隙

  • 相邻的inline-block元素之间有换行或者空格的情况下
  • 非inline-block水平元素设置为inline-block也会有水平间距
  • 可以借助vertical-align:top消除垂直间隙
  • 可以在父级加font-size:0消除垂直间隙
  • 把li标签写到同一行可以消除垂直间隙

16.display:inline-block间隙怎么解决
移除空格、使用margin负值、使用font-size:0、letter-spacing、word-spacing

17.css定义的权重
1.如果一个声明来自style属性而不是选择器,记做1或者a=1(在一个html文档中,元素"style"的值是样式表规则,这个规则中没有选择器,所以a=1,b=0,c=0,d=0
2.选择器中id属性的个数记做b
3.选择器中其他属性以及伪类的个数记做c
4.选择器中元素以及伪元素的个数记做d

 

a,b,c,d只是在各自位置里数字的累加,而不会越级
权重最高的是!imporant,会覆盖以上所有,行内样式也高不过他

18.CSS优先级算法如何计算

  • 优先级就近原则,同权重情况下样式定义最近者为准
  • 载入样式以最后载入的为准
  • 优先级为:!important > id > class > tag

19.浮动与清除浮动
浮动的元素可以向左或者向右移动,直到他的外边缘碰到包含框或者另一个浮动元素的边框为止。由于浮动元素脱离了标准文档流,所以文档的标准文档流的块框表现的就像浮动元素不存在一样。浮动的元素就会漂浮在标准文档流的元素上
解决办法
1.父级元素定义伪类:after和zoom

 

2.在结尾处添加空div clear:both

 

3.父元素设置height
4.父元素设置overflow:hidden
5.父元素设置overflow:auto
6.父元素也一起浮动
7.父元素定义display:table
8.结尾处添加 br 标签 clear:both

20.box-sizing常用的属性有哪些,分别有什么作用

  • box-sizing:content-box 默认的标准盒模型元素效果
  • box-sizing:border-box 触发怪异盒模型元素的效果
  • box-sizing:inherit 继承父元素 box-sizing 属性的值

21.列举几种隐藏元素的方法

  • visibility:hidden 这个属性只是简单的隐藏某个元素,但元素占用的空间仍然存在
  • opacity:0 CSS3属性,设置0可以使一个元素完全透明
  • position:absolute 设置一个很大的left负值定位,使元素定位在可见区域之外
  • display:none 元素会变得不可见,并且不再占用文档空间
  • transform:scale(0) 将一个元素无限缩小,元素将不可见,元素原来的位置将被保留
  • HTML5属性,效果和display:none相同,但这个属性用于记录一个元素的状态
  • height:0 将元素高度设为0,并消除边框
  • filter:blur(0) CSS3属性,将一个元素的模糊度设置为0,从而使元素不可见

22.rgba() 和 opacity 的透明效果有什么不同

  • opacity 作用于元素以及元素内的所有内容的透明度
  • rgba() 只作用于元素自身的颜色或其背景色,子元素不会继承透明效果

23.css 属性 content 有什么作用
content 属性专门应用在 before / after伪元素上,用于插入额外内容或样式

24.请解释一下 CSS3 的 Flexbox(弹性盒模型)以及适用场景
Flexbox 用于 不同尺寸屏幕中创建可自动扩展和收缩布局

25.请列出多种高等布局

  • 在列的父元素上使用这个背景图进行Y轴铺放,从而实现一种高等列的假象
  • 模仿表格布局等高列效果:兼容性不好,在IE6-7无法正常运行
  • css3 flexbox 布局:.container{display:flex;align-items:stretch}

26.圣杯布局的实现原理
要求:三列布局,中间主体内容前置且宽度自适应,两边内容定宽
好处:重要的内容放在文档流前面可以优先渲染
原理:利用相对定位、浮动、负边距布局,而不添加额外标签

 

27.什么是双飞翼布局?实现原理
双飞翼布局:对圣杯布局的改进,消除其相对定位布局的局限性
原理:主体元素设置左右边距,预留两翼位置。左右两栏使用浮动和负边距归位,消除相对定位

 

28.在 CSS 样式中常使用 px、em 在表现上有什么区别

  • px 相对于显示器屏幕分辨率,无法使用浏览器字体放大功能
  • em 值并不是固定的,会继承父级的字体大小:em = 像素值 / 父级 font-size

29.为什么要初始化 CSS 样式

  • 不同浏览器对有些标签样式的默认值解析不同
  • 不初始化 CSS 会造成各种浏览器之间的页面显示差异
  • 可以使用 reset.css 或 Normalize.css 做 CSS 初始化

25.reset.css 和 Normalize.css 理解
reset.css 意为重置默认样式。HTML 中大部分标签元素在网页显示中都有一个默认属性值,通常为了避免重复定义元素样式,需要进行重置默认样式

Eric Meyer(CSS Reset)推荐

 

Normalize.css 只是一个很小的 css 文件,但他在默认的 HTML 元素样式上提供了跨浏览器的高度一致性。相比于传统的 css reset,Normalize.css 是一种现代化的,为 HTML5 准备的优质替代方案。
Normalize.css 的作用

  • 保护有用的浏览器默认样式而不是完全去掉他们
  • 一般化的样式:为大部分 HTML 元素提供
  • 修复浏览器自身的 bug 并保证各浏览器的一致性
  • 优化 CSS 可用性
  • 解释代码:用注释和详细的文档

26.什么是 FOUC(Flash of Unstyled Content)?如何避免 FOUC

  • 当使用 @import 导入 CSS 时,会导致某些页面在 IE 出现奇怪的现象:没有样式的页面内容显示瞬间闪烁,这种现象称为“文档样式短暂失效“,简称为 FOUC
  • 产生原因:当样式晚于结构性 html 加载时,加载到样式变时,页面将停止之前的渲染
  • 等待此样式表被下载和解析后,再重新渲染页面时,期间导致短暂的花屏现象
  • 解决办法:使用 link 标签将样式表放在文档 head 里

27.介绍使用过的 CSS 预处理器

  • CSS 预处理器基本思想:为 CSS 增加了一些编程的特性(变量、逻辑判断、函数等)
  • 开发者使用这些语言进行 Web 页面样式设计,再编译成正常的 CSS 文件使用
  • 使用 CSS 预处理器可以使 CSS 更加简洁、适应性更强、可读性更强,无需考虑兼容性
  • 最常用的 CSS 预处理器语言包括:Sass(SCSS) 和 LESS

28.CSS 优化、提高性能的方法

  • 多个 css 合并,尽量减少 HTTP 请求
  • 将 css 文件放在页面最上面
  • 移除空的 css 规则
  • 避免使用 CSS 表达式
  • 选择器优化嵌套,尽量避免层级过深
  • 充分利用 css 继承属性,减少代码量
  • 抽象提取公共样式,减少代码量
  • 属性值为0时,不加单位
  • 属性值为小于1的小数时,省略小数点前面的0
  • css 雪碧图

29.浏览器是怎样解析 CSS 选择器的

浏览器解析 CSS 选择器的方式是从右到左

30.在网页中的应该使用奇数还是偶数的字体

在网页中应该使用 偶数 字体

  • 偶数字体相对更容易和 web 设计的其他部分构成比例关系
  • 使用奇数字体时文本段落无法对齐
  • 宋体的中文网页排布中使用最多的就是 12 和 14

30.margin 和 padding 分别适合什么场景使用

  • 需要在 border 外侧添加空白,且空白处不需要背景色时使用 margin
  • 需要在 border 内侧添加空白,且空白处需要背景色时使用 padding

31.抽离样式模块怎么写

CSS可以拆分为 2 部分:公共 CSS 和 业务 CSS

  • 网站的配色,字体,交互提取出为公共 CSS。这部分 CSS 命名不应涉及具体的业务
  • 对于业务 CSS,需要有统一的命名,使用公用的前缀。可以参考面对对象的 CSS

32.元素竖向的百分比设定是相对于容器的高度嘛

  • 如果是 height 的话,是相对于容器高度
  • 如果是 padding-height,margin-height 则是相对于容器的宽度

33.全屏滚动的原理是什么,用到了 CSS 的哪些属性

  • 原理类似图片轮播原理,超出隐藏部分,滚动时显示
  • 可能用到的 CSS 属性:overflow:hidden;transform:translate(100%,100%);

34.什么是响应式设计,响应式设计的基本原理是什么,如何兼容低版本的 IE

  • 响应式设计就是网站能够兼容多个终端,而不是为每个终端做一个特定的版本
  • 基本原理就是利用 CSS3 媒体查询,为不同尺寸的设备适配不同样式
  • 对于低版本的 IE ,可采用 JS 获取屏幕宽度,然后通过 resize 方法实现兼容
 

35.什么是视差滚动效果,如何给每页做不同的动画

  • 视差滚动是指多层背景以不同的速度移动,形成立体的运动效果,具有非常出色的视觉体验
  • 一般把网页解剖为:背景色、内容层和悬浮层。当滚动鼠标滚轮时,各图层以不同速度移动,形成视差

实现原理

  • "页面滚动条"作为"视差动画进度条"
  • "滚轮刻度"当作"动画帧度"去播放动画
  • 监听 mousewheel 事件,事件被触发即播放动画,实现"翻页"效果

36.a 标签上四个伪类的执行顺序是怎样的

LoVe HAte => “爱恨原则”
link > visited > hover > active

37.伪元素和伪类的区别和作用

伪元素:在内容的前后插入额外的元素或样式,但是这些元素实际上并不在文档中生成,他们只在外部显示可见,但不会在文档的源代码中找到他们,因此,称为 “伪” 元素。
eg

 

伪类:将特殊的效果添加到特定选择器上。他是已有元素上添加类别的,不会产生新的元素。
eg

 

38. ::before 和 :after 中双冒号和单冒号的区别

  • 在 CSS 中伪类一直用 : 表示,如 :hover,:active等
  • 伪元素在 CSS1 中已存在,当时语法是用 : 表示,如 :before 和 :after
  • 后来在 CSS3 中修订,伪元素用 :: 表示,如 ::before 和 ::after ,以此区别伪元素和伪类
  • 由于低版本 IE 对双冒号不兼容,开发者为了兼容各浏览器,继续使用 :after 这种老语法表示伪元素
  • 综上所述: ::before 是 CSS3 中伪元素的新语法,:after 是 CSS1 中存在的、兼容 IE 的老语法

39.如何修改 Chrome 记住密码后自动填充表达的黄色背景

  • 产生原因:由于 Chrome 默认会给自动填充的 input 表单加上 input:-webkit-autofill 私有属性造成的
  • 解决方案1:在 form 标签上直接关闭表单的自动填充:autocomplete = “off”
  • 解决方案2:input:-webkit-autofill {background-color:transparent;}

input[type = search] 搜索框右侧小图标如何美化

 

40.网站图片文件,如何点击下载,而非点击预览

 

41.iOS safari 如何阻止"橡皮筋效果"

 

42.你对 line-height 是如何理解的

  • line-height 指一行字的高度,包含了字间距,实际上是下一行基线到上一行基线距离
  • 如果一个标签没有定义 height 属性,那么其最终表现的高度是由 line-height 决定的
  • 一个容器没有设置高度,那么撑开容器高度的是 line-height 而不是容器内的文字内容
  • 把 line-height 设置为 height 一样的值可以实现单行文字的垂直居中
  • line-height 和 height 都能撑开一个高度,height 会触发 haslayout,而 line-height 不会

43.line-height 三种赋值方式有何区别(带单位、纯数字、百分比)

  • 带单位:px 是固定值,而 em 会参考父元素 font-size 值自行计算自身的行高
  • 纯数字:会把比例传递给后代。例如,父级行高为 1.5,子元素字体为 18px,则子元素的行高为 1.5 * 18 = 27px
  • 百分比:将计算的值传递给后代

44.设置元素浮动后,该元素的 display 值会如何变化

设置元素浮动后,该元素的 display 值自动变成 block

45.怎么让 Chrome 支持小于 12px 的文字

 

46.让页面里的字体变清晰,变细用 CSS 怎么做(IOS手机浏览器字体齿轮设置)

 

47.font-size 属性 oblique 是什么意思

font-size:oblique; 使没有 italic 属性的文字实现倾斜

48.如果需要手写动画,你认为最小时间间隔是多久

16.7ms
多数显示器默认频率是 60Hz,即 1秒刷新 60 次,所以理论上最小间隔:1s / 60 * 1000 = 16.7ms

49.overflow:scroll 时不能平滑滚动的问题怎么处理

监听滚轮事件,然后滚动到一定距离时用 jquery 的 animate 实现平滑效果

50.一个高度自适应的 div,里面有两个 div,一个高度 100px,希望另一个填满剩下的高度

  • 方案1:.sub { height : calc { 100% - 100px };}
  • 方案2:.container { position : relative;} .sub { position : absolute; top : 100px; bottom : 0;}
  • 方案3:.container { display : flex; flex-drection : column;} .sub { flex : 1}

51.CSS 中类 class 和 id 的区别

对于 CSS 而言,id 和 class 都是选择器,唯一不同的地方在于权重不同。
对于 html 而言,id 和 class 都是 dom 元素的属性值。不同的地方在于 id 属性的值是唯一的,而 class 属性可以重复。
id 还有一个特性是锚点功能,当浏览器地址栏有一个 #xxx,页面会自动滚到 id = xxx 的元素上面

52.如何优化网页的打印样式

 

其中 media 指定的属性就是设备,显示器上就是 screen,打印机则是 print,电视是 tv,投影仪是 projection。

 

打印样式注意事项

  • 打印样式表中最好不要用背景图片,因为打印机不能打印 CSS 中的背景。如要显示图片,请用 html 插入到页面中
  • 最好不要使用像素最为单位,因为打印样式表要打印出来的会是实物,所以建议使用 pt 和 cm
  • 隐藏掉不必要的内容
  • 打印样式表中最好少用浮动属性,因为他们会消失

53.请问为何要使用 transform 而非 absolute positioning

  • 使用 transform 或 position 实现动画效果时是有很大差异
  • 使用 transform 时,可以让 GPU 参与运算,动画的 FPS 更高
  • 使用 position 时,最小的动画变化单位是 1px,而使用 transform 参与时,可以做到更小
  • 功能都一样,但是 transform 不会引起浏览器的重绘和重排

反之

  • transform 改变 fixed 子元素的定位对象
  • transform 改变元素层叠顺序

54.请解释 CSS sprites,以及你要如何在页面或者网站中实现它

  • CSS Sprites 其实就是把网页中的一些背景图片整合到一张图片文件中,再利用 CSS 的 “background-image”,“background-repeat”,“background-position” 的组合进行背景定位,background-position 可以用数字能精准的定位出背景图片的位置
  • CSS Sprites 为一些大型的网站节约了带宽,提高了用户的加载速度和用户体验,不需要加载更多的图片

55.SVG 样式的书写

SVG等效的 CSSfillbackground-color 或 colorfill-opacitybackground-color 或 color 设置 rgba/hslaopacityopacitystrokeborder-colorstroke-widthborder-thicknessstroke-opacityborder-color 设置 rgbarx,ryborder-radius

下面的属性在 SVG 和 CSS 中是一样的,只是在 SVG 的 transformations 和 dimensions 中稍有区别

  • font-family,font-size,font-style,font-variant 和 font-weight
  • width 和 height
  • scale,rotate,skew

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号