第⼀部分:基础篇

200 阅读18分钟

⼆、CSS部分

1 css sprite是什么,有什么优缺点

  • 概念:将多个⼩图⽚拼接到⼀个图⽚中。通过 background-position 和元素尺⼨调节需要显示的背景图案。
  • 优点:
    • 减少 HTTP 请求数,极⼤地提⾼⻚⾯加载速度
    • 增加图⽚信息重复度,提⾼压缩⽐,减少图⽚⼤⼩
    • 更换⻛格⽅便,只需在⼀张或⼏张图⽚上修改颜⾊或样式即可实现
  • 缺点:
    • 图⽚合并麻烦
    • 维护麻烦,修改⼀个图⽚可能需要从新布局整个图⽚,样式

2 display: none; 与 visibility: hidden; 的区别

  • 联系:它们都能让元素不可⻅
  • 区别:
    • display:none ;会让元素完全从渲染树中消失,渲染的时候不占据任何空间;是⾮继承属性,⼦孙节点消失由于元素从渲染树消失造成,通过修改⼦孙节点属性⽆法显示 ;
    • visibility: hidden ;不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可⻅;是继承属性,⼦孙节点消失由于继承了 hidden ,通过设置 visibility: visible; 可以让⼦孙节点显式
  • 修改常规流中元素的 display 通常会造成⽂档重排。修改 visibility 属性只会造成本元素的重绘
  • 读屏器不会读取 display: none ;元素内容;会读取 visibility: hidden; 元素内容

3 link 与 @import 的区别

  • link 是 HTML ⽅式, @import 是CSS⽅式
  • link 最⼤限度⽀持并⾏下载, @import 过多嵌套导致串⾏下载,出现 FOUC (⽂档样式短暂失效)
  • link 可以通过 rel="alternate stylesheet" 指定候选样式
  • 浏览器对 link ⽀持早于 @import ,可以使⽤ @import 对⽼浏览器隐藏样式
  • @import 必须在样式规则之前,可以在css⽂件中引⽤其他⽂件
  • 总体来说: link 优于 @import

4 什么是FOUC?如何避免

  • Flash Of Unstyled Content :⽤户定义样式表加载之前浏览器使⽤默认样式显示⽂档,⽤户样式加载渲染之后再从新显示⽂档,造成⻚⾯闪烁。
  • 解决⽅法:把样式表放到⽂档的

5 如何创建块级格式化上下⽂(block formatting context),BFC有什么⽤

创建规则:

  • 根元素
  • 浮动元素( float 不取值为 none )
  • 绝对定位元素( position 取值为 absolute 或 fixed )
  • display 取值为 inline-block 、 table-cell 、 table-caption 、 flex 、inline-flex 之⼀的元素
  • overflow 不取值为 visible 的元素 作⽤:
  • 可以包含浮动元素
  • 不被浮动元素覆盖
  • 阻⽌⽗⼦元素的 margin 折叠

6 display、float、position的关系

  • 如果 display 取值为 none ,那么 position 和 float 都不起作⽤,这种情况下元素不产⽣框
  • 否则,如果 position 取值为 absolute 或者 fixed ,框就是绝对定位的, float 的计算值为 none , display 根据下⾯的表格进⾏调整
  • 否则,如果 float 不是 none ,框是浮动的, display 根据下表进⾏调整
  • 否则,如果元素是根元素, display 根据下表进⾏调整
  • 其他情况下 display 的值为指定值
  • 总结起来:绝对定位、浮动、根元素都需要调整 display

7 清除浮动的⼏种⽅式,各⾃的优缺点

  • ⽗级 div 定义 height
  • 结尾处加空 div 标签 clear:both
  • ⽗级 div 定义伪类 :after 和 zoom
  • ⽗级 div 定义 overflow:hidden
  • ⽗级 div 也浮动,需要定义宽度
  • 结尾处加 br 标签 clear:both
  • ⽐较好的是第3种⽅式,好多⽹站都这么⽤

8 为什么要初始化CSS样式?

  • 因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对 CSS 初始化往往会出现浏览器之间的⻚⾯显示差异。
  • 当然,初始化样式会对 SEO 有⼀定的影响,但⻥和熊掌不可兼得,但⼒求影响最⼩的情况下初始化

