(三)应用视觉设计(下)

简介: (三)应用视觉设计(下)

z-index


可以使用 z-index 属性指定元素的堆叠次序。

z-index 的取值是整数,数值大的元素会叠放到数值小的元素上面。


.first {
    background-color: red;
    position: absolute;
    z-index: 2;
}
.second {
    background-color: blue;
    position: absolute;
    left: 40px;
    top: 50px;
    z-index: 1;
}
复制代码


center horizontally


可以通过 display: block; 把行内元素 img 变为块级元素,将图片水平居中。


<style>
    div {
        background-color: blue;
        height: 100px;
        width: 100px;
        margin: auto;
    }
    img {
        display: block;
        margin: auto;
    }
</style>
<div></div>
<img src="https://gitee.com/mancuojie/typo/raw/master/202109080155881.png" alt="🦔">
复制代码


Color


Color model - Wikipedia


当两个颜色恰好在色环的两端时,这两个颜色就互为补色。 两个互为补色的颜色会在混合后变成灰色。


选定主色之后,在色环上选择与它的补色相邻的两种颜色与之搭配。 此种搭配既有对比,又不失和谐。


hsl


Hue, Saturation, Lightness


色相值 就是色环里面的颜色对应的从 0 到 360 度的角度值。

饱和度 是指色彩的纯度,也就是颜色里灰色的占比。 饱和度越高则灰色占比越少,色彩也就越纯;反之则完全是灰色。 饱和度的取值范围是表示灰色所占百分比的 0 至 100。

亮度 决定颜色的明暗程度,也就是颜色里白色或者黑色的占比。 其中,100% 的亮度表示纯白色,0% 的亮度则表示纯黑色,而 50% 的亮度就表示在色相中选取的颜色。


hsl() 使 CSS 更改颜色色调更加方便。 比如,用 l 给一个纯色添加白色可以调出更浅的色调;添加黑色可以创造更深的色调。 另外,还可以通过 s 给纯色添加灰色来同时改变颜色的深浅和明暗。

所有元素的默认 background-color 都是 transparent,可以通过修改饱和度和亮度来调整色调和阴影。


<style>
    header {
        background-color: hsl(180, 90%, 35%);
        color: #FFFFFF;
    }
    nav {
        background-color: hsl(180, 80%, 25%);
    }
    nav ul {
        margin: 0px;
        padding: 5px 0px 5px 30px;
    }
    nav li {
        display: inline;
        margin-right: 20px;
    }
</style>
<header>
    <h1>Cooking with FCC!</h1>
    <nav>
        <ul>
            <li><a href="#">Home</a></li>
            <li><a href="#">Classes</a></li>
            <li><a href="#">Contact</a></li>
        </ul>
    </nav>
</header>
复制代码


linear-gradient


第一个参数指定了颜色过渡的方向——它的值是角度。

90deg 表示垂直渐变(从左到右),45deg 表示沿对角线渐变(从左下方到右上方)。

其他参数指定了渐变颜色的顺序。


div {
    border-radius: 20px;
    width: 70%;
    height: 400px;
    margin: 50px auto;
    background: linear-gradient(35deg, #CCFFFF, #FFCCCC);
}
复制代码


repeating-linear-gradient() 会重复指定的渐变。

有很多参数,本测试只用到角度值和色标。


div{
    border-radius: 20px;
    width: 70%;
    height: 400px;
    margin:  50 auto;
    background: repeating-linear-gradient(
        90deg,
        yellow 0px,
        blue 40px,
        green 40px,
        red 80px
    );
}
复制代码


background


background 属性支持使用 url() 函数作为属性值

我们可以通过链接的方式引入纹理或样式的图片。


<style>
    body {
        background: url("https://cdn-media-1.freecodecamp.org/imgr/MJAkxbh.png");
    }
</style>
复制代码


transform


当使用伪类选取元素的指定状态(如 :hover)时,我们可以通过 transform 属性非常方便地给元素添加交互。


scale


用来改变元素的显示比例。


<style>
    div {
        width: 70%;
        height: 100px;
        margin: 50px auto;
        background: linear-gradient(
            53deg,
            #ccfffc,
            #ffcccf
        );
    }
    div:hover {
        transform: scale(1.1);
    }
</style>
<div></div>
复制代码


skewX skewY


skewX():使选择的元素沿着 X 轴(横向)翻转指定的角度。

skewY():使元素沿 Y 轴(垂直方向)翻转指定角度。


#top {
    background-color: red;
    transform: skewY(-10deg);
}
#bottom {
    background-color: blue;
    transform: skewX(24deg);
}
复制代码


