css面试题---场景应用

1、实现一个三角形

css一般用border属性实现三角形。

css 复制代码
div {
    width: 0;
    height: 0;
    border: 100px solid;
    border-color: orange blue red green;
}
css 复制代码
// 三角形一
div {
    width: 0;
    height: 0;
    border-top: 50px solid red;
    border-right: 50px solid transparent;
    border-left: 50px solid transparent;
}
// 三角形二
div {
    width: 0;
    height: 0;
    border-bottom: 50px solid red;
    border-right: 50px solid transparent;
    border-left: 50px solid transparent;
}
// 三角形三
div {
    width: 0;
    height: 0;
    border-left: 50px solid red;
    border-top: 50px solid transparent;
    border-bottom: 50px solid transparent;
}
// 三角形四
div {
    width: 0;
    height: 0;
    border-right: 50px solid red;
    border-top: 50px solid transparent;
    border-bottom: 50px solid transparent;
}
// 三角形五
div {
    width: 0;
    height: 0;
    border-top: 100px solid red;
    border-right: 100px solid transparent;
}

2、实现一个扇形

在三角形的基础上加上border即可。

css 复制代码
div{
    border: 100px solid transparent;
    width: 0;
    heigt: 0;
    border-radius: 100px;
    border-top-color: red;
}

3、实现一个宽高自适应的正方形

css 复制代码
// 方案一:利用vw来实现
.square {
  width: 10%;
  height: 10vw;
  background: tomato;
}
// 方案二:利用元素的margin/padding百分比是相对父元素width的性质来实现
.square {
  width: 20%;
  height: 0;
  padding-top: 20%;
  background: orange;
}
// 方案三:利用子元素的margin-top的值来实现
.square {
  width: 30%;
  overflow: hidden;
  background: yellow;
}
.square::after {
  content: '';
  display: block;
  margin-top: 100%;
}

4、画一条0.5px的线

css 复制代码
// 方案一:采用transform: scale()的方式
transform: scale(0.5,0.5);
// 方案二:采用meta viewport的方式
<meta name="viewport" content="width=device-width, initial-scale=0.5, minimum-scale=0.5, maximum-scale=0.5"/>

5、设置小于12px的字体

使用css的transform缩放属性transform:scale(0.5);transform:scale(0.75);收缩的是整个元素的大小,这时候,如果是内联元素,必须将内联元素转换成块元素。

还可使用切图,将小字体以切图形式展示。

6、如何解决1px问题

1px指的是在某些屏幕的机型上,移动端页面的1px会变得很粗,呈现出不止1px的效果。

css的1px并不等同于移动设备上的1px,它们之间的比例关系:

复制代码
window.devicePixelRatio = 设备的物理像素 / CSS像素

解决思路1:直接写0.5px,利用设备渲染属性,会显示为1px

解决思路2:利用伪元素,先放大,再缩小:在目标元素的后面追加一个 ::after 伪元素,让这个元素布局为 absolute 之后、整个伸展开铺在目标元素上,然后把它的 宽和高都设置为目标元素的两倍,border值设为 1px。接着借助 CSS 动画特效中的放缩能力,把整个伪元素缩小为原来的 50%。此时,伪元素的宽高刚好可以和原有的目标元素对齐,而 border 也缩小为了 1px 的二分之一,间接地实现了 0.5px 的效果。

css 复制代码
#container[data-device="2"] {
    position: relative;
}
#container[data-device="2"]::after{
      position:absolute;
      top: 0;
      left: 0;
      width: 200%;
      height: 200%;
      content:"";
      transform: scale(0.5);
      transform-origin: left top;
      box-sizing: border-box;
      border: 1px solid #333;
    }
}
相关推荐
卸任11 小时前
Vibe coding工具使用心得
前端·ai编程
brien912 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance12 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M12 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写12 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李12 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易13 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
清晨Coding13 小时前
删了 Cookie 还能自动登录?Google系网站登录态自动恢复的原理分析
javascript
风骏时光牛马13 小时前
前沿视界
前端
kyriewen13 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员