9 css3有哪些新特性

  • 新增各种 css 选择器
  • 圆⻆ border-radius
  • 多列布局
  • 阴影和反射
  • ⽂字特效 text-shadow
  • 线性渐变
  • 旋转 transform CSS3新增伪类有那些?
  • p:first-of-type 选择属于其⽗元素的⾸个<p>元素的每个<p>元素。
  • p:last-of-type 选择属于其⽗元素的最后 <p> 元素的每个 <p> 元素。
  • p:only-of-type 选择属于其⽗元素唯⼀的 <p> 元素的每个 <p> 元素。
  • p:only-child 选择属于其⽗元素的唯⼀⼦元素的每个 <p> 元素。
  • p:nth-child(2) 选择属于其⽗元素的第⼆个⼦元素的每个 <p> 元素。
  • :after 在元素之前添加内容,也可以⽤来做清除浮动。
  • :before 在元素之后添加内容。
  • :enabled 已启⽤的表单元素。
  • :disabled 已禁⽤的表单元素。
  • :checked 单选框或复选框被选中。

10 display有哪些值?说明他们的作⽤

  • block 转换成块状元素。
  • inline 转换成⾏内元素。
  • none 设置元素不可⻅。
  • inline-block 象⾏内元素⼀样显示,但其内容象块类型元素⼀样显示。
  • list-item 象块类型元素⼀样显示,并添加样式列表标记。
  • table 此元素会作为块级表格来显示
  • inherit 规定应该从⽗元素继承 display 属性的值

11 介绍⼀下标准的CSS的盒⼦模型?低版本IE的盒⼦模型有什么不同的?

  • 有两种, IE 盒⼦模型、 W3C 盒⼦模型;
  • 盒模型: 内容(content)、填充( padding )、边界( margin )、 边框( border );
  • 区 别: IE 的c ontent 部分把 border 和 padding 计算了进去;

12 CSS优先级算法如何计算?

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

13 对BFC规范的理解?

  • 它决定了元素如何对其内容进⾏定位,以及与其他元素的关系和相互作⽤

14 谈谈浮动和清除浮动

  • 浮动的框可以向左或向右移动,直到他的外边缘碰到包含框或另⼀个浮动框的边框为⽌。由于浮动框不在⽂档的普通流中,所以⽂档的普通流的块框表现得就像浮动框不存在⼀样。浮动的块框会漂浮在⽂档普通流的块框上

15 position的值, relative和absolute定位原点是

  • absolute :⽣成绝对定位的元素,相对于 static 定位以外的第⼀个⽗元素进⾏定位
  • fixed :⽣成绝对定位的元素,相对于浏览器窗⼝进⾏定位
  • relative :⽣成相对定位的元素,相对于其正常位置进⾏定位
  • static 默认值。没有定位,元素出现在正常的流中
  • inherit 规定从⽗元素继承 position 属性的值

16 display:inline-block 什么时候不会显示间隙?

  • 移除空格
  • 使⽤ margin 负值
  • 使⽤ font-size:0
  • letter-spacing
  • word-spacing

17 PNG\GIF\JPG的区别及如何选

GIF

  • 8 位像素, 256 ⾊
  • ⽆损压缩
  • ⽀持简单动画
  • ⽀持 boolean 透明
  • 适合简单动画

JPEG

  • 颜⾊限于 256
  • 有损压缩
  • 控制压缩质量
  • 不⽀持透明
  • 适合照⽚

PNG

  • 有 PNG8 和 truecolor PNG
  • PNG8 类似 GIF 颜⾊上限为 256 ,⽂件⼩,⽀持 alpha 透明度,⽆动画
  • 适合图标、背景、按钮

18 ⾏内元素float:left后是否变为块级元素?

  • ⾏内元素设置成浮动之后变得更加像是 inline-block(⾏内块级元素,设置成这个属性的元素会同时拥有⾏内和块级的特性,最明显的不同是它的默认宽度不是 100% ),这时候给⾏内元素设置 padding-top 和 padding-bottom或者 width 、 height 都是有效果的

