前端面试常考的CSS定位和CSS高级应用,你会多少鸭?

CSS定位

CSS定位用于确定元素在页面上的位置,更加灵活的改变盒子在网页中的位置。

定位模式:position:(static, relative, absolute, fixed, sticky)xx

边偏移属性:偏移方向:偏移值

  • left
  • right
  • top
  • bottom

定位的使用场景

  • 相对定位:用于小范围的元素位置调整。
  • 绝对定位:常用于创建复杂的布局,如模态窗口、下拉菜单等。
  • 固定定位:用于创建固定在视口中的导航栏或工具栏。
  • 粘性定位:常用于创建滚动时固定在顶部的导航栏。

静态定位

静态定位是默认的定位方式,如果一个元素没有指定定位属性,那么它就是静态定位。

(静态定位的元素不会受到 topbottomleftright 属性的影响。)

.static {
    position: static;
}

相对定位

相对定位的元素是基于其正常位置进行移动。使用 topbottomleftright 属性可以设置元素相对于其原始位置偏移多少。

属性值:position: relative

使用场景:很少单独使用相对定位,一般都是与拆塔定位方式配合使用。

特点:

  • 不脱标,占用自己原来的位置image-20240731171520529
    • 他和margin的区别:就是使用margin会影响到其他的盒子,但是使用相对定位就不会影响到其他盒子image-20240731171901315
  • 显示模式特点保持不变
  • 设置边偏移则相对自己原来的位置移动
.relative {
    position: relative;
    top: 20px;
    left: 30px;
}

注意⚠️:相对定位的元素仍然在文档流中,它原来的空间会被保留。

绝对定位

绝对定位的元素相对于最近的已定位祖先元素进行定位。如果没有已定位的祖先元素,那么它相对于 <html> 元素进行定位。绝对定位的元素会脱离文档流。

属性值:position: absolute

使用场景:子级绝对定位,父级相对定位。(子绝父相)

特点:

  • 脱标,不占位
  • 显示模式具备行内块特点
  • 设置边偏移则相对尊敬的已经定位的祖先元素改变位置
  • 如果祖先元素都没有定位,则相对于浏览器可视区<html> )改变位置。image-20240731181904354
.absolute {
    position: absolute;
    top: 50px;
    right: 100px;
}
子绝父相实现垂直水平居中

定位的盒子垂直居中是不能用margin:0 auto来实现垂直居中。可以使用负偏移来实现。

image-20240731183113738

但是有一个问题,当值是一个非整数的时候,为了实现精确值,就不能使用上面的负偏移来实现了。

这里就引用到了transform来做,这样就直接用百分之自动转换出来了。

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

image-20240731183647524

⚠️注意:如果没有给绝对定位添加偏移,就不会移动。

image-20240802004037867

虽然脱标,但是没有偏移量,所以还是固定在原位置。

固定定位

固定定位类似于绝对定位,但它是相对于浏览器窗口进行定位。即使页面滚动,固定定位的元素也会保持在相同的位置。

.fixed {
    position: fixed;
    top: 0;
    left: 0;
}

属性值:position: fixed

特点:

  • 脱标,不占位
  • 显示模式具备行内块特点
  • 设置边偏移相对浏览器窗口改变位置
实现顶部导航栏
//给header属性添加固定定位
.header {
	position:fixed;
	top:0;
	left:0;
	width:100%
	height:100px
	box-shadow:0 5px 5ps rgba(0,0,0,0.2);	//加个阴影更有效果
} 
//下面的内容区要添加一个100px的顶部外边距,因为固定定位是脱标的,所以要一个外边距将其撑开。
.box{
	margin-top:100px;
}

粘性定位

粘性定位是相对和固定定位的混合体。

一个粘性定位的元素在滚动到其指定的偏移之前,表现得像相对定位。一旦达到指定的偏移,它就会固定在那个位置,表现得像固定定位。

属性名:position: sticky

.sticky {
    position: sticky;
    top: 0;
}

层级效果

作用:设置定位元素的层级顺序,改变定位元素的显示顺序。

z-index: 设置元素的堆叠顺序,数值越大,元素越在顶层。

