目录
本文是翻译,版权归原作者所有
混合模式
渐变边框
z-index 支持过渡
currentColor
object-fit
单选、复选按钮的样式
CSS 中的 counter
CSS 高级计数器
没有图片的菜单图标
1.shadow
2.渐变
3.UTF-8
@Supports
visibility: visible
position: sticky
新尺寸
文本修饰
触摸设备上的块滚动
使用硬件加速
类命名用 Unicode 字符
百分比表示的垂直边距
Firefox 下的 button 边距
Color + Border = Border-Color
流金岁月
首页 web前端 html教程 CSS 的 22 个必备技巧_html/css_WEB-ITnose

CSS 的 22 个必备技巧_html/css_WEB-ITnose

Jun 21, 2016 am 08:59 AM

本文是翻译,版权归原作者所有

  • 原文地址(original source): http://ipestov.com/22-essential-css-recipes/
  • 作者(author): Ilya Pestov( @ipestov )

大家好!今天我们要 讨论 CSS 中的一些有用的技巧 。开始吧……

混合模式

目前,Firefox 和 Safari 开始支持混合模式,就像 Photoshop 一样。Chrome 和 Opera 也支持,只是有些差异。看例子:

你可以创建不同的样式。下面是示例代码:

.blend {    background: #fff;}.blend img {    mix-blend-mode: darken; }
登录后复制

在线尝试一下 CSS 混合模式和滤镜 !

渐变边框

如今,你可以在边框里使用渐变了。非常简单,只要用较小的 z-index 设置伪元素就可以了:

.box {  margin: 80px 30px;  width: 200px;  height: 200px;  position: relative;  background: #fff;  float: left;}.box:before {      content: '';      z-index: -1;      position: absolute;      width: 220px;      height: 220px;      top: -10px;      left: -10px;      background-image: linear-gradient(90deg, yellow, gold);}
登录后复制

你可以在 这里 找到所有例子。使用 background-clip 和 background-origin 也可以做到 。在美好未来的某一天,border-image 属性也会被所有浏览器支持,实现方法如下:

.box {    border-image: linear-gradient(to bottom, #000000 0%, #FFFFFF 100%);     border-image-slice: 1; /* set internal offset */}
登录后复制

z-index 支持过渡

你可能不知道,但是 z-index 的确支持过渡了!它不会在每一步去改变值,因此你会认为,它不会产生过渡。但是,它真的支持!这里有个 不错的例子 。

currentColor

我们可以用它检测当前颜色值,这样我们就不必多次定义它。

当和 SVG icon 一起使用时最有帮助,它随着父级元素颜色的改变而改变。通常,我们的做法如下:

.button {  color: black;}.button:hover {  color: red;}.button:active {  color: green;}.button svg {  fill: black;}.button:hover svg {  fill: red;}.button:active svg {  fill: green;}
登录后复制

不过,我们可以用 currentColor 实现:

svg {    fill: currentColor;}.button {  color: black;  border: 1px solid currentColor;}.button:hover {  color: red;}.button:active {  color: green;}
登录后复制

关于伪元素的代码:

a {    color: #000;}a:hover {    color: #333;}a:active {    color: #666;}a:after,  a:hover:after,  a:active:after {    background: currentColor;  ...}
登录后复制

object-fit

你还记得有时候你需要为图片设置 background-size 吗,因为它会解决很多问题。现在你可以使用 object-fit,webkit 支持它,很快也会被 Firefox 支持。

.image__contain {  object-fit: contain; } .image__fill {  object-fit: fill; }.image__cover {  object-fit: cover; }.image__scale-down {  object-fit: scale-down;}
登录后复制

示例 。

单选、复选按钮的样式

我们不使用任何图片,来给某个复选按钮设置样式:

<input type="checkbox" id="check" name="check" /> <label for="check">Checkbox</label>
登录后复制
input[type=checkbox] {display: none;}input[type=checkbox] + label:before {      content: "";    border: 1px solid #000;    font-size: 11px;        line-height: 10px;    margin: 0 5px 0 0;    height: 10px;    width: 10px;    text-align: center;    vertical-align: middle;}input[type=checkbox]:checked + label:before {      content: "\2713";}
登录后复制

你可以看到,伪元素和伪选择器 :checked(IE9+)表现正常。在上面的示例代码中,我们隐藏了原始的复选按钮,用我们自己的代替。当被勾选时,我们通过 content 显示一个 Unicode 字符。

CSS 和 HTML 用到的 Unicode 字符不同。在 CSS 中,开头是反斜杠,然后跟上十六进制的字符,而在 HTML 中,它是十进制的,形如 ✓ 。

我们还可以给复选按钮加上动画:

input[type=checkbox] + label:before {      content: "\2713";    color: transparent;    transition: color ease .3s;}input[type=checkbox]:checked + label:before {      color: #000;}
登录后复制

下面是单选按钮的动画:

input[type=radio] + label:before {      content: "\26AB";    border: 1px solid #000;    border-radius: 50%;    font-size: 0;        transition: font-size ease .3s;}input[type=radio]:checked + label:before {      font-size: 10px;    }
登录后复制

你可以在 这里 找到完整的 Unicode 清单,试着 鼓捣下代码 吧。

CSS 中的 counter

不是每个人都知道 counter 可以在 CSS 中设置:

<ol class="list">      <li>a</li>    <li>b</li>    <li>c</li></ol>
登录后复制
.list {    counter-reset: i; //reset conunter}.list > li {    counter-increment: i; //counter ID}.list li:after {    content: "[" counter(i) "]"; //print the result}
登录后复制

我们在 counter-reset 属性中定义了一个任意 ID 和初始值(默认为 0)。你可以在 counter-increment 中设置另一个数字,它定义了计数器的步长。

比如,counter-increment: i 2 将只显示偶数。

CSS 高级计数器

你还可以累加被用户选中的复选按钮:

<div class="languages">    <input id="c" type="checkbox"><label for="c">C</label>  <input id="C++" type="checkbox"><label for="C++">C++</label>  <input id="C#" type="checkbox"><label for="C#">C#</label>  <input id="Java" type="checkbox"><label for="Java">Java</label>  <input id="JavaScript" type="checkbox"><label for="JavaScript">JavaScript</label>  <input id="PHP" type="checkbox"><label for="PHP">PHP</label>  <input id="Python" type="checkbox"><label for="Python">Python</label>  <input id="Ruby" type="checkbox"><label for="Ruby">Ruby</label></div>  <p class="total">    Total selected:</p>
登录后复制
.languages {  counter-reset: characters;}input:checked {    counter-increment: characters;}.total:after {  content: counter(characters);}
登录后复制

我们累加 input:checked 的值,并显示出来, 参看例子 。

你还能开发出一个小型计算器呢:

<div class="numbers">    <input id="one" type="checkbox"><label for="one">1</label>  <input id="two" type="checkbox"><label for="two">2</label>  <input id="three" type="checkbox"><label for="three">3</label>  <input id="four" type="checkbox"><label for="four">4</label>  <input id="five" type="checkbox"><label for="five">5</label>  <input id="one-hundred" type="checkbox"><label for="one-hundred">100</label></div>  <p class="sum">    Sum </p>
登录后复制
.numbers {  counter-reset: sum;}#one:checked { counter-increment: sum 1; }#two:checked { counter-increment: sum 2; }#three:checked { counter-increment: sum 3; }#four:checked { counter-increment: sum 4; }#five:checked { counter-increment: sum 5; }#one-hundred:checked { counter-increment: sum 100; }.sum::after {  content: '= ' counter(sum);}
登录后复制

运行原理一样。这里有在线 demo 和 文章 。

没有图片的菜单图标

你还记得需要使用「三明治」图标的频率吗?

至少有 3 种方法来绘制:

1.shadow

.shadow-icon {   position: relative;   }   .shadow-icon:after {     content: "";     position: absolute;     left: 0;     top: -50px;     height: 100%;     width: 100%;     box-shadow: 0 5px 0 #000, 0 15px 0 #fff, 0 25px 0 #000, 0 35px 0 #fff, 0 45px 0 #000;     }
登录后复制

2.渐变

.gradient-icon {    background: linear-gradient(to bottom, #000 0%, #000 20%, transparent 20%, transparent 40%, #000 40%, #000 60%, transparent 60%, transparent 80%, #000 80%, #000 100%);}
登录后复制

3.UTF-8

你可以只粘贴这个标准符号:☰ (Unicode: U+2630, HTML: ☰)。你可以调整其颜色或尺寸,因此它没有其它方法灵活。

看例子 。

你还可以使用带有伪元素的 SVG、图标字体或边框。

@Supports

CSS 有一些称之为 supports 的新表达式。如你所见,它可以检测浏览器是否支持所需选项。不是所有浏览器都支持它,但是你可将其用作简单的检查。

@supports (display: flex) {    div { display: flex; }}/*You can check prefixes*/@supports (display: -webkit-flex) or (display: -moz-flex) or (display: flex) {    section {        display: -webkit-flex;        display: -moz-flex;        display: flex;        float: none;    }}
登录后复制

visibility: visible

把 visibility: visible 的区块设置为 visibility: hidden,你对此有何看法?

.hidden {  visibility: hidden;}.hidden .visible {  visibility: visible;}
登录后复制

你或许认为所有元素都将被隐藏,实际上,除了子元素显示之外,父元素将隐藏所有元素。请看 demo 。

position: sticky

我们已经发现了一个新特性,现在你可以创建 “sticky” 的区块了。它们和 fixed 区块表现一样,但是不会隐藏另一个区块。 你最好看下这里 。目前,只有 Mozilla 和 Safari 支持,但是你可以用如下方式实现:

.sticky {  position: static;  position: sticky;  top: 0px;}
登录后复制

我们将会在支持的浏览器里得到一个 sticky 区块,而在其它浏览器里得到一个普通区块。特别有利于移动网站,因为你需要创建一个可移动区块且不影响其它元素。

新尺寸

最近,世界上找到了一种新方式,用来描述不同物体的尺寸。比如:

  • vw(视口宽度):视口宽度,单位:1/100。
  • vh(视口高度):视口高度,单位:1/100。
  • vmin 和 vmax:二者都是相对于视口的宽度或高度,但前者总是相对于大的那个,后者总是相对于小的那个。

有意思的是,大部分现代浏览器都对它们支持很好,你可以随意使用。我们为什么需要它们呢?因为它们让所有的尺寸更简单了。你不必定义父级元素尺寸的百分比或其它东东。看个例子:

.some-text {    font-size: 100vh;    line-height: 100vh;}
登录后复制

或者,你在屏幕中央放置一个美丽的弹窗:

.blackSquare {    background: black;    position: fixed;    height: 50vh;    width: 50vw;    left: 25vw;    top: 25vh;}
登录后复制

这貌似是很酷的解决方案。请参考来自 Codepen 的 例子 。

在使用这个特性时,存在一些劣势:

  • IE9 应该使用 vm 而不是 vmin。
  • iOS7 上的 vh,存在一些 bug。
  • vmax 还不被完全支持。

文本修饰

我们用数行代码就能改变选中文本的颜色:

*::selection {    color: #fff;    background: #000;}*::-moz-selection {        /*Only Firefox still needs a prefix*/    color: #fff;    background: #000;}
登录后复制

除了定义选中文本的颜色,还能定义阴影和背景。

触摸设备上的块滚动

如果页面存在一些内部滚动的区块,那么除了添加 overflow: scroll / auto,还要添加这行代码:

-webkit-overflow-scrolling: touch;
登录后复制

问题在于,移动设备浏览器对于 overflow: scroll 属性支持不够好,会滚动整个页面而不是期望的区块。-webkit-overflow-scrolling 修复了这个问题。你可以将其添加到你自己的项目中,看看效果。

使用硬件加速

有时候你的动画能够减慢用户电脑。为了阻止这种情况,你可以针对特定区块使用加速:

.block {    transform: translatez(0);}
登录后复制

你可能感受不到变化,但是浏览器理解,这个元素应该被看做三维,然后开启加速。如果针对 will-change 属性的具体设计,没有提供正常支持,这种方法就不太建议了。

类命名用 Unicode 字符

你可以在如下代码看到使用 Unicode 字符做类名:

.❤ {    ...}.☢ {    ...}.☭ {    ...}.★ {    ...}.☯ {    ...}
登录后复制

只是开个玩笑。尽量不要在大项目中使用,因为不是每一台电脑都一定支持 UTF-8。

百分比表示的垂直边距

事实上,垂直缩进是根据父元素的宽度、而非高度计算出来的。我们创建两个区块:

<div class="parent">      <div class="child"></div></div>
登录后复制
.parent {    height: 400px;    width: 200px;}.child {    height: 50%;    padding-top: 25%;    padding-bottom: 25%;    width: 100%;}
登录后复制

理论上,应该根据高度来填充父元素的,不过,我们看看结果:

你应该记住,百分比是根据父元素的宽度计算出来的。

Firefox 下的 button 边距

Firefox 还没有自身方法来计算 button 的边距。貌似奇怪,但是你可以手动添加。

还可以这样修复:

button::-moz-focus-inner,  input[type="reset"]::-moz-focus-inner,  input[type="button"]::-moz-focus-inner,  input[type="submit"]::-moz-focus-inner {      border: none;    padding:0;}
登录后复制

Color + Border = Border-Color

不是每个人都明白,除了为任何对象定义文本颜色,还可以定义其边框颜色:

input[type="text"] {      color: red;    border: 1px solid;}
登录后复制

流金岁月

如果你仍然不得不支持 IE7 等类似情况,那么,你可以用一个笑脸来定义其 hack:

很酷,对吧?

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1421
52
Laravel 教程
1315
25
PHP教程
1266
29
C# 教程
1239
24
了解HTML,CSS和JavaScript:初学者指南 了解HTML,CSS和JavaScript:初学者指南 Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

HTML,CSS和JavaScript:Web开发人员的基本工具 HTML,CSS和JavaScript:Web开发人员的基本工具 Apr 09, 2025 am 12:12 AM

HTML、CSS和JavaScript是Web开发的三大支柱。1.HTML定义网页结构,使用标签如、等。2.CSS控制网页样式,使用选择器和属性如color、font-size等。3.JavaScript实现动态效果和交互,通过事件监听和DOM操作。

HTML:结构,CSS:样式,JavaScript:行为 HTML:结构,CSS:样式,JavaScript:行为 Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML,CSS和JavaScript的未来:网络开发趋势 HTML,CSS和JavaScript的未来:网络开发趋势 Apr 19, 2025 am 12:02 AM

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML的未来:网络设计的发展和趋势 HTML的未来:网络设计的发展和趋势 Apr 17, 2025 am 12:12 AM

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML与CSS vs. JavaScript:比较概述 HTML与CSS vs. JavaScript:比较概述 Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTML:建立网页的结构 HTML:建立网页的结构 Apr 14, 2025 am 12:14 AM

HTML是构建网页结构的基石。1.HTML定义内容结构和语义,使用、、等标签。2.提供语义化标记,如、、等,提升SEO效果。3.通过标签实现用户交互,需注意表单验证。4.使用、等高级元素结合JavaScript实现动态效果。5.常见错误包括标签未闭合和属性值未加引号,需使用验证工具。6.优化策略包括减少HTTP请求、压缩HTML、使用语义化标签等。

HTML的角色:构建Web内容 HTML的角色:构建Web内容 Apr 11, 2025 am 12:12 AM

HTML的作用是通过标签和属性定义网页的结构和内容。1.HTML通过到、等标签组织内容,使其易于阅读和理解。2.使用语义化标签如、等增强可访问性和SEO。3.优化HTML代码可以提高网页加载速度和用户体验。

See all articles