一篇文章中,小海前端(头条号)为小伙伴们介绍了CSS3中新增的border-image属性,该属性主要用于为容器的边框添加图片。本篇文章,继续为大家讲解该属性的用法和CSS3中对该属性的一些细节要求。
尚未阅读上一篇文章的小伙伴请先阅读上一篇文章,上一篇文章讲解了border-image属性及其派生属性的基础用法。
承接文章:为容器的边框添加图片,CSS3新增的边框图片属性,一种新颖的用法
技术等级:中级 | 适合有一定的CSS基础的人士阅读。
该组属性的兼容性暂时还不是特别好,建议大家使用火狐浏览器(Firefox)来尝试该属性的各个效果。
希望收藏了这篇文章的你同时也可以关注一下“小海前端”的头条号,因为这些文章都是连载的,并且是经过系统的归纳和总结的。塌下心来认真阅读,你一定会学到对你有用的知识。
本篇文章涉及到的CSS3属性问题:
border-image-slice属性的使用细节
border-outset属性的用法
border-image-width属性和border-width属性的区别
border-image属性和border属性的冲突性
各个浏览器内核的兼容性
一、border-image-slice属性的使用细节:
上一篇文章中讲到,border-image-slice是用来设置边框图片的切片属性的。该属性的取值为一个不带单位的数值,默认单位为像素,但是不用书写px。该属性设置的数值可以将边框图片划分为9个区域,并贴到边框的9个不同位置。
这里还以上一篇文章中宽度和高度均为90像素的图片为例,该图片存放在一个名为images的文件夹中,图片的文件名为ball.jpg,图片中每个圆形的直径均为30像素。
素材图 ball.jpg
对于该属性,CSS3对于它的使用方法还有以下几个细节要求:
当切片的上下偏移之和大于等于图像的高度,且左右偏移之和大于等于图像的宽度。则容器只有四个角可以获得边框图片的切片,而容器的边无法获得任何图片。
CSS代码如下所示:
border-image:url(../images/ball.jpg) 60 70 50 30/30px round
上述代码指出,上切片尺寸为60像素,右切片尺寸为70像素,下切片尺寸为50像素,左切片尺寸为30像素。上下切片的偏移之和为110像素,左右切片的偏移之和为100像素,这两个值均超过了图片90像素的宽高尺寸。因此只有容器的四个角可以得到边框图像。最终效果如下图所示:
实体效果图
当切片的上下偏移量都大于等于图像的高度,且左右偏移量都大于等于图像的宽度。则容器的四个角可以获得完整的边框图像。
CSS代码如下所示:
border-image:url(../images/ball.jpg) 90 100 120 130/30px round
上述代码指出,上切片尺寸为90像素,右切片尺寸为100像素,下切片尺寸为120像素,左切片尺寸为130像素。每一个方向的切片偏移量均大于等于图片90像素的宽度和高度值。因此容器的四个角可以获得完整的边框图像。同样,边依然无法得到任何切片图像。
最终效果如下图所示:
实体效果图
border-image-slice属性还有一个可以放在切片数量后面的取值。当具有该取值并设置为“fill”时,边框图片中5号圆形就会显示在容器的内部。如果没有该取值,边框图片中5号圆形就不会显示在容器内部。
CSS代码如下所示:
border-image:url(../images/ball.jpg) 30 fill/30px round
最终效果如下图所示:
实体效果图
二、border-outset属性的用法:
该属性用来对边框图像实现向外扩张的效果。该属性的取值为带有单位的数值。同时该属性也是可以结合border-image属性单独使用的。
CSS代码如下所示:
border-image:url(../images/ball.jpg) 30/30px round
border-outset:30px;
上述代码会让边框图像在显示的同时向外扩张30像素。请小伙伴们自行操作并尝试。
三、border-image-width属性和border-width属性的区别:
border-width属性可以单独使用,适用于设置具有颜色的边框宽度。
border-image-width属性不可以单独使用,必须在border-image属性取值内部固定的位置处使用。该属性主要用于设置具有图像的边框宽度。
这两个属性是可以同时使用的。
当容器内部具备文本内容时,我们发现,文本内容出现在了边框图片的位置处。为了方便小伙伴们观察,我把文本内容调整成了黄色。如下图的左侧部分。
实体效果图
此时调整border-width属性,为了让边框宽度生效,还需要设置边框样式border-style。为了不让容器的大小发生变化,添加box-sizing属性。为了便于查看,我把文本内容调整成了红色。如上图右侧部分。
CSS代码如下所示:
border-image: url(../images/ball.jpg) 30/30px round;
border-width: 30px;
border-style: solid;
box-sizing: border-box;
color:#ff0000;
四、border-image属性和border属性的冲突性:
CSS3规定,带有颜色的边框和边框图片不得同时存在,并且当border-image属性和border属性同时存在时,border-image是不起作用的。
CSS代码如下所示。
border-image:url(../images/ball.jpg) 30/30px round;
border:solid 10px #ff5857;
上述代码执行后,容器会带有10像素的边框,而不带有边框图片。小伙伴们可以自行尝试。
五、各个浏览器内核的兼容性:
CSS3的属性中还有许多都是浏览器不能完全兼容的,有的属性兼容部分浏览器,有的属性被浏览器部分兼容。那么,要对所有的浏览器都得到相同的外观,应该如何处理呢?
可以采用为CSS属性的兼容性前缀来解决这个问题。
-ms-,适用于具有Trident内核的IE系列浏览器。
-webkit-,适用于具有webkit内核的浏览器,例如Safari浏览器、360安全浏览器等。
-moz-,适用于Firefox浏览器。
-o-,适用于Opera浏览器。
因此,border-image属性要实现浏览器全兼容可以使用下列代码:
border-image:url(../images/ball.jpg) 30/30px round
-webkit-border-image:url(../images/ball.jpg) 30/30px round
-moz-border-image:url(../images/ball.jpg) 30/30px round
-o-border-image:url(../images/ball.jpg) 30/30px round
-ms-border-image:url(../images/ball.jpg) 30/30px round
不过通过实际操作,我发现border-image属性即使加上了浏览器兼容性前缀,也不能达到满意的效果。CSS3中还有许多属性都不能达到最满意的兼容性,我们只能等待CSS3完备的计划出台,并尽快得到大部分浏览器厂商的支持和认可。
在头条上发表的这些文章都是从前端开发的基础开始一步一步讲起的。我非常希望能有更多的前端开发初学者通过我写的文章,逐步学到一定的知识,甚至慢慢有了入门的感觉。这些文章都是我这几年教学过程中的经验,每写一篇时我都尽量把握好措辞,用简单易懂的语言描述,同时精心设计版面,让版面更加丰富,激发阅读兴趣。所以,每一篇文章可能篇幅不长,但是都要耗费小海老师很久的时间。
希望收藏了这篇文章的你同时也可以关注一下“小海前端”的头条号,因为这些文章都是连载的,并且是经过系统的归纳和总结的。塌下心来认真阅读,你一定会学到对你有用的知识。
关注“小海前端”,我会继续为大家奉上更加深入的前端开发文章,也希望更多的初学者跟着学下去,我们共同将前端开发的路努力坚持的走下去。
下一篇文章中,小海前端(头条号)会为小伙伴们讲解CSS3中实现多列布局的属性。这组属性解决了在CSS2时必须要对容器进行浮动才能在一行内显示多列的问题。希望小伙伴们不要错误。
2024年选择适合项目的CSS框架至关重要。这将为构建新的用户界面(UI)组件所需的总体努力定下基调。目前,最重要的是更快地发布新功能,以保持客户的满意度。因此,你需要一个易于使用的CSS框架,它能够提供现成的UI元素。
下面,我们来看看2024年值得尝试的最佳CSS框架。
在今天的数字时代,网页设计和开发已经成为创造令人印象深刻在线体验的关键。为了满足这一需求,Bootstrap 应运而生,它是一款以移动为先的 CSS 框架,不仅能帮助你构建外观优雅的响应式网页界面,还大大简化了开发过程。
Bootstrap 的核心在于其强大的栅格系统,这一系统使得开发者可以为各种屏幕尺寸创建灵活的布局。更重要的是,Bootstrap 提供了大量现成的组件,比如导航栏、卡片和模态框,这些都让开发变得更加迅速和高效。
Bootstrap 的独特之处
如何将 Bootstrap 与现代框架结合使用
如果你在使用 React 开发项目,可以轻松地将 React Bootstrap 库安装到你的项目中,通过这种方式,你可以在保持 React 的组件化开发模式的同时,享受 Bootstrap 提供的样式和组件优势。
import ButtonGroup from 'react-bootstrap/ButtonGroup';
import Dropdown from 'react-bootstrap/Dropdown';
import DropdownButton from 'react-bootstrap/DropdownButton';
import './bootstrap.css';
export function Bootstrap() {
return (
<div className="button">
{['Primary', 'success', 'danger'].map((variant) => (
<DropdownButton
as={ButtonGroup}
key={variant}
id={dropdown-variants-${variant}}
variant={variant.toLowerCase()}
title={variant}
<Dropdown.Item eventKey="1">Action</Dropdown.Item>
<Dropdown.Item eventKey="2">Another action</Dropdown.Item>
<Dropdown.Item eventKey="3" active>
Active Item
</Dropdown.Item>
<Dropdown.Divider />
<Dropdown.Item eventKey="4">Separated link</Dropdown.Item>
</DropdownButton>
))}
<br />
<Dropdown>
<Dropdown.Toggle variant="success" id="dropdown-basic">
Dropdown Button
</Dropdown.Toggle>
<Dropdown.Menu>
<Dropdown.Item href="#/action-1">Action</Dropdown.Item>
<Dropdown.Item href="#/action-2">Another action</Dropdown.Item>
<Dropdown.Item href="#/action-3">Something else</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>
</div>
);
}Tailwind CSS 以其独树一帜的“工具优先”设计理念,在前端开发社区中引起了广泛关注。它与传统的 CSS 框架不同,不提供预设样式的组件,而是通过提供大量的低级实用类(utility classes),让开发者能够构建出完全定制的设计。这种方法提供了前所未有的灵活性和可扩展性,使得开发者可以精准控制网页的每一个细节。
Tailwind CSS 的独特特点
如何集成 Tailwind CSS
集成 Tailwind CSS 到项目中并非一蹴而就,首先需要设置 Tailwind 编译器。通过在项目的配置文件中指定要处理的内容和自定义主题,然后通过插件来扩展功能,你可以开始使用 Tailwind 提供的实用类来编写 CSS。
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./src/**/*.{html,js}"],
theme: {
extend: {},
},
plugins: [],
}以下是相关的使用示例
export function Tailwind() {
const ContactTextArea = ({
row,
placeholder,
name,
defaultValue,
}: {
row: number;
placeholder: string;
name: string;
defaultValue: string;
}) => {
return (
<>
<div className="mb-6">
<textarea
rows={row}
placeholder={placeholder}
name={name}
className="w-full resize-none rounded border border-stroke px-[14px] py-3 text-base text-body-color outline-none focus:border-primary dark:border-dark-3 dark:bg-dark dark:text-dark-6"
defaultValue={defaultValue}
/>
</div>
</>
);
};
const ContactInputBox = ({
type,
placeholder,
name,
}: {
type: string;
placeholder: string;
name: string;
}) => {
return (
<>
<div className="mb-6">
<input
type={type}
placeholder={placeholder}
name={name}
className="w-full rounded border border-stroke px-[14px] py-3 text-base text-body-color outline-none focus:border-primary dark:border-dark-3 dark:bg-dark dark:text-dark-6"
/>
</div>
</>
);
};
return (
<section className="relative z-10 overflow-hidden bg-white py-20 dark:bg-dark lg:py-[120px]">
<div className="w-full px-4 lg:w-1/2 xl:w-5/12">
<div className="relative rounded-lg bg-white p-8 shadow-lg dark:bg-dark-2 sm:p-12">
<form>
<ContactInputBox type="text" name="name" placeholder="Your Name" />
<ContactInputBox
type="text"
name="email"
placeholder="Your Email"
/>
<ContactInputBox
type="text"
name="phone"
placeholder="Your Phone"
/>
<ContactTextArea
row={6}
placeholder="Your Message"
name="details"
defaultValue=""
/>
<div>
<button
type="submit"
className="w-full rounded border border-primary bg-primary p-3 text-white transition hover:bg-opacity-90"
Send Message
</button>
</div>
</form>
<div />
</div>
</div>
</section>
);
}Foundation 是一款开源的、响应式的前端框架,它极大地简化了创建在任何设备上都能完美运行的响应式网站、应用程序和电子邮件的过程。由于其出色的灵活性和易用性,Foundation 已被包括 Facebook、eBay、Mozilla、Adobe 乃至 Disney 在内的许多公司采用于他们的项目中。
Foundation 提供了一个强大而灵活的响应式栅格系统,并且包括了许多方便的选项、模态框(modals)、排版(typography)、导航组件以及表单元素,设计师可以快速将这些元素集成到他们的产品中。此外,Foundation 的模块化架构意味着你可以根据需要,使用它的部分或全部功能。
Foundation 的独特特性
如何在项目中集成 Foundation
通过如下示例代码,可以看到如何在 React 项目中使用 Foundation:
import { Menu, MenuItem } from 'react-foundation';
export function Foundation() {
return (
<Menu style={{ marginLeft: '34px' }}>
<MenuItem>
<a href="/">Home</a>
</MenuItem>
<MenuItem>
<a href="/">Blog</a>
</MenuItem>
<MenuItem>
<a href="/">About</a>
</MenuItem>
<MenuItem>
<a href="/">Contact</a>
</MenuItem>
</Menu>
);
}
这个例子展示了如何使用 Foundation 的 Menu 和 MenuItem 组件来创建一个简单的导航菜单。这种集成方式使得在保持 React 组件化开发模式的同时,还能享受 Foundation 提供的样式和组件优势。
Bulma 是一个轻量级的 CSS 框架,以其简单性、响应性和定制选项著称。它与其他 UI 框架的不同之处在于,Bulma 是基于 Flexbox 构建的,Flexbox 是一种 CSS 布局模型,能够根据容器的宽度调整页面元素的宽度,这使得创建网格等任务变得非常简单,并且是框架轻量化的原因之一。
Bulma 的主要特点
如何在项目中集成 Bulma
将 Bulma 集成到项目中相当简单,只需导入 Bulma 的 CSS 文件即可开始使用它提供的各种样式和组件。以下是一个使用 Bulma 创建分页导航的示例:
import 'bulma/css/bulma.min.css';
export function Bulma() {
return (
<div>
<nav className="pagination" role="navigation" aria-label="pagination">
<a href="/" className="pagination-previous">
Previous
</a>
<a href="/" className="pagination-next">
Next Page
</a>
<ul className="pagination-list">
<li>
<a href="/" className="pagination-link" aria-label="Goto page 1">
1
</a>
</li>
<li>
<span className="pagination-ellipsis">…</span>
</li>
<li>
<a href="/" className="pagination-link" aria-label="Goto page 45">
45
</a>
</li>
<li>
<a
href="/"
className="pagination-link is-current"
aria-label="Page 46"
aria-current="page"
46
</a>
</li>
<li>
<a href="/" className="pagination-link" aria-label="Goto page 47">
47
</a>
</li>
<li>
<span className="pagination-ellipsis">…</span>
</li>
<li>
<a href="/" className="pagination-link" aria-label="Goto page 86">
86
</a>
</li>
</ul>
</nav>
</div>
);
}
这个例子展示了如何利用 Bulma 的分页组件来创建一个简洁美观的分页导航。通过使用 Bulma,开发者可以节省大量的时间来设计和编写 CSS,专注于实现更好的用户体验和界面设计。
UIKit 是一个开源的框架,专门用于构建 Web 应用程序的用户界面。它与其他 UI 框架在结构和设计哲学上有所不同。不同于其他遵循传统 BEM 方法论的框架,UIKit 采用了基于组件的结构。这种方式为组件的灵活性和可重用性提供了更大的空间,可以显著减少构建复杂用户界面所需的代码量。
UIKit 的主要特性
如何在项目中集成 UIKit
将 UIKit 集成到项目中非常直接,仅需导入 UIKit 的 CSS 文件即可开始使用其提供的样式和组件。以下是一个使用 UIKit 创建按钮的示例:
import 'uikit/dist/css/uikit.min.css';
export function Uikit() {
return (
<div className="uk-flex uk-flex-center uk-margin-top">
<button
type="button"
className="uk-button uk-button-default uk-margin-left"
onClick={() => alert('Cancel clicked!')}
>
Cancel
</button>
</div>
);
}
这个例子演示了如何利用 UIKit 的按钮(Button)组件来创建一个简单的按钮,并使用 Flexbox 实现居中布局。通过 UIKit,开发者可以享受到高度灵活和易用的界面构建体验,同时也能保持代码的整洁和模块化。
选择合适的 CSS 框架对于项目的成功至关重要。每个框架都有其独特的特点、优势和可能的限制,因此了解如何根据项目的具体需求挑选合适的框架是一项重要的技能。除了我们讨论的 Bootstrap、Tailwind CSS、Foundation、Bulma 和 UIKit 外,市面上还有许多其他的 CSS 框架,每个都有可能成为你项目的理想选择。
创建概念验证
创建概念验证(Proof-of-Concept,PoC)是评估 CSS 框架是否适合你项目的一个极好方法。通过这种方式,你可以实际操作并体验每个框架的学习曲线、灵活性、易用性以及它们如何适应你的项目需求。以下是一些建议,帮助你通过创建概念验证来选择正确的 CSS 框架:
通过这种综合评估方法,你可以更全面地理解每个框架如何适应你的项目需求,从而做出明智的选择。记住,最适合项目的框架不一定是最流行或最新的,而是最能满足你项目特定需求的那一个。分享你的概念验证经验和框架选择理由,不仅能帮助团队成员理解决策过程,也能为面临相似选择的其他开发者提供参考。
构建现代网页时,图片是不可或缺的元素之一。它们能够增强视觉吸引力,帮助传达信息,并提升用户体验。然而,如果图片没有得到适当的优化,它们可能会显著拖慢网站的加载速度,影响用户体验和搜索引擎优化(SEO)。在本文中,我们将探讨不同的图片格式,并提供优化这些格式的策略和示例。
根据图片内容和用途选择最合适的格式。例如,对于网页上的照片,JPEG可能是最佳选择,因为它在保持相对较小的文件大小的同时提供了良好的图像质量。对于需要透明背景的图标,PNG可能更合适。
使用工具或服务压缩图片,减少文件大小。例如,使用在线工具如 TinyPNG 来压缩PNG文件,或者使用 Adobe Photoshop 的“存储为Web所用格式”功能来减小JPEG文件的大小。
根据需要在网页中显示的大小调整图片尺寸。不要上传超大的图片然后依赖浏览器缩放,因为这会导致不必要的加载时间。
通过 HTML5 的 <picture> 元素或 srcset 和 sizes 属性,可以为不同屏幕尺寸提供不同大小的图片。
对于非视口内的图片,可以使用延迟加载(lazy loading)技术。这样,只有当用户滚动到图片位置时,图片才会加载。
使用内容分发网络(CDN)来分发图片,可以减少加载时间,因为图片会从离用户最近的服务器加载。
假设你有一个高分辨率的照片,原始尺寸为4000x3000像素,文件大小为5MB。如果这张照片要在网页上以800x600像素的尺寸展示,那么:
优化后的图片可能只有100KB左右,大大减少了加载时间。
如果你有一个图标,需要在网页上以多种尺寸展示,并且需要透明背景:
图片优化对于提高网页加载速度至关重要。通过选择合适的图片格式,压缩文件大小,调整尺寸,使用响应式图片技术,实现延迟加载,以及利用CDN,可以确保图片在不牺牲质量的情况下快速加载。这不仅能提升用户体验,还能对SEO产生积极影响。
*请认真填写需求信息,我们会在24小时内与您取得联系。