19 在⽹⻚中的应该使⽤奇数还是偶数的字体?为什么呢?

  • 偶数字号相对更容易和 web 设计的其他部分构成⽐例关系

20 ::before 和 :after中双冒号和单冒号 有什么区别?解释⼀下这2个伪元素的作⽤

  • 单冒号( : )⽤于 CSS3 伪类,双冒号( :: )⽤于 CSS3 伪元素
  • ⽤于区分伪类和伪元素

21 如果需要⼿动写动画,你认为最⼩时间间隔是多久,为什么?(阿⾥)

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

22 CSS合并⽅法

  • 避免使⽤ @import 引⼊多个 css ⽂件,可以使⽤ CSS ⼯具将 CSS 合并为⼀个 CSS ⽂件,例如使⽤ Sass\Compass 等

23 CSS不同选择器的权重(CSS层叠的规则)

  • !important 规则最重要,⼤于其它规则
  • ⾏内样式规则,加 1000
  • 对于选择器中给定的各个 ID 属性值,加 100
  • 对于选择器中给定的各个类属性、属性选择器或者伪类选择器,加 10
  • 对于选择其中给定的各个元素标签选择器,加1
  • 如果权值⼀样,则按照样式规则的先后顺序来应⽤,顺序靠后的覆盖靠前的规则

24 列出你所知道可以改变⻚⾯布局的属性

position 、 display 、 float 、 width 、 height 、 margin 、 padding 、top 、 left 、 right 、

25 CSS在性能优化⽅⾯的实践

  • css 压缩与合并、 Gzip 压缩
  • css ⽂件放在 head ⾥、不要⽤ @import
  • 尽量⽤缩写、避免⽤滤镜、合理使⽤选择器

26 CSS3动画(简单动画的实现,如旋转等)

  • 依靠 CSS3 中提出的三个属性: transition 、 transform 、 animation
    • transition :定义了元素在变化过程中是怎么样的,包含 transition-property 、transition-duration 、 transition-timing-function 、 transition-delay 。
    • transform :定义元素的变化结果,包含 rotate 、 scale 、 skew 、 translate 。
    • animation :动画定义了动作的每⼀帧( @keyframes )有什么效果,包括 animation-name , animation-duration 、 animation-timing-function 、 animation-delay 、 animation-iteration-count 、 animation-direction

27 base64的原理及优缺点

  • 优点可以加密,减少了 HTTTP 请求
  • 缺点是需要消耗 CPU 进⾏编解码

28 ⼏种常⻅的CSS布局

流体布局

.left {

float: left;

width: 100px;

height: 200px;

background: red;

}

.right {

float: right;

width: 200px;

height: 200px;

background: blue;

}

.main {

margin-left: 120px;

margin-right: 220px;

height: 200px;

background: green;

}

<div class="container">

<div class="left"></div>

<div class="right"></div>

<div class="main"></div>

</div>

圣杯布局

.container {

margin-left: 120px;

margin-right: 220px;

}

.main {

float: left;

width: 100%;

height:300px;

background: green;

}

.left {

position: relative;

left: -120px;

float: left;

height: 300px;

width: 100px;

margin-left: -100%;

background: red;

}

.right {

position: relative;

right: -220px;

float: right;

height: 300px;

width: 200px;

margin-left: -200px;

background: blue;

}

<div class="container">

<div class="main"></div>

<div class="left"></div>

<div class="right"></div>

</div>

双⻜翼布局

.content {

float: left;

width: 100%;

}

.main {

height: 200px;

margin-left: 110px;

margin-right: 220px;

background: green;

}

.main::after {

content: '';

display: block;

font-size:0;

height: 0;

zoom: 1;

clear: both;

}

.left {

float:left;

height: 200px;

width: 100px;

margin-left: -100%;

background: red;

}

.right {

float: right;

height: 200px;

width: 200px;

margin-left: -200px;

background: blue;

}

<div class="content">

<div class="main"></div>

</div>

<div class="left"></div>

<div class="right"></div>