特点:

  1. 根据标签的书写顺序排列,越往后层叠越高。image-20240731234011575
  2. 数字越大,层级越高image-20240731234417438

定位总结

定位模式属性值是否脱标显示模式参照物
相对定位relative保持标签原有的显示模式自己原来的位置
绝对定位absolute行内块特点1. 已经定位的祖先元素
2.浏览器可视区
固定定位fixed行内块特点浏览器窗口

CSS高级

CSS精灵(雪碧图)

CSS精灵也叫CSS Sprites,是一种网页图片应用处理方式,把网页中的一些背景图片整合在一张图片文件中,再使用background-position精确的定位出背景图片的位置。

优点:减少服务器被请求次数,减轻服务器的压力,提高页面加载速度。

使用步骤:

  1. 创建盒子,盒子尺寸与小图尺寸相同image-20240801110944378
  2. 设置盒子背景图为精灵图
  3. 添加backgtound-positiond属性,改变背景图位置image-20240801110956340

字体图标

透明度opacity

作用:设置整个元素的透明度(包括背景内容

属性名:opacity

属性值:0——1

  • 0:完全透明(元素不可见)
  • 1:不透明
  • 0——1之间:半透明

光标类型cursor

作用:鼠标悬停在元素上的时候指针显示样式

属性名:cursor

属性值:

  • default:默认值,通常是箭头
  • pointer:小手效果,提示用户可以点击
  • text:选择效果,提示用户可以选择文字
  • move:十字光标,提示用户可以移动
  • not-allowed:禁止符号,提示用户不可以点击

显示和隐藏属性

属性名:dispaly

作用:隐藏盒子的时候,原先的位置会空出来(不占位置)【经常使用】

image-20240802004635212

属性值:

  • block:显示

  • none:隐藏

属性名:visibility

作用:隐藏盒子的时候,原先的位置不会空出来(占据原来的位置)【不常使用】

image-20240802004557176

属性值:

  • visible:显示

  • hidden:隐藏

表格样式

表格属性:<tr>表示行,<td>表示列。

<table>
  <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>5</td>
   </tr>
 </table>

给表格添加边框样式:

table{
	width:100px;
	height:100px;
	margin:0 anto;
	border:1px solid red;
}

image-20240802002032747我们会发现这个边框样式只给整个表格的表框添加了样式,但是单元格里面没有样式。

给单元格添加样式:

table,tr,td{
	border:1px solid red;	//将上面的表框样式图案复制下来到这里
}

image-20240802002305167这个是时候单元格的样式就出来了。

但是⚠️还是有不理想的地方,那就是每个单元格之间还是有空隙的。

image-20240802002457903

合并相邻的两个边框,使用到以下CSS语句:

border-collapse:collapse;

image-20240802002528319铛铛~😆,这个是时候就没有缝隙啦🥳。

文字溢出显示省略号

在列表项或者导航菜单中,经常会在列表项或导航菜单中,由于空间有限,当文本内容较长时,可以使用省略号显示文本已被截断。

image-20240803203357304

CSS中文字溢出显示省略号(通常是三个点 “…”)是一种常见的文本截断技术,用于在文本内容超出其容器宽度时,提供一种视觉上的提示,表明文本已被截断。

方法非常简单,只需要添加以下👇三句话就可以实现啦🥳!

  1. 设置不允许换行,强制文字一行显示

    white-space:nowrap;
    
  2. 设置溢出隐藏

    overflow:hidden;
    
  3. 设置文字溢出用省略号代替

    text-overflow:ellipsis;
    

这个方法很多地方都会用到,我们可以直接复制下来,写在一个公共样式当中,下次直接使用类名即可(o)/~

.text-overflow{
	white-space:nowrap;
	overflow:hidden;
	text-overflow:ellipsis;
}

当然,文字省略了之后,也要得找个时机让他的文字完全显示的做法,只需要设置一个:hover伪类,让鼠标经过的时候显示全。就像这样👇:image-20240803203645078

这个就更简单啦!只需要在<a>标签下添加一个title属性就可以了。

<a href="#" title="阿巴阿巴阿巴阿巴阿巴阿巴阿巴阿巴阿巴阿巴"> </a>

渐变色

线性渐变:

background-image:linear-gradient(red,green);
  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值