家好,我是刷碗智,今天来摸鱼了。
修改 placeholder 样式,多行文本溢出,隐藏滚动条,修改光标颜色,水平和垂直居中。这些熟悉的场景啊! 前端开发者几乎每天都会和它们打交道,这里有20个CSS技巧,让我们一起来看看吧。
你是否经常遇到图片底部多出5px间距的问题?不用急,这里有4种方法可以解决。
方案1:设置父元素字体大小为 0
关键代码:
.img-container{
font-size: 0;
}
事例地址:https://codepen.io/qianlong/pen/VwrzoyE
方案2:将 img 元素设置为 display: block
关键代码:
img{
display: block;
}
事例地址:https://codepen.io/qianlong/pen/eYeGONM
方案3:将 img 元素设置为 vertical-align: bottom
关键代码:
img{
vertical-align: bottom;
}
事例地址:https://codepen.io/qianlong/pen/jOaGNWw
解决方案4:给父元素设置 line-height: 5px
关键代码:
.img-container{
line-height: 5px;
}
事例地址:https://codepen.io/qianlong/pen/PoOJYzN
如何使元素与窗口一样高?答案使用 height: 100vh;
事例地址:https://codepen.io/qianlong/pen/xxPXKXe
关键代码:
.placehoder-custom::-webkit-input-placeholder {
color: #babbc1;
font-size: 12px;
}
事例地址:https://codepen.io/qianlong/pen/JjOrPOq
除了最后一个元素外,所有元素都需要一些样式,使用 not 选择器非常容易做到。
如下图所示:最后一个元素没有底边。
关键代码
li:not(:last-child) {
border-bottom: 1px solid #ebedf0;
}
事例地址:https://codepen.io/qianlong/pen/QWOqLQO
当内容不够时,按钮应该在页面的底部。当有足够的内容时,按钮应该跟随内容。当你遇到类似的问题时,使用 flex 来实现智能的布局。
事例地址:https://codepen.io/qianlong/pen/ZEaXzxM
可以使用 caret-color 来修改光标的颜色,如下所示:
caret-color: #ffd476;
事例地址:https://codepen.io/qianlong/pen/YzErKvy
默认情况下,在type="number"的末尾会出现一个小箭头,但有时我们需要将其删除。我们应该怎么做呢?
关键代码:
.no-arrow::-webkit-outer-spin-button,
.no-arrow::-webkit-inner-spin-button {
-webkit-appearance: none;
}
事例地址:https://codepen.io/qianlong/pen/OJOxLrg
当输入框被选中时,它默认会有一条蓝色的状态线,可以通过使用 outline: none 来移除它。
如下图所示:第二个输入框被移除,第一个输入框没有被移除。
事件地址:https://codepen.io/qianlong/pen/YzErzKG
在苹果手机上,经常发生元素在滚动时被卡住的情况。这时,可以使用如下的 CSS 来支持弹性滚动。
body,html{
-webkit-overflow-scrolling: touch;
}
.box {
padding: 15px;
background-color: #f5f6f9;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
}
.triangle {
display: inline-block;
margin-right: 10px;
/* Base Style */
border: solid 10px transparent;
}
/*下*/
.triangle.bottom {
border-top-color: #0097a7;
}
/*上*/
.triangle.top {
border-bottom-color: #b2ebf2;
}
/*左*/
.triangle.left {
border-right-color: #00bcd4;
}
/*右*/
.triangle.right {
border-left-color: #009688;
}
事例地址:https://codepen.io/qianlong/pen/rNYGNRe
关键代码:
.box {
padding: 15px;
background-color: #ffffff;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
}
.arrow {
display: inline-block;
margin-right: 10px;
width: 0;
height: 0;
/* Base Style */
border: 16px solid;
border-color: transparent #cddc39 transparent transparent;
position: relative;
}
.arrow::after {
content: "";
position: absolute;
right: -20px;
top: -16px;
border: 16px solid;
border-color: transparent #fff transparent transparent;
}
/*下*/
.arrow.bottom {
transform: rotate(270deg);
}
/*上*/
.arrow.top {
transform: rotate(90deg);
}
/*左*/
.arrow.left {
transform: rotate(180deg);
}
/*右*/
.arrow.right {
transform: rotate(0deg);
}
事例地址:https://codepen.io/qianlong/pen/ZEaXEEP
事例地址:https://codepen.io/qianlong/pen/PoOJoPO
第一个滚动条是可见的,第二个滚动条是隐藏的。这意味着容器可以被滚动,但滚动条被隐藏起来,就像它是透明的一样。
关键代码:
.box-hide-scrollbar::-webkit-scrollbar {
display: none; /* Chrome Safari */
}
事例地址:https://codepen.io/qianlong/pen/yLPzLeZ
关键代码:
.box-custom::selection {
color: #ffffff;
background-color: #ff4c9f;
}
事例地址:https://codepen.io/qianlong/pen/jOaGOVQ
关键代码:
.box p:last-child {
user-select: none;
}
事例地址:https://codepen.io/qianlong/pen/rNYGNyB
关键代码:
display: flex;
align-items: center;
justify-content: center;
事例地址:https://codepen.io/qianlong/pen/VwrMwWb
关键代码:
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
max-width: 375px;
事例地址:https://codepen.io/qianlong/pen/vYWeYJJ
关键代码:
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
/* set n lines, including 1 */
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
事例地址:https://codepen.io/qianlong/pen/ZEaXEJg
关键代码:
body{
filter: grayscale(1);
}
作者:Matt Maribojoc 译者:前端小智 来源:stackabuse 原文:https://javascript.plainenglish.io/20-css-tips-and-tricks-to-make-you-a-better-developer-d80ae5c09617
开发交互式用户界面时,层级样式表 (CSS) 非常强大。 CSS 有一些惊人的隐藏提示和技巧,可以用来改善你的网站的外观。
在本文中,将介绍每个前端开发人员在开发出色且用户友好的网页时需要知道的一些很棒的 CSS 技巧。
可以在 CSS 中实现首字下沉。 它看起来很简单。 比如下面显示的图像和代码片段。
p:first-letter {
font-size: 3rem;
}
为文本添加渐变使文本提供了令人惊叹的颜色。
它还为你的设计添加了一些引人注目的功能。
要向文本添加渐变,它采用下面显示的代码片段的形式。
p {
font-size: 48px;
background: -webkit-linear-gradient(#eee, #333);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
有了这个功能,我们可以在 SVG 中屏蔽图像。 检查下面显示的图像。
CSS 非常强大,为我们提供了许多可以实现的功能来实现此功能。
<svg>
<clippath id='clippath'>
/* Enter your svg here*/
</clippath>
</svg>
<style>
img:{
clip-path:url(#clippath)
}
</style>
我们可以在 CSS 中使用图像作为光标。 举个例子,你想在你的内容上提供一个图像光标。
要执行此操作,只需要提供如下代码片段所示。
h1{
cursor:url("custom.gif"), auto;
}
厌倦了普通无聊的列表?CSS 使列表的样式成为可能。
要自定义列表标记,只需要对 CSS 进行编码,如下所示。
::marker{
color:#f548r9;
text-shadow:2px 2px black;
}
CSS 具有强大的提示伪元素,可用于设置视频中的字幕样式。
::cue{
color:green;
background:red;
}
CSS 使剪辑带有文本的视频成为可能。
查看下面代码片段。
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&display=swap" rel="stylesheet">
<stye>
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
.container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 100%;
height: 500px;
}
.container video {
width: 100%;
height: 100%;
}
.container .text {
position: absolute;
top: 0;
line-height: 350px;
width: 100%;
height: 100%;
text-align: center;
background: #ffffff;
mix-blend-mode: screen;
font-size: 15em;
font-family: 'Bebas Neue', sans-serif;
}
</style>
<div class="container">
<video autoplay loop muted>
<source src="https://res.cloudinary.com/dptgkdbjg/video/upload/v1623121486/video_iqbbwc.mp4" type="video/mp4">
</video>
<div class="text">
<p>OCEAN</p>
</div>
</div>
虽然我们可以使用 JavaScript 实现平滑滚动,但 CSS 使我们可以更轻松地在我们的网站中实现平滑滚动。
要启用平滑滚动,需要将 smooth-behavior 设置为平滑。
检查下面显示的代码段。
html{
scroll-behavior:smooth;
}
图像构成了网络的很大一部分,可以使用过滤器来模糊图像。 也可以使用过滤器属性来模糊、饱和、添加亮度、添加其他属性中的饱和度。
查看下面的代码片段。
.blur {
filter: blur(5px);
}
.grayscale {
filter: grayscale(100%);
}
.brightness {
filter: brightness(150%);
}
.saturate {
filter: saturate(200%);
}
.invert {
filter: invert(100%);
}
.huerotate {
filter: hue-rotate(180deg);
}
看看下面显示的图像。 移动浏览器标题有多种颜色。 我们可以修改它并创建与我们网站的颜色主题相融合的颜色。
要更改或自定义移动浏览器标题中的默认地址栏,我们需要包含元标记,如下面的代码片段所示。
<meta name='theme-color' content='#0575e6' />
在元标记中,我们需要传入两个参数,即名称和内容,我们指定我们想要的颜色。 您可以在十六进制代码中包含颜色。
当想要构建交互式用户界面时,层级样式表非常强大。
这些只是我们可以在 CSS 中利用的一些提示和技巧。
01.Safari 中z-index的层级问题
在Safari浏览器下(此Safari浏览器包括iOS的Safari,iPhone上的微信浏览器,以及Mac OS X系统的Safari浏览器),当我们使用3D transform变换的时候,如果祖先元素没有overflow:hidden/scroll/auto等限制,则会直接忽略自身和其他元素的z-index层叠顺序设置,而直接使用真实世界的3D视角进行渲染。例如下面的场景,图中红框里面的模块,使用 3D transform变换,进行旋转动画,但是在Safari浏览器下,忽略了二维码遮罩层的z-index,结果使用了真实世界的3D视角进行渲染。出现了重叠的bug:
解决方法:
02.文字居中兼容
正常处理文字上下居中的手段是让元素height和line-height相等,但是安卓环境下当字体大小<14px/0.7rem的时候会出现居中失效的情况。
解决方法:
height: 1rem; width: 2rem; font-size: 0.5rem; 变成: height: 2rem; width: 4rem; font-size: 1rem; transform: scale(0.5);
但由于放大之后占据空间,左右会留白,需要利用margin负值 margin: -0.35rem -0.45rem 0;调整
3.有解决方案是将rem改为px。
03.2个a标签做90度旋转bug
定义了一个动画效果如下(sass代码):
@keyframes official-featured_rotate { 10%,50%{ transform:rotateY(90deg); } 60%,100%{ transform:rotateY(0deg); } } &-rotate { position: absolute; width: rem(350/2); height: rem(160/2); transform-style:preserve-3d; transform:translate3d(0,0,0); &.ani_rotate { animation:official-featured_rotate 5s linear 0s infinite; animation-delay: 2s; } &__item { width: rem(350/2); height: rem(160/2); position: absolute; &:nth-child(1) { transform: translateZ(rem(350/4)); } &:nth-child(2) { transform: rotateY(90deg) translate3d(0,0,rem(350/4)); } } }
这里是2个a标签,做90度的旋转效果使得两个a可以循环切换展示。这里2个的基本样式是一致的,宽高也一样。但是在安卓下(ios正常)只有打开页面能看到的第一个a标签能正常跳转,能正常绑定事件。第二个a不能跳转,我就想那我通过点击事件来跳转可以不,结果绑定任何事件都不生效。
解决方法:
然后测试发现,在旋转过程中(只要未完全旋转90度)点击还是能一切正常的。于是把旋转角度改为了89.99度,一切正常。动画效果修改为:
@keyframes official-featured_rotate { 10%,50%{ transform:rotateY(-89.99deg); } 60%,100%{ transform:rotateY(0deg); } }
后来查找了一下stackoverflow(https://stackoverflow.com/questions/23548612/cant-click-on-buttons-after-css-transform)。里面也是说了这个解决方法。
04.使用currentColor来简化css
设置border-color、background-color等颜色的时候,可以使用currentColor[与当前元素的字体颜色相同]来简化css。
.div{ color: rgba(0,0,0,.85); font-weight: 500; text-align: left; padding: 20px; border: solid 1px currentColor; }
05.灰色滤镜做样式的disable
灰色图可以直接加滤镜,不用切多一张图。如图:
解决方法:
.coupon_style .disable { -webkit-filter: grayscale(1); }
06.曲线阴影的实现
效果:
代码:
07.翘边阴影的实现
利用:before和:after,加上绝对定位的性质,可以形成一个矩形,这个时候结合CSS3的倾斜属性skew和旋转属性rote。就可以形成一个有旋转角度的平行四边形,这个时候再和原来的矩形重叠,则可产生翘边效果。
效果:
代码:
08.用-webkit-mask实现蒙版
效果图:
代码:
background: url("images/logo.png") no-repeat;-webkit-mask : url("images/mask.png");
mask.png中黑色代表是不透明的(alpha:1),其他部分为透明的(alpha:0),将它盖在背景图上,注意:背景图对应mask.png中透明的位置也会变成透明,留下非透明的形状,即背景图的可见形状与mask.png的可见形状相同,即为"蒙版"。
09.图片自适应占位方式
当图片未正确加载,或加载完成前,由于图片高度为0,其容器会因为没有内容,导致容器无法撑高而塌陷,而如果加载较慢则会在图片加载完成后出现闪烁的情况。
css中,当padding-top/bottom值为百分比时,其值都是以其父元素的宽度为参照对象。因此对于宽高比例固定的情况,可以利用padding-top/bottom用于图片自适应占位,解决页面闪烁的问题。
如果仅设置值padding-top/bottom为百分比,会出现一个问题,就是该方法容器的max-height属性会失效,就无法限制容器的最大高度了。
因此,可以给容器添加一个伪元素的子元素用于撑起内容,该子元素拥有一个padding-top:100%,同时给容器一个max-height尝试限制容器的高度,最后内容用绝对定位的方式添加即可。如:
#container{ width: 50%; max-height:300px; background-color:#ddd; /*由于margin存在塌陷的问题,需要通过构建BFC来保证容器不会受到影响,因此这里可以给容器一个overflow:hidden来保证伪元素的margin不会塌陷。*/ overflow:hidden; position: relative; /* 父容器相对定位 */ } .placeholder::after{ content:""; display:block; margin-top:100%; } img{ position:absolute; /* 内容绝对定位 */ left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%); /* 控制内容绝对定位位置 */ width:80%; /* 控制图片不溢出,因此这里使用的图片实际宽度受父容器影响 */ }
但是对于宽高比例不定的图片来说,这样做可能导致图片显示不全,使用时要注意。
10.页面自适应最佳实践
经过大型项目实践,下面这段CSS是最好的基于rem和vm和calc实践代码:
html { font-size: 16px; } @media screen and (min-width: 375px) { html { /* iPhone6的375px尺寸作为16px基准,414px正好18px大小, 600 20px */ font-size: calc(100% + 2 * (100vw - 375px) / 39); font-size: calc(16px + 2 * (100vw - 375px) / 39); } } @media screen and (min-width: 414px) { html { /* 414px-1000px每100像素宽字体增加1px(18px-22px) */ font-size: calc(112.5% + 4 * (100vw - 414px) / 586); font-size: calc(18px + 4 * (100vw - 414px) / 586); } } @media screen and (min-width: 600px) { html { /* 600px-1000px每100像素宽字体增加1px(20px-24px) */ font-size: calc(125% + 4 * (100vw - 600px) / 400); font-size: calc(20px + 4 * (100vw - 600px) / 400); } } @media screen and (min-width: 1000px) { html { /* 1000px往后是每100像素0.5px增加 */ font-size: calc(137.5% + 6 * (100vw - 1000px) / 1000); font-size: calc(22px + 6 * (100vw - 1000px) / 1000); } }
◆◆最后◆◆
有兴趣学习前端的小伙伴们,可以私信回复(1)
感谢您的阅读!
回复《1》获取
*请认真填写需求信息,我们会在24小时内与您取得联系。