29 stylus/sass/less区别

  • 均具有“变量”、“混合”、“嵌套”、“继承”、“颜⾊混合”五⼤基本特性
  • Scss 和 LESS 语法较为严谨, LESS 要求⼀定要使⽤⼤括号“{}”, Scss 和 Stylus 可以通过缩进表示层次与嵌套关系
  • Scss ⽆全局变量的概念, LESS 和 Stylus 有类似于其它语⾔的作⽤域概念
  • Sass 是基于 Ruby 语⾔的,⽽ LESS 和 Stylus 可以基于 NodeJS NPM 下载相应库后进⾏编译;

30 postcss的作⽤

  • 可以直观的理解为:它就是⼀个平台。为什么说它是⼀个平台呢?因为我们直接⽤它,感觉不能⼲什么事情,但是如果让⼀些插件在它上⾯跑,那么将会很强⼤

  • PostCSS 提供了⼀个解析器,它能够将 CSS 解析成抽象语法树

  • 通过在 PostCSS 这个平台上,我们能够开发⼀些插件,来处理我们的 CSS ,⽐如热⻔的: autoprefixer

  • postcss 可以对sass处理过后的 css 再处理 最常⻅的就是 autoprefixer

31 css样式(选择器)的优先级

  • 计算权重确定
  • !important
  • 内联样式
  • 后写的优先级⾼

32 ⾃定义字体的使⽤场景

  • 宣传/品牌/ banner 等固定⽂案
  • 字体图标

33 如何美化CheckBox

  • <label> 属性 for 和 id
  • 隐藏原⽣的 <input>
  • :checked + <label>

34 伪类和伪元素的区别

  • 伪类表状态
  • 伪元素是真的有元素
  • 前者单冒号,后者双冒号

35 base64 的使⽤

  • ⽤于减少 HTTP 请求
  • 适⽤于⼩图⽚
  • base64 的体积约为原图的 4/3

36 ⾃适应布局

思路:

  • 左侧浮动或者绝对定位,然后右侧 margin 撑开
  • 使⽤ <div> 包含,然后靠负 margin 形成 bfc
  • 使⽤ flex

37 请⽤CSS写⼀个简单的幻灯⽚效果⻚⾯

使⽤ animation 动画实现⼀个简单的幻灯⽚效果:

