我们阅读这篇文章之前,我们需要思考下,我们为什要去了解SVG,阅读了这篇文章是否可以给我们带来帮助。
1. 如果你想要一张 css或者JavaScript可以控制的图片,那么你可以考虑SVG。
2. 如果你期望图片的质量不会因为放大或缩小而降低,那么你可以考虑SVG。
3. 如果你期望网页对残障人士和视力受损的用户有更好的体验,那么你可以考虑SVG。
4. 如果你期望图片在高清设备还是低分辨率设备上,都能保持清晰和细腻的图像质量,那么你可以考虑SVG。
我们在学习SVG之前,需要先了解一下位图和矢量图。
简单来说:
详细来说:
SVG究竟什么?
是Scalable Vector Graphics的缩写,意思是可缩放矢量图形。
这是一种基于XML的二维矢量图形标准,由W3C开发的。
对于初学者来说,可以将SVG理解为一套新的HTML标签。
所以我们可以使用css和JavaScript来对标签进行操作。
很多小伙伴可能已经忘记了XML,我们回顾一下:
XML(可扩展标记语言)是一种用于描述数据的标记语言,它使用一系列简单的标记来描述数据,这些标记可以用来表示不同类型的数据元素,如标题,作者,价格等。
SVG的优势:
SVG的劣势:
设计复杂性:SVG需要具备一定的设计和制作技巧,与位图相比,SVG的设计难度较大,需要更高的技术水平。
浏览器兼容性:在一些旧版浏览器中,可能存在对SVG的兼容性问题。
渲染速度:SVG复杂度过高会降低页面渲染速度。
对于前端开发的我们,要如何去使用SVG呢?
SVG归根结底来说和JPG,PNG一样,也是一种图像格式,所以我们可以在HTML中,将SVG的路径设置为<img>的src属性。
我们也可以将SVG的代码放在HTML中,我们完全可以把SVG的代码看做成我们的HTML标签。
例如:
<svg width="500" height="500">
<circle cx="100" cy="100" r="50" fill="transparent" stroke="#000"></circle>
</svg>
我们也可以通过css的background-image或者伪元素,将SVG图片作为背景图像。
总的来说,任何需要保持清晰度,动态交互和无损缩放的图形场景,都可以考虑使用SVG。
Canvas和SVG都是用于在网页上绘制图形的工具,但它们在许多方面都存在显著的差异。以下是对Canvas和SVG的对比:
总结:Canvas和SVG各有其优势和适用场景。Canvas更适合图像密集型的游戏和需要高效渲染的应用,而SVG更适合处理矢量图形和大型渲染区域。
说了这么多,我们来开始实战,我们要在HTML中,画出一个SVG图像。
<html>
<body>
<h1>Feng SVG</h1>
<svg version="1.1" baseProfile="full" width="300" height="200" xmlns="http://www.w3.org/2000/svg">
<rect width="100%" height="100%" stroke="red" stroke-width="4" fill="yellow" />
<circle cx="150" cy="100" r="80" fill="green" />
<text x="150" y="115" font-size="16" text-anchor="middle" fill="white">RUNOOB SVG TEST</text>
</svg>
</body>
</html>
运行后:
代码解读:
我们还可以在线设计SVG图片,我们可以直接使用该图片或者拷贝其代码复制到我们的代码中。
SVG在线编辑: c.runoob.com/more/svgedi…
示例一:
正常的矩形
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect width="300" height="100" style="fill:rgb(122,122,0);stroke-width:2;stroke:rgb(0,0,0)" />
</svg>
效果:
代码解析:
综上,这段代码会在SVG图像中绘制一个宽度为300像素、高度为100像素、填充颜色为黄色调、线条宽度为2像素、线条颜色为黑色的矩形。
示例二:
填充和边框的透明度
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect x="50" y="20" width="150" height="150" style="fill:blue;stroke:red;stroke-width:5;fill-opacity:0.5;stroke-opacity:0.5" />
</svg>
效果:
代码解析:
综上,这段代码会在一个SVG图像中绘制一个左上角坐标为(50, 20)、宽度为150像素、高度为150像素、填充颜色为蓝色、线条颜色为红色、线条宽度为5像素、填充透明度和线条透明度都为0.5的矩形。
示例三:
整个元素的透明度
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="500px">
<rect x="50" y="20" width="150" height="150" style="fill:blue;stroke:pink;stroke-width:5;opacity:0.4" />
</svg>
效果:
代码解析:
综上,这段代码会在一个500x500像素的SVG图像中绘制一个左上角坐标为(50, 20)、宽度为150像素、高度为150像素、填充颜色为蓝色、线条颜色为粉红色、线条宽度为5像素、透明度为0.4的矩形。
示例四:
圆角矩形
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="500px">
<rect x="50" y="20" rx="20" ry="20" width="150" height="160" style="fill:red;stroke:black;stroke-width:1;opacity:0.5" />
</svg>
效果:
代码解析:
综上,这段代码会在一个500x500像素的SVG图像中绘制一个左上角坐标为(50, 20)、宽度为150像素、高度为160像素、填充颜色为红色、线条颜色为黑色、线条宽度为1像素、透明度为0.5的圆角矩形。
示例:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="red" stroke-width="2" fill="blue" />
</svg>
效果:
代码解析:
综上,这段代码会在一个SVG图像中绘制一个圆心坐标为(100, 50)、半径为40像素、边框颜色为红色、边框宽度为2像素、填充颜色为蓝色的圆形。
示例:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500" height="500">
<ellipse cx="300" cy="80" rx="100" ry="50" style="fill:red;stroke:purple;stroke-width:2" />
</svg>
效果:
代码解析:
综上,这段代码会在一个500x500像素的SVG图像中绘制一个中心点坐标为(300, 80)、长轴半径为100像素、短轴半径为50像素的红色椭圆,线条颜色为紫色,线条宽度为2像素。
示例:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<line x1="0" y1="0" x2="200" y2="200" style="stroke:black;stroke-width:5" />
</svg>
效果:
代码解析:
综上,这段代码会在一个SVG图像中绘制一条从(0, 0)到(200, 200)的黑色线段,线条宽度为5像素。
示例一:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<polyline points="20,20 40,25 60,40 80,10 120,140 200,180" style="fill:none;stroke:black;stroke-width:3" />
</svg>
效果:
代码解析:
综上,这段代码会在一个SVG图像中绘制一个黑色的折线。这个折线有6个点,形状大致为一个不规则的六边折线。注意:因为设置了fill:none,所以该多边形线段不会进行填充,只显示其黑色边框。
示例二:
画一个五角星
<svg style="height:300px;width:300px;" xmlns="http://www.w3.org/2000/svg" version="1.1">
<polyline points="100 10,40 180,190 60,10 60,160 180" style="fill:blue;stroke:blue;stroke-width:1" />
</svg>
效果:
代码解析:
综上,这段代码会在一个300x300像素的区域内绘制一个蓝色的多边形。这个多边形有5个顶点,形状大致为一个不规则的五边形。
示例一:
<svg height="210" width="500">
<polygon points="200,10 250,190 160,210"
style="fill:red;stroke:purple;stroke-width:1"/>
</svg>
效果:
代码解析:
综上,这段代码会在一个500x210像素的SVG图像中绘制一个由三个顶点定义的多边形,填充颜色为红色,线条颜色为紫色,线条宽度为1像素。
示例二:
画一个五角星
<svg style="height:300px;width:300px;" xmlns="http://www.w3.org/2000/svg" version="1.1">
<polygon points="100 10,40 180,190 60,10 60,160 180" style="fill:none;stroke:black;stroke-width:5"/>
</svg>
效果:
代码解析:
综上,这段代码会在一个300x300像素的SVG图像中绘制一个由七个顶点定义的多边形,没有填充颜色,线条颜色为黑色,线条宽度为5像素。
路径数据:
示例:
画一个三角形
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<path d="M150 0 L75 200 L205 270 Z" />
</svg>
效果:
代码解析:
综上,这段代码将在SVG图像中绘制一个由三个直线段组成的封闭图形,其顶点坐标分别为(150, 0),(75, 200)和(205, 270)。
直接在元素属性上设置样式,比如将矩形填充色改成粉红
<svg width="400" height="400" style="border: 1px solid red;">
<rect
x="100"
y="100"
width="200"
height="100"
fill="pink"
/>
</svg>
把所有样式写在 style 属性里
<svg width="400" height="400" style="border: 1px solid red;">
<rect
x="100"
y="100"
width="200"
height="100"
style="fill: pink;"
/>
</svg>
将样式写在 <style> 标签里
<style>
.rect {
fill: pink;
}
</style>
<svg width="400" height="400" style="border: 1px solid red;">
<rect
x="100"
y="100"
width="200"
height="100"
class="rect"
/>
</svg>
将样式写在 .css 文件里,然后在页面中引入该 CSS 文件。
SVG动画可以通过多种方式实现,包括使用SMIL、CSS和JavaScript。
能让SVG不靠JavaScript与CSS就能动起来是因为使用了SMIL(Synchronized Multimedia Integration Language),是W3C的标准之一,旨在以XML格式提供多媒体的交互表现(白话点其实就是动画),是Web上动画的开路先锋,启发了Web animation与CSS animation。SVG与SMIL的开发团队合作,让SVG能利用SMIL达到如下效果:
光是这些特性就够我们组合出很多种的动画了, 使用方法也不难,只要在SVG元素内置入以下四种元素即可操作动画:
例如:
<circle cx=“56.7573”cy=“92.8179”r=“2”fill=“black”stroke=“black”stroke-width=“1”>
<set attributeName=“cy”to=“105.7318”begin=“2s”/>
</circle>
代码解析:
这段代码用于描述一个圆形,并在特定时间改变其中心点的y坐标。
综上,这段代码绘制了一个半径为2单位、填充和边框颜色均为黑色的圆形,并设置了一个动画,使圆心的y坐标在2秒后从92.8179变为105.7318。
通过设置一组 CSS 样式和关键帧,可以实现基于时间或基于事件的 SVG 动画。这种方式实现的 SVG 动画相对简单,具有易于实现、可读性好、易于维护、性能良好等优点。
下面是一个基于 CSS 的 SVG 动画示例,实现了一个圆形的旋转动画:
<svg>
<circle cx="50" cy="50" r="40" />
</svg>
<style>
circle {
fill: red;
animation: rotate 2s linear infinite;
}
@keyframes rotate {
to {
transform: rotate(360deg);
}
}
</style>
通过 JavaScript,可以对 SVG 图形进行更加自由和复杂的动画操作。JavaScript 可以对 SVG 元素的各种属性,如位置、大小、颜色、透明度、路径等进行操作,配合定时器和事件监听等方法,实现丰富多彩的 SVG动画。
下面是一个基于 JavaScript 的 SVG 动画示例,实现了一个小球自由落体,碰撞弹跳的效果:
<svg>
<circle id="ball" cx="50" cy="50" r="20" />
</svg>
<script>
let ball=document.querySelector("#ball");
let startPos=50;
let endPos=200;
let speed=3; // 设置球下落速度
let gravity=0.2; // 设置加速度
function moveBall() {
let pos=parseFloat(ball.getAttribute("cy"));
let vel=parseFloat(ball.getAttribute("data-vel")) || 0;
// 计算球的速度和位置
vel +=gravity;
pos +=vel * speed;
// 碰撞检测
if (pos + 20 > endPos) {
pos=endPos - 20;
vel=-vel * 0.8;
}
// 更新球的位置和速度
ball.setAttribute("cy", pos);
ball.setAttribute("data-vel", vel);
// 循环移动球
if (pos < endPos - 20) {
window.requestAnimationFrame(moveBall);
}
}
moveBall();
</script>
总的来说,SVG是一种强大的图形描述语言,具有可缩放性、交互性、可访问性、灵活性和跨平台兼容性等特点和优势。它可以用于创建各种复杂的二维矢量图形和富交互的Web应用,为Web设计和开发提供了更多的可能性。
随着Web技术的不断发展,相信SVG的应用范围还将不断扩大。
原文链接:https://juejin.cn/post/7322344486159106100
端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~
Hello,大家好,我是 Sunday。
当各种框架以及复杂的 JS 知识开始充斥着我们的工作环境时。谁还能够记得,以 CSS 来构建更加良好的用户体验,也是前端的一个重要组成部分。
所以说,今天咱们就来看看 css 的优化方案-终极合集。一共一百条,有点多,适合收藏(点个赞和分享自然更好了)
添加scroll-behavior:smooth到元素中<html>,使整个页面能够平滑滚动。
html{
scroll-behavior: smooth;
}
此选择器以href属性以“https”开头的链接为目标。
a[href^="https"] {
color: blue;
}
选择作为<h2>同级元素的所有<p>元素。
h2 ~ p {
color: blue;
}
此选择器将样式应用于不具有类“Special”的 li。
li:not(.special) {
font-style: italic;
}
使用视区单位(vw, vh, vmin, vmax)可以使字体大小与视区大小相对应。
h1 {
font-size: 5vw;
}
此选择器以空的<p>元素为目标并隐藏它们。
p:empty {
display: none;
}
可以定义和使用自定义特性,以便更轻松地创建主题和进行维护。
:root {
--main-color: #3498db;
}
h1 {
color: var(--main-color);
}
object-fit 控制替换元素(如<img>)的内容应该如何调整大小。
img {
width: 100px;
height: 100px;
object-fit: cover;
}
Css网格提供了一种功能强大的方式来以更直接的方式创建布局。
.container {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
}
如果一个元素包含任何带有:focus的子元素,则:focus-Win会选择该元素。
form:focus-within {
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
}
使用FlexBox可轻松地将内容在容器中水平和垂直居中。
.container {
display: flex;
align-items: center;
justify-content: center;
}
自定义在网页上选择文本时的突出显示颜色。
::selection {
background-color: #ffcc00;
color: #333;
}
设置输入字段内占位符文本的样式。
::placeholder {
color: #999;
font-style: italic;
}
使用Backback-Clip属性创建渐变边框。
.element {
border: 2px solid transparent;
background-clip: padding-box;
background-image: linear-gradient(to right, red, blue);
}
根据视口宽度调整字体大小,实现更加响应式的排版。
body {
font-size: calc(16px + 1vw);
}
利用锥形渐变创建丰富多彩且动态的背景。
.element {
background: conic-gradient(#ff5733, #33ff57, #5733ff);
}
使用clamp()函数设置字体大小的范围,确保在不同屏幕尺寸下的可读性。
.text {
font-size: clamp(16px, 4vw, 24px);
}
使用font-display: swap;属性提高网页字体性能,让自定义字体加载时显示备用字体。
@font-face {
font-family: 'YourFont';
src: url('your-font.woff2') format('woff2');
font-display: swap;
}
为了实现更顺畅的滚动体验,特别是在图库或滑块中,实现自定义滚动吸附点。
.scroll-container {
scroll-snap-type: y mandatory;
}
.scroll-item {
scroll-snap-align: start;
}
利用可变字体和font-variation-settings属性对字体的粗细、样式等进行精细调节。
.text {
font-family: 'YourVariableFont', sans-serif;
font-variation-settings: 'wght' 500, 'ital' 1;
}
使用border-bottom和text-decoration的组合来自定义链接的下划线样式。
a {
text-decoration: none;
border-bottom: 1px solid #3498db;
}
使用class sr-only来在视觉上隐藏元素,但保持其对屏幕阅读器的可访问性。
.sr-only {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}
通过使用padding来保持元素(如图片或视频)的纵横比。
.aspect-ratio-box {
position: relative;
width: 100%;
padding-bottom: 75%; /* 根据需要调整 */
}
.aspect-ratio-box > iframe {
position: absolute;
width: 100%;
height: 100%;
}
使用:nth-child伪类来为交替元素设置样式。
li:nth-child(even) {
background-color: #f2f2f2;
}
li:nth-child(odd) {
background-color: #e6e6e6;
}
使用counter-reset和counter-increment属性在列表中创建自动编号。
ol {
counter-reset: item;
}
li {
counter-increment: item;
}
li::before {
content: counter(item) ". ";
}
使用不同属性为元素应用多个背景图片。
.bg {
background-image: url('image1.jpg'), url('image2.jpg');
background-position: top left, bottom right;
background-repeat: no-repeat, repeat-x;
}
通过使用hyphens属性允许自动连字符以提高文本的可读性。
p {
hyphens: auto;
}
利用CSS变量创建动态且可重用的样式。
:root {
--main-color: #3498db;
}
.element {
color: var(--main-color);
}
改善焦点样式以提高键盘导航和可访问性。
:focus {
outline: 2px solid #27ae60;
}
为渐变背景应用平滑过渡效果,增强视觉效果。
.gradient-box {
background: linear-gradient(45deg, #3498db, #2ecc71);
transition: background 0.5s ease;
}
.gradient-box:hover {
background: linear-gradient(45deg, #e74c3c, #f39c12);
}
为文本添加描边,产生独特的视觉效果。
h1 {
color: #3498db;
-webkit-text-stroke: 2px #2c3e50;
}
创建一个简单的汉堡菜单,无需使用JavaScript。
.menu-toggle {
display: none;
}
.menu-toggle:checked + nav {
display: block;
}
/* 在这里添加汉堡菜单图标和菜单样式 */
使用:is()伪类简化复杂的选择器。
:is(h1, h2, h3) {
color: blue;
}
在CSS变量中进行计算,实现动态样式。
:root {
--base-size: 16px;
--header-size: calc(var(--base-size) * 2);
}
h1 {
font-size: var(--header-size);
}
使用attr
()函数检索和显示属性值。
div::before {
content: attr(data-custom-content);
}
为图像应用遮罩,创造出独特的效果。
.masked-image {
mask: url(mask.svg);
mask-size: cover;
}
尝试使用混合模式创建有趣的色彩效果。
.blend-mode {
background: url(image.jpg);
mix-blend-mode: screen;
}
使用纵横比属性简化纵横比盒子的创建。
.aspect-ratio-box {
aspect-ratio: 16/9;
}
使用shape-outside属性使文本围绕指定形状,实现更动态的布局。
.shape-wrap {
float: left;
width: 150px;
height: 150px;
shape-outside: circle(50%);
}
ch单位表示所选字体中字符“0”的宽度,可用于创建一致且响应式的布局。
h1 {
font-size: 2ch;
}
使用::marker伪元素为列表项标记设置样式。
li::marker {
color: blue;
}
使用element()函数动态引用元素作为背景。
.background {
background: element(#targetElement);
}
使用Flexbox创建粘性底部布局。
body {
display: flex;
flex-direction: column;
min-height: 100vh;
}
main {
flex: 1;
}
通过调整scroll padding来改善滚动行为。
html {
scroll-padding: 20px;
}
使用CSS变量创建交互式高亮效果。
.highlight {
--highlight-color: #e74c3c;
background-image: linear-gradient(transparent 0%, var(--highlight-color) 0%);
background-size: 100% 200%;
transition: background-position 0.3s;
}
.highlight:hover {
background-position: 0 100%;
}
无需图像,样式化单选框和复选框。
input[type="radio"] {
appearance: none;
-webkit-appearance: none;
border-radius: 50%;
width: 16px;
height: 16px;
border: 2px solid #3498db;
}
input[type="checkbox"] {
appearance: none;
-webkit-appearance: none;
width: 16px;
height: 16px;
border: 2px solid #e74c3c;
}
使用resize属性控制textarea的调整大小行为。
textarea {
resize: vertical;
}
使用background-clip和text-fill-color属性为文本创建渐变效果。
.gradient-text {
background-image: linear-gradient(45deg, #3498db, #2ecc71);
background-clip: text;
color: transparent;
}
使用word-break属性控制长单词或没有空格的字符串的断行和换行。
.long-words {
word-break: break-all;
}
使用font-variation-settings属性微调可变字体样式。
.custom-font {
font-family: 'MyVariableFont';
font-variation-settings: 'wght' 600, 'ital' 1;
}
使用混合模式为元素应用叠加效果,创造出有趣的视觉效果。
.overlay {
mix-blend-mode: overlay;
}
使用:broken伪类为损坏的图像应用样式。
img:broken {
filter: grayscale(100%);
}
使用CSS形状为设计创建有趣的效果。
.shape {
shape-outside: circle(50%);
}
使用*=操作符的属性选择器进行子字符串匹配。
[data-attribute*="value"] {
/* 样式 */
}
使用backdrop-filter为背景应用模糊效果,实现毛玻璃效果。
.element {
backdrop-filter: blur(10px);
}
使用env()函数在CSS中访问环境变量。
.element {
margin-top: env(safe-area-inset-top);
}
使用:nth-child选择器计算特定属性值的出现次数。
[data-category="example"]:nth-child(3) {
/* 第三次出现的样式 */
}
使用shape-outside结合polygon()函数精确地控制文本围绕不规则形状的布局。
.text-wrap {
shape-outside: polygon(0 0, 100% 0, 100% 100%);
}
使用cursor属性更改鼠标样式。
.custom-cursor {
cursor: pointer;
}
使用HSLA值表示透
明颜色,对alpha通道进行更精细的控制。
.transparent-bg {
background-color: hsla(120, 100%, 50%, 0.5);
}
使用text-orientation属性将文本垂直旋转。
.vertical-text {
text-orientation: upright;
}
使用font-variant属性应用小型大写字母样式。
.small-caps {
font-variant: small-caps;
}
使用box-decoration-break属性控制跨多行断开的元素的背景,实现更灵活的文本环绕。
.split-background {
box-decoration-break: clone;
}
仅在元素处于焦点且焦点不是由鼠标单击提供时应用样式。
input:focus-visible {
outline: 2px solid blue;
}
通过text-rendering属性改善文本呈现效果。
.optimized-text {
text-rendering: optimizeLegibility;
}
使用initial-letter为块级元素的第一个字母应用样式。
p::first-letter {
font-size: 2em;
}
控制用户滚动超出滚动容器边界时的行为。
.scroll-container {
overscroll-behavior: contain;
}
使用writing-mode属性创建纵向布局。
.vertical-layout {
writing-mode: vertical-rl;
}
使用::cue伪元素为HTML5字幕文本应用样式。
::cue {
color: blue;
}
使用line-clamp属性限制元素中显示的行数。
.truncated-text {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
scroll-snap-align属性控制滚动容器内滚动捕捉点的对齐方式,确保对滚动行为进行精确控制,提升用户体验。
.container {
scroll-snap-type: x mandatory;
}
.item {
scroll-snap-align: center;
}
overscroll-behavior使您可以定义浏览器在滚动超出范围时的处理方式,从而避免不必要的滚动效果,提升整体滚动体验。
.scrollable {
overscroll-behavior: contain;
}
font-kerning允许对字符间距进行微调,通过调整文本元素中字符之间的间距,确保最佳的可读性。
p {
font-kerning: auto;
}
与CSS形状一起使用时,shape-margin指定浮动元素形状周围的边距,可以更精确地控制文本环绕和布局。
.shape {
shape-margin: 20px;
}
scroll-margin设置滚动容器边缘与滚动内容开始之间的边距,提升用户体验,为滚动提供缓冲空间。
.container {
scroll-margin-top: 100px;
}
tab-size属性控制文本区域中制表符的宽度,确保在不同用户代理中一致的显示。
pre {
tab-size: 4;
}
text-align-last决定块级元素中最后一行文本的对齐方式,为多行块文本提供对齐控制。
p {
text-align-last: justify;
}
此属性控制文本两端对齐的行为,指定是使用单词间还是字符间距进行文本对齐。
p {
text-align: justify;
text-justify: inter-word;
}
column-fill决定如何在多列布局中分配内容,允许内容依次或平衡分布在列中。
.container {
column-count: 3;
column-fill: auto;
}
outline-offset调整轮廓与元素边缘之间的空间,不影响布局,为轮廓的外观提供更细致的控制。
button {
outline: 2px solid blue;
outline-offset: 4px;
}
此属性允许精细控制数字字体渲染,启用特性如数字大小写和分数、序数指示器等。
p {
font-variant-numeric: lining-nums;
}
启用或禁用字体光学大小调整,以调整字符的间距和比例,实现在不同字体大小下更好的视觉和谐。
p {
font-optical-sizing: auto;
}
精确控制文本装饰(如下划线、上划线和删除线)的粗细,实现精细化定制。
p {
text-decoration-thickness: 2px;
}
text-decoration-skip-ink属性控制文本装饰(如下划线)在被墨水遮挡的情况下是否继续绘制,提升可读性。
a {
text-decoration-skip-ink: auto;
}
word-spacing属性控制字词间距,调整文本的紧凑度和可读性。
p {
word-spacing: 2px;
}
通过调整断字点和断字行为,提高文本在窄列中的美观度和可读性。
p {
hyphens: auto;
}
background-blend-mode属性允许背景图像与其下方的背景颜色进行混合,产生出独特的视觉效果。
.element {
background-image: url('image.jpg');
background-color: #3498db;
background-blend-mode: multiply;
}
text-decoration-color属性控制文本装饰的颜色,为链接和装饰文本提供更灵活的样式。
a {
text-decoration: underline;
text-decoration-color: red;
}
overflow-anchor属性指定了在容器的滚动范围内滚动时哪些内容应保持可见,提升用户体验。
.container {
overflow-anchor: none;
}
contain-intrinsic-size属性定义了内联大小计算函数的大小,实现更精确的布局控制。
img {
contain-intrinsic-size: 200px 300px;
}
line-gap属性定义了元素的行间距,可以为文字和其他行内元素提供更大的空间。
p {
line-gap: 1.5;
}
text-underline-offset属性控制文本下划线相对于基线的垂直偏移量,实现更加精确的下划线定位。
a {
text-decoration: underline;
text-underline-offset: 3px;
}
text-decoration-line属性指定要绘制的装饰线的类型,可用于单独控制上划线、下划线、删除线等。
a {
text-decoration-line: underline overline;
}
text-emphasis属性为文本设置强调标志,用于提高关键字的可读性。
em {
text-emphasis: filled circle;
}
text-orientation属性控制文本的方向,适用于纵向文本和日文排版等情况。
.vertical-text {
text-orientation: sideways-right;
}
background-origin属性确定背景图片的起始位置,影响背景图片与边框的相对位置。
.element {
background-image: url('image.jpg');
background-origin: content-box;
}
counter-set属性在使用counter-reset创建的计数器值基础上,显式设置一个新的值。
ol {
counter-set: section 1;
}
hanging-punctuation属性控制标点符号是否在行框之外悬挂,以提高排版的美观度和可读性。
p {
hanging-punctuation: last allow-end;
}
line-break属性控制文本换行行为,确保在指定的断点处进行断行。
p {
line-break: anywhere;
}
text-justify属性指定如何分配额外的空间,以便充分利用容器的宽度。
019年3月1日,vivo发布了旗下全新子品牌iQOO,与以往旗下产品所不同的是,此次发布的全新旗舰手机,在产品性能、设计、价格等多个方面都打破了原有消费者对vivo的印象,以“高性价”的表现方式呈现在世人面前,而性能也达到了目前手机市场的顶尖之列,众人对其可谓是期待满满。iQOO作为vivo旗下的一款全新子品牌旗舰,“生而强悍”的强势宣传语都彰显着其强大之处,但是其表现是否真如传言般强悍呢,除了强悍的性能还有何突出优势?这是一个值得我们一起探讨的问题!
一改传统机身外观 酷炫感十足的变身
iQOO作为一款全新的vivo旗舰品牌,产品包装在延续了原有的长形设计,同时加入了与其相匹配的产品特色,比较有特点的长条形灯效与不规则开箱口的设计,彰显着其与众不同的特点。
iQOO外观设计借鉴了超跑的“Speed Art”的设计语言,将暗夜光轨纹理与3D炫彩玻璃后盖之中,每一根光轨线条采用精湛的技术,通过国外精密的钻石刀在铜柱上雕刻出10um的纹理,然后经过复杂的工艺在光学菲林上转印纹路,再通过光学镀膜机把700纳米厚的二氧化硅等材料蒸发到菲林上,从不同的角度有着不同的工艺之美,透露着其特有的速度与力量的效果,呈现出低调中的个性,观赏感与辨识度极强。
科技视讯入手的这款是12GB+256GB“猛兽版”骑士黑版本,在机身表面还加入了碳纤维纹理,握持时会感受到不错的阻尼感,触摸时既有金属的质感,又有玻璃的细腻,上手非常舒适。
另外机身背面的中间还增加了一个隐藏式1680万色的LED灯带,并且上方印着斜体的“MONSTER INSIDE”字符标识,与背部的纹理融为一体,呈现出更加酷炫与速度疾驰的感觉,而且LED灯效的加入也带来了非常炫酷的灯光体验,此LED灯在来电、通话、通知、充电、音乐、Jovi等场景都可迸发出不一样的闪亮灯效,激发一颗电竞之心。
iQOO的后置三摄与“iQOO”的品牌字样标识分别排列在背面的左侧上下位置,处于同一竖列线条,保持了机身的协调之美。另外iQOO还增加了NFC功能,将其识别区域设置在背面的上半部分,有效提升日常“刷手机”时的NFC识别准确率,在日常生活中可以提供更为灵敏、便利的NFC识别体验。
机身左右边框还增加了超跑腰线设计,通过将侧边框挖出两条横槽,类似于跑道的设计,使得机身从侧边观感更为纤薄,常见的电源键、音量键等按键也集成在边框的跑道之中,同时按键上方也增加了车轮纹理,按压感极为舒适。
另外骑士黑版本的iQOO机身电源键采用了鲜艳的亮橘色设计,与机身整体的黑色呈现出强烈的对比,点睛之笔的设计,让手机显得更为高端一些。
最令人惊喜的是,iQOO在机身右侧中框两端配备了电竞手机才配备的隐藏游戏压感按键,可实现类如手柄的RB、LB键的操作功能,在“吃鸡”类游戏中能够实现“四指操作”,宛如自带“物理外挂”的存在。
iQOO并没有增加红外传感器设计,无法满足手机变身遥控器的需求,虽然日常此功能使用频率并不高,但是依旧感觉有些许遗憾,机身的顶端仅有常见的3.5mm耳机孔与降噪麦克风孔。
机身的底端则是常见的扬声器、麦克风以及Type-C插口,无论正反都可以很好与电源适配器相匹配,设计的风格较为简洁,保持了其根本稳中带酷的基调。
6.41英寸水滴FHD+显示屏 第六代屏幕指纹解锁加持
iQOO的手机正面搭载了一块6.41英寸水滴屏,正面造型设计较为简洁,并尽可能减少机身正面元器件对屏幕的占有,采用19.5:9屏幕比例设计,机身观感极为修长,除了带来高达91.7%的屏占比,同时也呈现出更为宽广的画面效果。
屏幕采用了AMOLED的升级版的Super AMOLED材质,AMOLED屏幕分为三层:显示屏幕、触摸感应面板和最外面的那层玻璃,Super AMOELD则是取消了中间的触摸感应面板,将AMOLED感应层做在了屏幕之上,以此带来的好处就是操控更灵敏,再加上三星自研的mDNIe引擎,使得Super AMOLED屏幕看起来非常绚丽,另外屏幕分辨率为2340x1080,屏幕对比度60000:1,并且可支持数码电影院的100%DCI-P3,可提供更为鲜艳、亮丽、色彩丰富的画面效果,屏幕观感通透且舒适。
为了带来更大的屏占比,iQOO将前置双核1200万像素的摄像头集成在“水滴”之中,并同时将听筒与上边框相结合,形成隐藏式听筒,进一步减少器件对屏幕的占有,提高屏幕可视视野。
除了机身额头的优化之外,iQOO机身边框下巴同样进行了缩减,采用COF封装工艺将下边框缩减至极窄范围内,在保证不会产生误触的同时,带来更窄的边框设计,让屏幕视觉观感更为震撼。
另外iQOO依托vivo近几年不断进步的科研力量,搭载了时下前沿的屏幕指纹解锁技术,在超光感屏幕下方加入了屏幕指纹识别模块。此次iQOO全新搭载的屏幕指纹解锁技术不仅融合了vivo前五代技术,还加入了超过千万台的屏幕指纹解锁数据,同时结合了高通骁龙855的新一代DSP硬件加速算法,实际解锁体验得到了进一步提升,360°指纹解锁无压力。
在使用指纹识别功能时,大家仅需进入手机设置中录入指纹,通过不断重复移动、放置手指位置,从而提高手指的识别区域,进而体验更灵敏的指纹解锁方式。
除了可通过屏下指纹进行解锁之外,iQOO还可通过人脸识别,可在双手不便时带来更便利的解锁体验,人脸解锁的灵敏度并没有因为受到前置摄像头区域的缩小而改变,实际解锁与往常无异。人脸信息录入的方法与其它手机相同,只需进入解锁界面,选择录入面部信息并随后开启面部解锁功能即可。
残暴的高通骁龙855芯片 众多物理外挂加持
生而强悍的iQOO在性能上不可谓是非常强悍,作为此品牌的第一款机型,处理器采用新一代7nm制程工艺的高通骁龙855处理器,CPU搭载定制设计Kryo485架构内核,最高主频可达2.84Ghz,CPU单核性能提升45%。GPU采用全新的Adreno640,图形渲染速度提升20%,性能再战巅峰之巅。
同时iQOO还配备了12GB+256GB大内存,其中运行内存采用的是LPDDR4X规格,可保证长时间提供流畅用机体验,配以骁龙855处理器等强悍的硬件性能支撑,足以可用“完虐”二字来应对日常的游戏、观影以及多任务运行等多个方面体验。
在安兔兔性能跑分中获得369130分,其中CPU120302分,GPU156018分,在性能排行榜中排名第二,位于同样搭载骁龙855芯片的小米9与联想Z5 Pro GT版之间。
在geekbench4跑分评测中单核3471分,多核11062分,在RenderScript性能评测中获得7223分,与搭载骁龙855芯片的其它手机大致相同。
在鲁大师性能评测中故意的360581分,整体性能超越99%的对手,其中CPU为118681分,GPU为1544375分,在性能排行中位于第一位。在体验评测中获得139.58分,在反应浏览器性能的HTML5评测中获得45856分。
在鲁大师AI性能评测中获得48590分,在所有的机型中排名第1,超越99%的其它手机,高通骁龙855芯片的AI性能此次也得以提升,是上一代的3倍之多,可为日常的AI智能体验提供强劲的硬件基础。
除了强大的硬件支撑之外,iQOO系统还添加了全新的vivo Multi-Turbo软件方面的优化,除了可支持原有的Game Turbo游戏专属加速之外,此次还新增了Net Turbo网络加速,在游戏延时大或者Wi-Fi质量差时,会自动将网络切换到4G网络,以保证游戏的最佳网速供应。另外游戏体验时,Center Turbo处理器加速会优化后台运行程序资源,从而保证游戏的CPU与内存资源都保持在最大情况下,从而体验更为畅快的游戏体验。
另外iQOO系统还增加了游戏魔盒,可通过屏蔽游戏干扰、降低功耗、提升游戏性能等多个方面,营造出更适合游戏体验的环境。另外在游戏空间也可观察手机CPU、温度、网络负载等各种情况,做到心有所属。
机身的温度一直是影响游戏体验的重要因素之一,过热很容易引发处理器性能下降,从而导致游戏体验卡顿、不流畅等现象的发生。针对此类问题,iQOO加入了“超级液冷散热”技术,将机身背面内部增加了由万级导热系数热管、可固化导热凝胶、高导热铝合金框架、多层复合石墨热膜共同组成的多层散热结构,通过高温蒸发吸热、低温液化放热的原理达到快速降温效果,在长时间游戏、边充边玩等容易发热场景下,可有效控制机身温度情况,保证手机性能属于最佳状态。
在《王者荣耀》游戏体验时,得益于高通骁龙855带来的骁龙Elite Gaming、Vulkan1.1图形库以及Super AMOLED超感显示屏的加持,在游戏体验时画面以及角色的质感更为细腻、丰富,19.5:9的视野更为宽广,游戏可以达到高响应率与更精确、速度的操作体验。
另外当达到三杀、五杀等激情时刻时,背面的Monster Halo灯效会迸发光芒,营造更激情的游戏快感。
在开启高帧率游戏模式下,游戏的FPS保持在59的极高水准,而且帧率的波动幅度非常之小,仅有1.30帧,并且FPS帧数维持在稳定的规律状态,整体的体验极为顺畅,把玩之后机身的温度并没有发生明显变化,机身温度一直保持在正常状态。
在吃鸡类游戏中,横屏体验绝地求生之《刺激战场》游戏时,iQOO右侧边配备的Monster Touch压感按键可实现“射击”、“开枪”等操作,边走边压枪的高强度“四指操作”也可轻松实现。
游戏界面时可先从屏幕左侧划出游戏电竞快捷操作界面,选择新增的压感按键功能,通过调整“A”“B”按键的位置以及压感灵敏度,即可感受物理“外挂”般的“吃鸡”游戏体验。
另外iQOO机身还配备了专业线性马达,可将游戏枪声转换为震动效果,无论是视觉、听觉还是触觉都沉浸式感受,游戏体验更逼真。
《刺激战场》的游戏画面品质与帧数设置可达到最高的HDR高清、超高标准,体验更逼真的游戏环境。
整体的游戏FPS保持在39数值(最高40),平均波动在0.97帧,游戏的体验较为顺畅,无论是开车、跑毒、拾取都极为顺畅。尤其在压枪过程中,得益于Monster Touch压感按键的存在,压枪极为稳定,可以快速击杀敌人,轻松吃鸡。
4000mAh大电池+44W超级闪充 续航能力强悍无敌
除了强悍的性能之外,手机续航能力也是大家最关心的问题,智能手机的续航能力一直是短板。iQOO在设计时充分考虑续航问题,搭载一个4000mAh的大容量电池,即便搭载6.41英寸大显示屏,可获得平均13.5小时的长时间续航体验,满足一天正常使用需求完全没问题。
在充电方面,iQOO做了重大的创新与进化,iQOO充电方式采用vivo Super FlashCharge电荷泵充电技术,同时还引入了Flash Fast Charge充电算法优化技术,可支持44W超快闪充技术,在提升速度的同时降低了充电时的发热,特别采用了3C电芯,峰值充电电流高达近8A,息屏状态内可以在5分钟内实现最高680mAh的电池增长,在iQOO的4000mAh大电池下,极速充至17%,肉眼可见的充电速度,只需45分钟即可将电量充满至100%。
iQOO在数据线设计方面也同样煞费苦心,充电线采用创新L型+胶囊设计,设计风格更为圆润光滑,另外创新的L型设计在横屏握持手机时,不会造成以往的不顺手现象,再搭配其44W超级闪充,边充边玩更畅快。
后置超广角AI三摄 延续vivo美颜拍摄基因
iQOO后置搭载了索尼旗舰级的双核1200万IMX363主摄、1300万像素超广角镜头与一个200万像素的景深摄像头,并且拥有120°超大视野的拍照能力,对焦速度极快。同时搭载的AI智能场景识别功能,可根据不同拍摄的景物自动识别拍照模式,通过系统自我优化,利用AI Turbo 具备的长期学习能力,AI场景识别不仅能对夜景、运动、抖动和逆光这些场景识别并分别调整,更能够识别照片中的内容,人像、美食、鲜花等,并且有针对性的进行智能调整,从而拍摄出更符合当前场景的意境照片。
实际拍摄样张如下:
另外iQOO的超广角拍摄可在有限拍摄位置,拍摄出更为宽广的画面效果,更能凸显拍摄景物的全景面貌以及震撼的拍摄效果,画面两侧的畸变形状也可以得到很好的控制。
▲正常拍摄模式
▲广角拍摄模式
在拍摄暗光环境景物时,iQOO具备高达 12.3EV的动态范围,传感器单个像素面积更提升至1.4μm,搭配f/1.79超大光圈,都为夜景、暗光等拍摄环境下的稳定清晰成像提供强大的硬件支持。配合其连续拍摄12-16帧的多帧降噪合成高品质技术,在逆光、弱光情况下可拍摄出明亮通透的照片效果,极大还原了照片细节,保证暗部曝光正确的同时,明部的细节也得到保留,实际表现较为不错。
在人像美颜拍摄方面,一直是vivo强项!此次iQOO在拍照功能上还配置了AI美颜,这一功能可以轻松调整面部容貌,包括削脸、瘦脸、瘦鼻、长鼻、大眼、眼距、嘴型、下巴、额头等,让爱美人士解锁更多拍摄模式,照片效果更理想。
iQOO前置搭载的双核1200万像素摄像头,同样具备了强大的拍摄能力,在人像拍摄以及效果处理方面,都有着独到之处,拍摄出的自拍效果极易捕获爱美人士的芳心,算是保留了vivo的美颜招牌。
全新Funtouch OS9 熟悉的简洁操作系统
iQOO搭载的是全新基于Android9开发的Funtouch OS9操作系统,相比上一代Funtouch OS系统有了很大的改变,最直接的感受系统界面变的更为简洁,界面的滑动及操作变得更为畅快,而且具备一种科技感和速度感。再配以高通骁龙855旗舰芯片的强大性能,为日常流畅系统体验提供了强劲的性能支撑。
在系统导航方面,iQOO可支持适配全面屏操作的导航手势,减少导航键对屏幕的占有,从界面底部三个区域向上滑动,可分别调出控制中心、返回待机、返回上一级界面,整体的操作体验较为顺畅,而且导航手势的设计也较为人性化,可极为快速的熟练上手操作。
另外在智能体验方面iQOO同样带来了不少细节的贴心设计,比如隔空解锁与智能提醒功能。进入手机智能体感设置界面,开启隔空解锁功能,即可无锁屏密码且点亮屏幕时,手掌从手机顶部上方(3cm-5cm)处拂过即可解锁,有种特殊的魔术感。另外开启智能提醒功能之后,拿起手机即可获得未接来电和未读信息的提醒,更为贴心。
最贴心的还是要属Jovi语音助手功能,iQOO搭载从硬件到软件全面升级的Jovi语音助手,可智能的识别语音指令,达到快速的命令执行。除此之外,最欢喜的还是其“我的教学命令”功能,可通过教会Jovi非出厂应用或命令的新操作,做到真正懂你所需的智能语音体验。
iQOO全系配备了NFC-eSE芯片功能,可满足NFC刷公交等便利的手机支付体验,在使用时可通过vivo 钱包开通vivo公交服务,然后在使用时只需把手机贴近公交刷卡机或者地铁闸机,即可享受手机刷卡乘车的便捷体验。
总的来说,iQOO作为第一款全新vivo子品牌旗舰机,搭载的硬核855高通骁龙旗舰芯、LPDDR4X内存规格、超级液冷技术、第六代屏幕指纹技术、Monster Touch压感按键、4000mAh大电池以及44W超级闪充等众多黑科技加持,可谓是亮点多多,而后置广角三摄、前置双核1200万像素,NFC功能的加入又为其增分不少,最重要仅2998元的售价无疑让它在手机市场变得更有竞争力。
*请认真填写需求信息,我们会在24小时内与您取得联系。