rotate


旋转元素,正为顺时针,负则为逆时针。


.heart {
    background-color: pink;
    height: 50px;
    width: 50px;
    transform: rotate(-45deg);
}
复制代码


Create Graphics


Crescent Moon


创建一个圆的、透明的图形,它具有模糊阴影并略微向两边递减。

如你所见,这个阴影就是新月形狀。


<style>
    .center {
        position: absolute;
        margin: auto;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        width: 100px;
        height: 100px;
        background-color: transparent;
        border-radius: 50%;
        box-shadow: 25px 10px 0 0 blue;
    }
</style>
<div class="center"></div>
复制代码


Heart


伪元素 ::before::after 可以在所选元素之前或之后添加一些内容。

必须配合 content 来使用,这个属性通常用来给元素添加内容诸如图片或者文字。

content 属性仍然是必需的,用来实现形状时它的值可以是空字符串


<style>
    .heart {
        position: absolute;
        margin: auto;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        background-color: pink;
        height: 50px;
        width: 50px;
        transform: rotate(-45deg);
    }
    .heart::after {
        content: "";
        background-color: pink;
        border-radius: 50%;
        position: absolute;
        width: 50px;
        height: 50px;
        top: 0;
        left: 25px;
    }
    .heart::before {
        content: "";
        background-color: pink;
        border-radius: 50%;
        position: absolute;
        width: 50px;
        height: 50px;
        top: -25px;
        left: 0;
    }
</style>
<div class="heart"></div>
复制代码


Animation


给元素添加动画:animation 属性控制动画的外观,@keyframes 规则控制动画中各阶段的变化。

@keyframes 通过给持续时间内的特定帧(从 0% 到 100%)加上 CSS 规则设置动画效果。


8个属性值 说明
animation-name 用来设置动画的名称,也就是在 @keyframes 里用到的名称。
animation-duration 动画指定需要多少秒或毫秒完成
animation-timing-function 设置动画将如何完成一个周期
animation-delay 设置动画在启动前的延迟间隔
animation-iteration-count 定义动画的播放次数
animation-direction 指定是否应该轮流反向播放动画
animation-fill-mode 规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式
animation-play-state 指定动画是否正在运行或已暂停


<style>
    div {
        height: 40px;
        width: 70%;
        background: black;
        margin: 50px auto;
        border-radius: 5px;
        position: relative;
    }
    #rect {
        animation-name: rainbow;
        animation-duration: 4s;
    }
    @keyframes rainbow {
        0% {
            background-color: blue;
            top: 0;
            left: 0;
        }
        50% {
            background-color: green;
            top: 50px;
            left: 25px;
        }
        100% {
            background-color: yellow;
            top: 0;
            left: -25px;
        }
    }
</style>
<div id="rect"></div>
复制代码


fill-mode


描述
none 不改变默认行为。
forwards 当动画完成后,保持最后一个属性值(在最后一个关键帧中定义)。
backwards 在 animation-delay 所指定的一段时间内,在动画显示之前,应用开始属性值(在第一个关键帧中定义)。
both 向前和向后填充模式都被应用。


<style>
    button {
        border-radius: 5px;
        color: white;
        background-color: #0F5897;
        padding: 5px 10px 8px 10px;
    }
    button:hover {
        animation-name: background-color;
        animation-duration: 500ms;
    }
    @keyframes background-color {
        100% {
            background-color: #4791d0;
        }
    }
</style>
<button>Register</button>
复制代码


iteration-count


nimation-iteration-count 描述
n 定义动画播放次数的数值。
infinite 规定动画应该无限次播放。


