FAQ?
画一条0.5px的线
-
采用meta viewport的方式
1px像素线条 :
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=0">
0.5像素线条:
<meta name="viewport" content="width=device-width,initial-scale=0.5,user-scalable=0">
-
采用 border-image的方式 首先需要自己制作一个0.5像素的线条作为线条背景图片。
p{ border-width: 0 0 1px 0; border-image: imageUrl 2 0 round; }
-
采用transform: scale()的方式 推荐
transform: scaleY(0.5);
transform-origin: 50% 100%;
link标签和import标签的区别
- 本质区别:link是html的一个标签,除了导入css文件外,还可以定义其他事物,而import是css的法则,只供给css加载文件
- DOM:DOM可以控制文档中的所有元素,可以插入link修改样式,不可以操作import
- 权重优先级:link的修改样式的优先级高于import
- 加载顺序:link导入的css文件随着页面加载而加载,import等到页面加载完毕,再加载
- 兼容性:link作为html标签没有兼容性问题,而import不兼容ie5及以下
visibility opacity display
visibility=hidden, opacity=0,display:none
-
opacity=0,该元 素隐藏起来了,但不会改变页面布局,并且,如果该元素已经绑定一些事件,如 click 事件,那么点击该区域,也能触发点击事件的
-
visibility=hidden,该元素隐藏起来了,但不会改变页面布局,但是不会触发该元素已经绑定的事件
-
display=none,把元素隐藏起来,并且会改变页面布局,可以理解成在页面中把该元素删除掉一样。
双边距重叠问题(外边距折叠)
多个相邻(兄弟或者父子关系)普通流的块元素垂直方向 marigin 会重叠
折叠的结果为:
两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。 两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。 两个外边距一正一负时,折叠结果是两者的相加的和。
position属性比较
固定定位 fixed:
元素的位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会移动。Fixed 定位使元素的位置与文档流无关,因此不占据空间。 Fixed 定位的元素和其他元素重叠。
相对定位 relative:
如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。 在使用相对定位 时,无论是否进行移动,元素仍然占据原来的空间。因此,移动元素会导致它覆盖其它框。
绝对定位 absolute:
绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于<html>
。 absolute 定位使元素的位置与文档流无关,因此不占据空间。 absolute 定位的元素和其他元素重叠。
粘性定位 sticky:
元素先按照普通文档流定位,然后相对于该元素在流中的 flow root(BFC)和containing block(最近的块级祖先元素)定位。而后,元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。
默认定位 Static:
默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者z-index 声明)。
inherit:
规定应该从父元素继承 position 属性的值。
浮动清除
方法一:使用带 clear 属性的空元素
在浮动元素后使用一个空元素如<div class="clear"></div>
,并在 CSS 中赋予.clear{clear:both;}
属性即可清理浮动。亦可使用<br class="clear" />
或<hrclass="clear" />
来进行清理。
方法二:使用 CSS 的 overflow 属性
给浮动元素的容器添加 overflow:hidden;或 overflow:auto;可以清除浮动,另外在IE6 中还需要触发 hasLayout ,例如为父元素设置容器宽高或设置 zoom:1。在添加 overflow 属性后,浮动元素又回到了容器层,把容器高度撑起,达到了清理 浮动的效果。
方法三:给浮动的元素的容器添加浮动
给浮动元素的容器也添加上浮动属性即可清除内部浮动,但是这样会使其整体浮动,影响布局,不推荐使用。
方法四:使用邻接元素处理
什么都不做,给浮动元素后面的元素添加 clear 属性。
方法五:使用 CSS 的:after 伪元素
结合:after 伪元素(注意这不是伪类,而是伪元素,代表一个元素之后最近的元素)和 IEhack ,可以完美兼容当前主流的各大浏览器,这里的 IEhack 指的是触发hasLayout。
给浮动元素的容器添加一个 clearfix 的 class,然后给这个 class 添加一个:after 伪元素实现元素末尾添加一个看不见的块元素(Block element)清理浮动。
怎么样让一个元素消失,讲讲
- display:none;
把元素隐藏起来,并且会改变页面布局,可以理解成在页面中把该元素删除掉。当display设置为none,任何对该元素直接的用户交互操作都不可能生效。
- visibility:hidden;
该元素隐藏起来了,不会改变页面布局,仍占据原有空间,但不会触发该元素已经绑定的事件。
- opacity:0;filter:alpha(opacity=0);
该元素隐藏起来了,但不会改变页面布局,并且,如果该元素已经绑定一些事件,如click事件,那么点击该区域,也能触发点击事件的它只是一种视觉隐藏,将元素变得透明。元素本身依旧 占用它的位置。
- z-index:-1000;
将元素隐藏不占据空间,会改变页面布局,不能进行交互事件
- position:absolute;top:-1000px;left:-1000px;
这个方法是通过将left和top的值设的很大,让元素定位到浏览器外面。不占据空间,不能点击 将定位方式设置为relative或者fixed然后将其定位到浏览器外面可以达到同样的效果,区别在于使用relative定位仍会占有原有的空间,而使用absolute以及fixed定位不占据空间
- transform:rotateY(90deg);
使用3d旋转,使元素隐藏,旋转x轴也可以达到同样的效果,要注意的是,css3 3D转换元素进行使用的时候,必须给父元素添加transform-style:preserve-3d;perspective:1000px;用于提供3D空间,以及设置景深
- transform: scale(0,0)
通过缩放达到元素消失的视觉效果,元素仍占据空间
- width:0;height:0;overflow:hidden;
display:table和本身的table有什么区别
Display:table 和本身 table 是相对应的,区别在于,display:table 的 css 声明能够让一个 html 元素和它的子节点像 table 元素一样,使用基于表格的 css 布局,是我们能够轻松定义一个单元格的边界,背景等样式,而不会产生因为使用了 table 那样的制表标签导致的语义化问题。
之所以现在逐渐淘汰了 table 系表格元素,是因为用 div+css 编写出来的文件比用table 边写出来的文件 小,而且 table 必须在页面完全加载后才显示,div 则是逐行显示,table 的嵌套性太多,没有 div 简洁.
伪元素选择器与伪类选择器的区别
特性 | 伪元素选择器 (::before , ::after , etc.) | 伪类选择器 (:hover , :focus , etc.) |
---|---|---|
目标 | 用于选择 元素的某一部分 或 虚拟内容 | 用于选择 元素的特定状态 |
创建新元素 | 可以通过 content 属性创建虚拟内容 | 不创建新元素,只影响现有元素的状态 |
用法 | ::before , ::after , ::first-letter 等 | :hover , :focus , :nth-child 等 |
是否响应用户交互 | 不直接响应用户交互(除非结合其他伪类使用) | 通常用于响应用户交互(如点击、悬停、焦点) |
适用场景 | 添加装饰性内容,修改元素的部分展示 | 样式化元素在不同状态下的外观(如悬停、聚焦等) |
:where() 和 :is() 函数的区别
这两个函数的区别在于 :where() 函数的优先级总是零,则 :is() 函数的优先级取决于其 最特定参数的优先级。
link 和@import 的区别
<link>
和 @import
都是用来引入外部资源(如样式表)的方法,但它们之间有一些重要的区别:
-
引入位置:
<link>
:通常位于 HTML 文档的<head>
部分,用于在页面加载时同时加载外部资源。@import
:必须写在 CSS 文件中,用于在加载 CSS 时加载其他 CSS 文件。
-
加载时间:
<link>
:在页面加载时同时加载外部资源,不会阻塞页面的渲染。@import
:在 CSS 文件加载时才会加载其他 CSS 文件,可能会导致页面渲染被阻塞。
-
浏览器兼容性:
<link>
:广泛支持,适用于所有现代浏览器。@import
:旧版本的浏览器可能不支持,特别是 IE5-IE9。
-
权重:
<link>
:外部样式表的权重高于页面上的其他样式。@import
:@import
的样式权重低于页面上的其他样式。
-
JavaScript 操作:
<link>
:可以通过 JavaScript 动态地添加或移除<link>
元素。@import
:由于是 CSS 规则,不能通过 JavaScript 动态添加或移除。
-
性能:
<link>
:并行加载外部资源,可以提高页面加载速度。@import
:串行加载,可能影响页面加载性能。
-
用法:
<link>
:用于引入样式表、字体等外部资源。@import
:用于在一个 CSS 文件中引入其他 CSS 文件。
总的来说,推荐使用 <link>
来引入外部样式表,尤其是对于页面的主要样式表。而 @import
主要在特殊情况下使用,比如在已有的样式表中引入一些辅助的样式。
对CSS Sprites(CSS 精灵)的理解
CSSSprites(精灵图),将一个页面涉及到的所有图片都包含到一张 大图中去,然后利用 CSS 的 background-image,background-repeat, background-position 属性的组合进行背景定位。
优点:
利用 CSS Sprites 能很好地减少网页的 http 请求,从而大大提高了 页面的性能,这是 CSS Sprites 最大的优点; CSS Sprites 能减少图片的字节,把 3 张图片合并成 1 张图片的字节 总是小于这 3 张图片的字节总和。
缺点:
在图片合并时,要把多张图片有序的、合理的合并成一张图片,还要 留好足够的空间,防止板块内出现不必要的背景。在宽屏及高分辨率 下的自适应页面,如果背景不够宽,很容易出现背景断裂; CSSSprites 在开发的时候相对来说有点麻烦,需要借助 photoshop 或其他工具来对每个背景单元测量其准确的位置。
维护方面:
CSS Sprites 在维护的时候比较麻烦,页面背景有少许改 动时,就要改这张合并的图片,无需改的地方尽量不要动,这样避免 改动更多的 CSS,如果在原来的地方放不下,又只能(最好)往下加 图片,这样图片的字节就增加了,还要改动 CSS。
常见的 CSS 布局单位
当涉及到CSS布局时,以下是一些常见的单位,以及它们的用法和示例:
-
像素(px):
- 用法:固定尺寸,常用于精确布局。
- 示例:
width: 200px;
-
百分比(%):
- 用法:相对于父元素的尺寸进行布局,用于响应式设计。
- 示例:
width: 50%;
-
视窗宽度单位(vw):
- 用法:相对于浏览器窗口宽度的百分比单位,用于响应式布局。
- 示例:
font-size: 5vw;
-
视窗高度单位(vh):
- 用法:相对于浏览器窗口高度的百分比单位,用于响应式布局。
- 示例:
height: 50vh;
-
根元素字体大小单位(rem):
- 用法:相对于根元素字体大小,用于创建响应式布局。
- 示例:
font-size: 1.5rem;
-
字符宽度单位(ch):
- 用法:相对于字符 "0" 的宽度,通常用于等宽字体的布局。
- 示例:
width: 20ch;
-
最小宽度单位(min-width):
- 用法:设置元素的最小宽度,以确保不小于指定的值。
- 示例:
min-width: 300px;
-
最大宽 度单位(max-width):
- 用法:设置元素的最大宽度,以确保不超过指定的值。
- 示例:
max-width: 800px;
-
相对字体单位(em):
- 用法:相对于元素的字体大小,用于创建与字体相关的布局。
- 示例:
font-size: 1.2em;
-
行高单位(line-height):
- 用法:通常可以使用数字或百分比来设置行高,以垂直居中文本。
- 示例:
line-height: 1.5;
或line-height: 150%;
如何解决 1px 问题?
1px问题是指在高分辨率的设备上,以1个物理像素绘制的边框或线条在屏幕上看起来过于细微或模糊的现象。这个问题在移动设备上特别常见。为了解决1px问题,可以考虑以下几种方法:
-
使用
border
属性绘制边框: 直接使用border
属性绘制边框,而不是使用width
和height
来绘制,因为border
属性可以在不同分辨率的设备上自动调整。.element {
border: 1px solid #000;
} -
使用
transform: scale()
: 可以使用CSS的transform
属性对元素进行缩放来解决1px问题。通过将元素缩小,然后再放大,可以使边框看起来更加清晰。.element {
transform: scale(0.5);
transform-origin: left top;
}这里的
scale(0.5)
将元素缩小一半,然后通过transform-origin
属性将变换的原点设置为左上角。 -
使用伪元素::after或::before: 可以使用伪元素来创建额外的元素,然后对其进行缩放,以实现1px效果。
.element::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 200%; /* 或者其他倍数 */
height: 200%; /* 或者其他倍数 */
border: 1px solid #000;
transform: scale(0.5);
transform-origin: left top;
} -
使用特定的CSS框架或工具: 有一些专门解决1px问题的CSS框架和工具,如
border.css
、border-loader
等。这些工具可以自动处理1px问题,让开发更加方便。 -
使用像素单位: 在某些情况下,如果您可以接受在高分辨率设备上显示略粗的线条,可以直接使用像素 单位(px)绘制边框。
em/px/rem/vh/vw区别?
px:绝对单位,页面按精确像素展示
em:相对单位,基准点为父节点字体的大小,如果自身定义了font-size按自身来计算,整个页面内1em不是一个固定的值
rem:相对单位,相对的只是HTML根元素font-size的值
vw,就是根据窗口的宽度,分成100等份,100vw就表示满宽,同理,vh则为窗口的高度vh、vw:主要用于页面视口大小布局,在页面布局上更加方便简单
什么是响应式设计?响应式设计的基本原理是什么?如何做?
响应式网站设计是一种网络页面设计布局,页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整
响应式设计的基本原理:通过媒体查询检测不同的设备屏幕尺寸做处理,为了处理移动端,页面头部必须有meta声明viewport
实现响应式布局的方式有如下:1、媒体查询 2、百分比 3、vw/vh 4、rem
媒体查询语法:
@mediascreen (min-width: 375px) and (max-width: 600px) {
body {
font-size: 18px;
}
}
响应式布局优点:1、面对不同分辨率设备灵活性强2、能够快捷解决多设备显示适应问题
缺点:
1、仅适用布局、信息、框架并不复杂的部门类型网站
2、兼容各种设备工作量大,效率低下
如何使用css完成视差滚动效果?
视差滚动(Parallax Scrolling)是指多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验
可以使用transform:translate3D来实现
transform:css3 属性,可以对元素进行变换(2d/3d),包括平移 translate,旋转 rotate,缩放 scale,
perspective:css3 属性,当元素涉及 3d 变换时,perspective 可以定义我们眼睛看到的 3d 立体效果,即空间感
这种方式实现视觉差动的原理如下:
1、容器设置上 transform-style: preserve-3d 和 perspective: xpx,那么处于这个容器的子元素就将位于3D空间中,
2、子元素设置不同的 transform: translateZ(),这个时候,不同元素在 3D Z轴方向距离屏幕(我们的眼睛)的距离也就不一样
3、滚动滚动条,由于子元素设置了不同的 transform: translateZ(),那么他们滚动的上下距离 translateY 相对屏幕(我们的眼睛),也是不一样的,这就达到了滚动视差的效果
让Chrome支持小于12px的文字方式有哪些?区别?
1、zoom
zoom的字面意思是“变焦”,可以改变页面上元素的尺寸,属于真实尺寸
其支持的类型有:
zoom:50%,表示缩小到原来的一半
zoom:0.5,表示缩小到原来的一半
2、-webkit-transform:scale()
针对chrome浏览器,加webkit前缀,用transform:scale()这个属性进行放缩
3、-webkit-text-size-adjust:none
该属性用来设定文字大小是否根据设备(浏览器)来自动调整显示大小