.ani{

width:480px;

height:320px;

margin:50px auto;

overflow: hidden;

box-shadow:0 0 5px rgba(0,0,0,1);

background-size: cover;

background-position: center;

-webkit-animation-name: "loops";

-webkit-animation-duration: 20s;

-webkit-animation-iteration-count: infinite;

}
@-webkit-keyframes "loops" {

0% {

background:url(http://d.hiphotos.baidu.com/image/w%3D400/sign=c01e6

}

25% {

background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=edee1

}

50% {

background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=937da

}

75% {

background:url(http://g.hiphotos.baidu.com/image/w%3D400/sign=7d375

}

100% {

background:url(http://c.hiphotos.baidu.com/image/w%3D400/sign=cfb23

}

}

38 什么是外边距重叠?重叠的结果是什么?

外边距重叠就是margin-collapse

  • 在CSS当中,相邻的两个盒⼦(可能是兄弟关系也可能是祖先关系)的外边距可以结合成⼀个单独的外边距。这种合并外边距的⽅式被称为折叠,并且因⽽所结合成的外边距称为折叠外边距

折叠结果遵循下列计算规则:

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

39 rgba()和opacity的透明效果有什么不同?

  • rgba() 和 opacity 都能实现透明效果,但最⼤的不同是 opacity 作⽤于元素,以及元素内的所有内容的透明度
  • rgba() 和 opacity 都能实现透明效果,但最⼤的不同是 opacity 作⽤于元素,以及元素内的所有内容的透明度

40 css中可以让⽂字在垂直和⽔平⽅向上重叠的两个属性是什么

  • 垂直⽅向: line-height
  • ⽔平⽅向: letter-spacing

41 如何垂直居中⼀个浮动元素?

⽅法⼀:已知元素的⾼宽:

#div1{

background-color:#6699FF;

width:200px;

height:200px;

position: absolute; //⽗元素需要相对定位

top: 50%;

left: 50%;

margin-top:-100px ; //⼆分之⼀的heightwidth

margin-left: -100px;

}

*⽅法⼆:


width: 200px;

height: 200px;

background-color: #6699FF;

margin:auto;

position: absolute; //⽗元素需要相对定位

left: 0;

top: 0;

right: 0;

bottom: 0;

}

如何垂直居中⼀个 ?(⽤更简便的⽅法。)

#container /**<img>的容器设置如下**/

{

display:table-cell;

text-align:center;

vertical-align:middle;

}

42 px和em的区别

  • px 和 em 都是⻓度单位,区别是, px 的值是固定的,指定是多少就是多少,计算⽐较容易。 em 得值不是固定的,并且 em 会继承⽗级元素的字体⼤⼩。
  • 浏览器的默认字体⾼都是 16px 。所以未经调整的浏览器都符合: 1em=16px 。那么12px=0.75em , 10px=0.625em

43 Sass、LESS是什么?⼤家为什么要使⽤他们?

  • 他们是 CSS 预处理器。他是 CSS 上的⼀种抽象层。他们是⼀种特殊的语法/语⾔编译成CSS
  • 例如Less是⼀种动态样式语⾔. 将CSS赋予了动态语⾔的特性,如变量,继承,运算, 函数. LESS 既可以在客户端上运⾏ (⽀持 IE 6+ , Webkit , Firefox ),也可⼀在服务端运⾏ (借助 Node.js )

为什么要使⽤它们?

  • 结构清晰,便于扩展。
  • 可以⽅便地屏蔽浏览器私有语法差异。这个不⽤多说,封装对- 浏览器语法差异的重复处理,减少⽆意义的机械劳动。
  • 可以轻松实现多重继承。
  • 完全兼容 CSS 代码,可以⽅便地应⽤到⽼项⽬中。LESS 只- 是在 CSS 语法上做了扩展,所以⽼的 CSS 代码也可以与 LESS 代码⼀同编译

44 知道css有个content属性吗?有什么作⽤?有什么应⽤?

  • css的 content 属性专⻔应⽤在 before/after 伪元素上,⽤于来插⼊⽣成内容。最常⻅的应⽤是利⽤伪类清除浮动。

⼀种常⻅利⽤伪类清除浮动的代码

content:"."; //这⾥利⽤到了content属性
display:block;
height:0;
visibility:hidden;
clear:both;
}
.clearfix {
*zoom:1;
}

45 ⽔平居中的⽅法

  • 元素为⾏内元素,设置⽗元素 text-align:center
  • 如果元素宽度固定,可以设置左右 margin 为 auto ;
  • 如果元素为绝对定位,设置⽗元素 position 为 relative ,元素设left:0;right:0;margin:auto;
  • 使⽤ flex-box 布局,指定 justify-content 属性为centerdisplay 设置为 tabel-ceil

46 垂直居中的⽅法

  • 将显示⽅式设置为表格, display:table-cell ,同时设置 vertial-align:middle
  • 使⽤ flex 布局,设置为 align-item:center
  • 绝对定位中设置 bottom:0,top:0 ,并设置 margin:auto
  • 绝对定位中固定⾼度时设置 top:50%,margin-top 值为⾼度⼀半的负值
  • ⽂本垂直居中设置 line-height 为 height 值

47 如何使⽤CSS实现硬件加速?

  • 硬件加速是指通过创建独⽴的复合图层,让GPU来渲染这个图层,从⽽提⾼性能
  • ⼀般触发硬件加速的 CSS 属性有 transform 、 opacity 、 filter ,为了避免2D动画,在 开始和结束的时候的 repaint 操作,⼀般使⽤ tranform:translateZ(0)

48 重绘和回流(重排)是什么,如何避免?

  • DOM的变化影响到了元素的⼏何属性(宽⾼),浏览器重新计算元素的⼏何属性,其他元素的⼏何
  • 属性和位置也会受到影响,浏览器需要重新构造渲染树,这个过程称为重排,浏览器将受到影响的部分
  • 重新绘制到屏幕上的过程称为重绘。引起重排的原因有
    • 添加或者删除可⻅的DOM元素,
    • 元素位置、尺⼨、内容改变,
    • 浏览器⻚⾯初始化,
    • 浏览器窗⼝尺⼨改变,重排⼀定重绘,重绘不⼀定重排,