<style>
    .back {
        position: fixed;
        padding: 0;
        margin: 0;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background: white;
        animation-name: backdiv;
        animation-duration: 1s;
        animation-iteration-count: infinite;
    }
    .heart {
        position: absolute;
        margin: auto;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        background-color: pink;
        height: 50px;
        width: 50px;
        transform: rotate(-45deg);
        animation-name: beat;
        animation-duration: 1s;
        animation-iteration-count: infinite
    }
    .heart:after {
        background-color: pink;
        content: "";
        border-radius: 50%;
        position: absolute;
        width: 50px;
        height: 50px;
        top: 0;
        left: 25px;
    }
    .heart:before {
        background-color: pink;
        content: "";
        border-radius: 50%;
        position: absolute;
        width: 50px;
        height: 50px;
        top: -25px;
        left: 0;
    }
    @keyframes backdiv {
        50% {
            background: #ffe6f2;
        }
    }
    @keyframes beat {
        0% {
            transform: scale(1) rotate(-45deg);
        }
        50% {
            transform: scale(0.6) rotate(-45deg);
        }
    }
</style>
<div class="back"></div>
<div class="heart"></div>
复制代码


timing-function


✿ cubic-bezier.com


使用名为三次贝塞尔(Cubic Bezier)函数的数学函数,来生成速度曲线。


描述
linear 动画从头到尾的速度是相同的。
ease 默认。动画以低速开始,然后加快,在结束前变慢。
ease-in 动画以低速开始,以高速结束。
ease-out 动画以高速开始,以低速结束。
ease-in-out 动画以低速开始和结束。
cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中自己的值。可能的值是从 0 到 1 的数值。


cubic-bezier 函数包含了 1 * 1 网格里的4个点:p0p1p2p3

其中 p0p3 是固定值,代表曲线的起始点和结束点,坐标值依次为 (0, 0) 和 (1, 1)。

你只需设置另外两点的 x 值和 y 值,设置的这两点确定了曲线的形状从而确定了动画的速度曲线。

在 CSS 里面通过 (x1, y1, x2, y2) 来确定 p1p2

通俗的讲,将一条直线放在范围只有 1 的坐标轴中,并从中间拿 p1p2 两个点来拉扯(X 轴的取值区间是 [0, 1],Y 轴任意)


<style>
    .balls {
        border-radius: 50%;
        position: fixed;
        width: 50px;
        height: 50px;
        top: 60%;
        animation-name: jump;
        animation-duration: 2s;
        animation-iteration-count: infinite;
    }
    #red {
        background: red;
        left: 25%;
        /*animation-timing-function: linear;*/
        animation-timing-function: cubic-bezier(0.25, 0.25, 0.75, 0.75);
    }
    #blue {
        background: blue;
        left: 50%;
        animation-timing-function: ease-out;
    }
    #green {
        background: green;
        left: 75%;
        animation-timing-function: cubic-bezier(0.311, 0.441, 0.444, 1.649);
    }
    @keyframes jump {
        50% {
            top: 10%;
        }
    }
</style>
<div class="balls" id="red"></div>
<div class="balls" id="blue"></div>
<div class="balls" id="green"></div>


