前端开发需要知道的 10 个 CSS 技巧

简介: 个人觉得 CSS 是每个前端开发人员都必须掌握的基础,以完成相应的交互和终端设备的响应。在项目开发中,有些容易被忽略的小问题带来项目后期的胶水代码。本文总结一些项目开发中CSS的10个小技巧。

个人觉得 CSS 是每个前端开发人员都必须掌握的基础,以完成相应的交互和终端设备的响应。在项目开发中,有些容易被忽略的小问题带来项目后期的胶水代码。本文总结一些项目开发中CSS的10个小技巧。

1.使用相对单位

通常我们在项目开发中,使用px作为尺寸的单位,而不是使用相对单位,如:remem等。在万物互联的时代,最好的方式是相对单位remvhvw等现代 CSS 布局(如 flexbox 和 grid)方式,最大限度的支持各种终端设备。

绝对单位

  • px :是一个绝对单位,主要是因为它是固定的,不会根据任何其他元素的测量而改变。

相对单位

  • vw(viewpoint width):相对于视口的宽度
  • vh(viewpoint height):相对于视口的高度
  • rem(font size of the root element):相对于根 ( ) 元素 (默认字体大小通常为 16px )
  • em(font size of the element):相对于父元素
  • % :相对于父元素
/* 不提倡 */
.wrap {
    font-size: 14px;
    margin: 10px;
    line-height: 24px;
}
/* 建议 */
.wrap {
    font-size: 1.2rem;
    margin: 0.5rem;
    line-height: 1.6em;
}

2. 代码复用

很多开发人员在谈到CSS时都觉得代码重复性很高,在项目开发中这不是一个好的做法。好在现在有CSS预处理器(sass/scss、less、stylus、Turbine),能够让我们可以更好的规划CSS代码,提高其复用性。

当然需要提高代码复用,还是需要一定的CSS的基础,来设计好代码结构,如下:

/* 不提倡 */
.container {
    background-color: #efefef;
    border-radius: 0.5rem;
}
.sidebar {
    background-color: #efefef;
    border-radius: 0.5rem;
}
/* 建议 */
.container,
.sidebar {
    background-color: #efefef;
    border-radius: 0.5rem;
}

3.CSS重置

每个浏览器都有自己的默认样式,因此,当网页不包含CSS时,浏览器会为文本添加一些基本的默认样式、填充、边距等。

可以通过使用通用选择器 *  重置 paddingmarginbox-sizingfont-family 来实现这一点。

像这样:

* {
    padding: 0;
    margin: 0;
    box-sizing: border-box;
    font-family: Arial, Helvetica, sans-serif;
}
ul,
li {
    list-style: none;
}

不过这些问题现在基本都被框架解决了,对于初学者建议可以模仿但不建议一开始就上框架。

4.不使用颜色名称

不要使用redblue等颜色名称,相反,建议使用颜色的十六进制值。

为什么呢?因为当使用像 red 这样的颜色名称时,在不同的浏览器或者设备中显示会有所不同。

/* 不提倡 */
.container {
    background-color: red;
}
/* 建议 */
.container {
    background-color: #ff0000;
}

5.使用简写属性

在CSS中,多用简写属性,少用单独属性,具体哪些是简写属性,哪些是单独属性,下面列举一下常见的一些属性,是以通常项目为原则。

简写属性

backgroundfontmarginpaddingborder、  transitiontransformlist-styleborder-radius

单独属性

rotatescalebackground-colorbackground-imagebackground-positionpadding-leftpadding-rightpadding-toppadding-bottommargin-leftmargin-topmargin-rightmargin-bottomborder-topborder-rightborder-bottom border-leftborder-widthborder-colorborder-style

/* 不提倡 */
.container {
    background-image: url(bg.png);
    background-repeat: no-repeat;
    background-position: center;
}
/* 建议 */
.container {
    background: url(bg.png) no-repeat center;
}

6.文本截取

在项目开发中,有些列表只需要显示一行文字,有些列表需要显示固定函数的文字,过去通过字符截取的方式来实现,但存在截取不统一(文本内容不同英文、中文、标点符号等),再加上现在各种终端的适配,不足就被放大了。

现在最佳的方式是通过CSS来实现,在文本最后增加省略号()。

单行截取

元素必须是 blockinline-block,如果溢出被隐藏,则文本溢出不起作用,并且元素必须具有定义的宽度或最大宽度集。