减少重绘和重排的⽅法:

  • 不在布局信息改变时做 DOM 查询
  • 使⽤ cssText 或者 className ⼀次性改变属性
  • 使⽤ fragment
  • 对于多次重排的元素,如动画,使⽤绝对定位脱离⽂档流,让他的改变不影响到其他元素

49 说⼀说css3的animation

  • css3的 animation 是css3新增的动画属性,这个css3动画的每⼀帧是通过 @keyframes来声明的, keyframes 声明了动画的名称,通过 from 、 to 或者是百分⽐来定义
  • 每⼀帧动画元素的状态,通过 animation-name 来引⽤这个动画,同时css3动画也可以定义动画运⾏的时⻓、动画开始时间、动画播放⽅向、动画循环次数、动画播放的⽅式
  • 这些相关的动画⼦属性有: animation-name 定义动画名、 animation-duration 定义动画播放的时⻓、 animation-delay 定义动画延迟播放的时间、 animationdirection 定义 动画的播放⽅向、 animation-iteration-count 定义播放次数、animation-fill-mode 定义动画播放之后的状态、 animation-play-state 定义播放状态,如暂停运⾏等、 animation-timing-function
  • 定义播放的⽅式,如恒速播放、艰涩播放等。

50 左边宽度固定,右边⾃适应

左侧固定宽度,右侧⾃适应宽度的两列布局实现

html结构:

<div class="outer">

<div class="left">固定宽度</div>

<div class="right">⾃适应宽度</div>

</div>

⽅法1:左侧div设置成浮动:float: left,右侧div宽度会⾃拉升适应

.outer {

width: 100%;

height: 500px;

background-color: yellow;

}

.left {

width: 200px;

height: 200px;

background-color: red;

float: left;

}

.right {

height: 200px;

background-color: blue;

}

⽅法2:对右侧:div进⾏绝对定位,然后再设置right=0,即可以实现宽度⾃适应

  • 绝对定位元素的第⼀个⾼级特性就是其具有⾃动伸缩的功能,当我们将width 设置为 auto 的时候(或者不设置,默认为 auto ),绝对定位元素会根据其 left 和 right ⾃动伸缩其⼤⼩
.outer {

width: 100%;

height: 500px;

background-color: yellow;

position: relative;

}

.left {

width: 200px;

height: 200px;

background-color: red;

}

.right {

height: 200px;

background-color: blue;

position: absolute;

left: 200px;

top:0;

right: 0;

}

⽅法3:将左侧div进⾏绝对定位,然后右侧div设置margin-left: 200px

.outer {

width: 100%;

height: 500px;

background-color: yellow;

position: relative;

}

.left {

width: 200px;

height: 200px;

background-color: red;

position: absolute;

}

.right {

height: 200px;

background-color: blue;

margin-left: 200px;

}

⽅法4:使⽤flex布局

.outer {

width: 100%;

height: 500px;

background-color: yellow;

display: flex;

flex-direction: row;

}

.left {

width: 200px;

height: 200px;

background-color: red;

}

.right {

height: 200px;

background-color: blue;

flex: 1;

}

51 两种以上⽅式实现已知或者未知宽度的垂直⽔平居中

第一种:

.wraper {

position: relative;

.box {

position: absolute;

top: 50%;

left: 50%;

width: 100px;

height: 100px;

margin: -50px 0 0 -50px;

}

}

第二种:

.wraper {

position: relative;

.box {

position: absolute;

top: 50%;

left: 50%;

transform: translate(-50%, -50%);

}

}

第三种:

.wraper {

.box {

display: flex;

justify-content:center;

align-items: center;

height: 100px;

}

}

第四种:

.wraper {

display: table;

.box {

display: table-cell;

vertical-align: middle;

}

}

52 如何实现⼩于12px的字体效果

  • transform:scale() 这个属性只可以缩放可以定义宽⾼的元素,⽽⾏内元素是没有宽⾼的,我们可以加上⼀个 display:inline-block ;
transform: scale(0.7);//css 的属性,可以缩放⼤⼩