目录
相关文章
|
7天前
|
人工智能 弹性计算 运维
开启运维新纪元!阿里云OS Copilot深度评测 & 体验分享
OS Copilot是Alibaba Cloud为Linux推出的一款基于大模型的智能助手,它能理解自然语言、辅助命令执行和系统运维。目前仅支持Alibaba Cloud Linux 3的x86_64架构。安装过程涉及线上和本地体验,包括申请试用、配置环境变量、安装组件等步骤。OS Copilot提供命令行和多轮交互模式,能进行代码生成和摘要,辅助开发和运维工作。产品体验评测中,OS Copilot因其自然语言理解和高效辅助得到高度评价,尤其对运维人员来说,能大幅提升工作效率。然而,目前仅限于特定操作系统,是其局限性。未来有望扩展更多功能和支持更多平台。
133160 19
|
7天前
|
前端开发 数据库 JavaScript
基于Flowable的流程挂接自定义业务表单的设计与实践
文章讨论了如何在Flowable流程引擎中挂接自定义业务表单,以及相关设计和实践的步骤。文章中包含了一些前后端代码示例,如Vue组件的模板和脚本部分,这些代码用于实现与Flowable流程引擎交互的界面。例如,有一个按钮组件用于提交申请,点击后会触发applySubmit方法,该方法会与后端API进行交互,处理流程启动、查询关联流程等逻辑。
48360 7
|
5天前
|
存储 SQL 消息中间件
Hologres+Flink企业级实时数仓核心能力介绍
通过Hologres+Flink构建易用、统一的企业级实时数仓。
|
1天前
|
人工智能 数据管理 API
精铸智刃·“百炼”成钢——深度探索阿里云百炼大模型开发平台
阿里云百炼平台是一个一站式的大型语言模型开发和应用平台,旨在帮助企业与开发者高效构建和部署定制化的大模型。平台集成了通义大模型、行业模型和第三方模型,提供模型微调、模型调优、模型部署、模型评测等工具链。用户可以轻松创建和管理模型,通过模型广场选择合适的模型,进行模型体验和调优,然后部署模型以供应用调用。
精铸智刃·“百炼”成钢——深度探索阿里云百炼大模型开发平台
|
8天前
|
数据采集 人工智能 Serverless
AI 克隆声音,只需 3 分钟(附最全教程)
文章介绍了GPT-Sovits,一个开源的生成式语音模型,因其在声音克隆上的高质量和简易性而受到关注。阿里云函数计算(Function Compute)提供了一个快速托管GPT-Sovits的方法,让用户无需管理服务器即可体验和部署该模型。通过函数计算,用户可以便捷地搭建基于GPT-Sovits的文本到语音服务,并享受到按需付费和弹性扩展的云服务优势。此外,文章还列举了GPT-Sovits在教育、游戏、新能源等多个领域的应用场景,并提供了详细的步骤指导,帮助用户在阿里云上部署和体验GPT-Sovits模型。
33866 8
|
7天前
|
存储 关系型数据库 分布式数据库
内附原文|详解SIGMOD’24最佳论文:PolarDB如何破解多主架构经典难题?
在今年的SIGMOD会议上,阿里云瑶池数据库团队的论文《PolarDB-MP: A Multi-Primary Cloud-Native Database via Disaggregated Shared Memory》获得了Industry Track Best Paper Award,这是中国企业独立完成的成果首次摘得SIGMOD最高奖。PolarDB-MP是基于分布式共享内存的多主云原生数据库,本文将介绍这篇论文的具体细节。
内附原文|详解SIGMOD’24最佳论文:PolarDB如何破解多主架构经典难题?
|
8天前
|
SQL 存储 NoSQL
贝壳找房基于Flink+Paimon进行全量数据实时分组排序的实践
本文投稿自贝壳家装数仓团队,在结合家装业务场景下所探索出的一种基于 Flink+Paimon 的排序方案。这种方案可以在实时环境对全量数据进行准确的分组排序,同时减少对内存资源的消耗。在这一方案中,引入了“事件时间分段”的概念,以避免 Flink State 中冗余数据对排序结果的干扰,在保证排序结果准确性的同时,减少了对内存的消耗。并且基于数据湖组件 Paimon 的聚合模型和 Audit Log 数据在数据湖内构建了拉链表,为排序结果提供了灵活的历史数据基础。
28358 0
贝壳找房基于Flink+Paimon进行全量数据实时分组排序的实践
|
13天前
|
人工智能 自然语言处理 算法
阿里云PAI大模型评测最佳实践
在大模型时代,模型评测是衡量性能、精选和优化模型的关键环节,对加快AI创新和实践至关重要。PAI大模型评测平台支持多样化的评测场景,如不同基础模型、微调版本和量化版本的对比分析。本文为您介绍针对于不同用户群体及对应数据集类型,如何实现更全面准确且具有针对性的模型评测,从而在AI领域可以更好地取得成就。
|
18天前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!
|
18天前
|
机器学习/深度学习 算法 开发工具
通义千问2(Qwen2)大语言模型在PAI-QuickStart的微调、评测与部署实践
阿里云的人工智能平台PAI,作为一站式的机器学习和深度学习平台,对Qwen2模型系列提供了全面的技术支持。无论是开发者还是企业客户,都可以通过PAI-QuickStart轻松实现Qwen2系列模型的微调、评测和快速部署。