p {
    display: inline-block;
    max-width: 300px;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

多行截取

这里用列举了一种处理方式,有兴趣可以参阅《优雅的处理文本溢出截断》,里面介绍了其他处理方式。

p {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 3; /* 需要显示的行数 */
    overflow: hidden;
}

7.垂直居中

垂直居中是一个很常见的需求,有很多实现方式,在伸缩容器内的任何东西垂直居中:

.flex-vertically-center {
    display: flex;
    align-items: center;
}

inlineinline-blocktable-cell 块垂直对齐:

img {
    /* 只对block有效 */
    display: inline-block;
    vertical-align: middle;
}

相对容器中垂直居中的绝对元素,下面代码是.sub-container.container垂直居中:

.container {
    position: relative;
}
.sub-container {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
}

8.水平居中

与垂直对齐类似,不过水平居中更容易一点。

块居中

.block-element {
    display: block;
    margin: 0 auto;
}

内联或内联块文本居中

.container {
    text-align: center;
}

在相对容器内水平居中绝对元素:

.container {
    position: relative;
}
.sub-container {
    position: absolute;
    top: 50%;
    transform: translateX(-50%);
}

flex 容器内的任何内容水平居中:

.flex-vertically-center {
    display: flex;
    justify-content: center;
}

9.设置下一个或上一个兄弟元素样式

对元素前面和后面的元素进行样式设置,在项目开发中很有用。例如10个按钮,当前按钮下一个及下一个的兄弟元素设置不同的颜色。

html代码如下:

<div>
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <button>4</button>
    <button class="current">current</button>
    <button>+ button</button>
    <button>~ button</button>
    <button>~ button</button>
    <button>~ button</button>
    <button>~ button</button>
</div>

css代码:

.current ~ button {
    background-color: #000;
    color: #ffffff;
}
.current {
    background-color: #ff0000;
}
.current + button {
    background-color: #333;
}

效果如下:

image.png

接下来设置当前按钮前面样式,css代码如下:

button {
    padding: 10px 15px;
    border: 1px solid #444444;
    font-size: 12px;
    background-color: #ff0000;
    color: #000;
}
.current {
    background-color: #000;
    color: #fff;
}
.current ~ button {
    background: initial;
}
.container {
    width: 1000px;
    margin: 50px auto;
    text-align: center;
}

效果如下:

image.png

10.宽高比

如果想让盒子容器有一定的宽高比,如视频播放器尺寸,可以用几种方法来实现,其中有一种方法最直观。可以使用 calc 函数设置顶部填充 (height * width) / 100%

如下,创建一个 720px 宽的 16 x 9 矩形:

html代码:

<div class="container">
    <div class="box"></div>
</div>

css代码:

.container {
    width: 720px;
}
.box {
    padding-top: calc((9 / 16) * 100%);
    background: #efefef;
}

效果如下

image.png

还可以使用 after 伪元素来创建比例大小。

.box::after {
    content: "";
    display: block;
    padding-top: calc((9 / 16) * 100%);
    background: #eee;
}

上面的方案会导致里面所有的元素都必须向上移动或需要使用绝对定位。不过好消息是,CSS增加了aspect-ratio属性。

aspect-ratio 为box容器规定了一个期待的纵横比,这个纵横比可以用来计算自动尺寸以及为其他布局函数服务。

总结

CSS 既有趣又强大,而且还在不断地成长和改进。


相关文章
|
3月前
|
前端开发
【前端web入门第四天】02 CSS三大特性+背景图
本文详细介绍了CSS的三大特性:继承性、层叠性和优先级,并深入讲解了背景图的相关属性,包括背景属性、背景图的平铺方式、位置设定、缩放、固定以及复合属性。其中,继承性指子元素自动继承父元素的文字控制属性;层叠性指相同属性后定义覆盖前定义,不同属性可叠加;优先级涉及选择器权重,包括行内样式、ID选择器等。背景图部分则通过具体示例展示了如何设置背景图像的位置、大小及固定方式等。
264 91
|
1月前
|
Web App开发 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用CSS3,打造炫酷视觉效果!
【10月更文挑战第31天】前端开发面临复杂布局的挑战,本文介绍了几种提升开发效率和代码质量的工具和技术。基础的HTML和CSS可以应对大部分布局需求,而Firefox开发者工具、VS Code、Vue、React等则能应对更复杂的布局,帮助开发者构建高性能、用户友好的网页应用。
28 4
|
2月前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
240 1
|
3月前
|
前端开发
前端基础(五)_CSS文本文字属性、背景颜色属性
本文详细介绍了CSS中关于文本和背景颜色的样式属性。包括字体大小、字体族、字体加粗、字体样式、文本行高、`font`属性、文本颜色、文本对齐方式、文本装饰线、首行缩进等文本属性,以及背景颜色、背景图片、背景重复、背景位置等背景属性。文章通过示例代码展示了这些属性的具体应用和效果。
64 3
前端基础(五)_CSS文本文字属性、背景颜色属性
|
3月前
|
前端开发
前端基础(九)_CSS的三大特征
本文详细解释了CSS的三大特性:层叠性、继承性和优先级,并通过实例演示了样式冲突、叠加和选择器优先级的应用。
34 2
前端基础(九)_CSS的三大特征
|
2月前
|
前端开发 容器
前端技术分享:利用CSS Grid布局实现响应式设计
【10月更文挑战第1天】前端技术分享:利用CSS Grid布局实现响应式设计
|
2月前
|
前端开发 UED 容器
前端技术分享:利用 CSS Grid 实现响应式布局
【10月更文挑战第1天】前端技术分享:利用 CSS Grid 实现响应式布局
74 2
|
2月前
|
Web App开发 前端开发
【前端基础篇】CSS基础速通万字介绍(上篇)2
【前端基础篇】CSS基础速通万字介绍(上篇)
27 2
|
2月前
|
Web App开发 前端开发
【前端基础篇】CSS基础速通万字介绍(上篇)3
【前端基础篇】CSS基础速通万字介绍(上篇)
20 1
|
2月前
|
缓存 前端开发 JavaScript
【前端基础篇】CSS基础速通万字介绍(上篇)1
【前端基础篇】CSS基础速通万字介绍(上篇)
21 1
下一篇
DataWorks