当前位置: 首页 > Web前端 > CSS

【译】前端项目中常见的CSSIssues

时间:2023-03-31 00:19:05 CSS

原文地址:CommonCSSIssuesForFront-EndProjects原作者:AhmadShadeed译者:Chor快速总结:近年来,跨浏览器的渲染和交互越来越一致。尽管如此,它仍然不完全一致,并且有很多小事情会让你失望。除了这些问题,还有不同的屏幕尺寸、语言偏好和明显的人为错误等不确定性,我们从中发现了很多会让开发者出错的小问题。在浏览器中实现用户界面时,最好尽可能减少这些差异和问题,以便UI的行为可预测。记住所有这些差异可能很困难,因此我列出了常见问题和解决方案。在您处理新项目时,可以将其用作方便的参考指南。让我们开始吧。1.重置按钮和输入元素的背景添加按钮时,重置其背景,否则跨浏览器呈现不同。下面的示例显示了Chrome和Safari中的相同按钮,默认情况下具有灰色背景。(大图预览)重置背景可以解决这个问题:button{appearance:none;背景:透明;/*其他样式*/}https://codepen.io/shadeed/pe...请参阅Codepen上的AhmadShadeed(@shadeed)代码按钮和输入框。2.overflow:scroll和auto要限制元素的高度并允许用户滚动它,请添加overflow:scroll-y。在macOS下的Chrome中,这看起来不错,但在Windows下的Chrome中,滚动条始终存在(即使内容非常短)。这是因为无论内容如何,??scroll-y都会始终显示滚动条。而overflow:auto只会在需要时显示滚动条。左:macOS上的Chrome。右:Windows上的Chrome(大预览).element{height:300px;overflow-y:auto;}https://codepen.io/shadeed/pe...在CodepenCodeoverflow-y上查看AhmadShadeed(@shadeed)。3.添加flex-wrap要使元素表现得像flex容器,只需添加display:flex。但是,如果不加flex-wrap,那么当屏幕尺寸缩小时,会出现水平滚动条。

.wrapper{display:flex;}.item{flex:00120px;height:100px;}上面的示例在大屏幕上运行良好。在移动设备上,浏览器将显示水平滚动条。左:出现水平滚动条并且项目不换行。右:项目换行并显示在两行(大图预览)。解决方案很简单。包装器应该在没有足够空间时包装项目。.wrapper{display:flex;flex-wrap:wrap;}https://codepen.io/shadeed/pe...在Codepen上查看AhmadShadeed(@shadeed)的代码overflow-y。4.当flex项目的数量变化时,不要使用justify-content:space-between在我们有8个卡片项目的例子中,它似乎没问题。如果由于某种原因,项目的数量是7怎么办?第二行中的元素看起来与第一行中的元素不同。8项包装器(放大预览)7项包装器(放大预览)https://codepen.io/shadeed/pe...查看AhmadShadeed(@shadeed)在Codepen-y上的代码溢出。在这种情况下,CSSGrid会更合适。5.长词和链接在手机屏幕上浏览文章时,长词或内联链接可能会导致页面出现水平滚动条。使用CSSword-break可以防止这个问题。(大图预览).article-contentp{word-break:break-all;}(大图预览)详见CSS-Tricks。6.透明渐变添加起点和终点透明的渐变时,在Safari下会显得暗。这是因为关键字transparent不被Safari识别。通过将其替换为rgba(0,0,0,0)我们可以达到预期的效果。请注意下面的屏幕截图:上图:Chrome70。下图:Safari12(大图预览).section-hero{background:linear-gradient(transparent,#d7e0ef),#527ee0;/*其他样式*/}应替换为:.section-hero{background:linear-gradient(rgba(0,0,0,0),#d7e0ef),#527ee0;/*otherstyles*/}7.CSS网格布局中auto-fit和auto-fill区别的误解在CSS网格布局中,repeat函数可以在不使用媒体查询的情况下创建响应式列布局。为此,可以使用自动填充或自动调整。...当有空列时,它的宽度为0。SaraSoueidan写了一篇很好的文章来讨论这个问题。8.当视口不够高时将元素固定到屏幕顶部如果当视口不够高时将元素固定到屏幕顶部会怎样?简单:它会占用屏幕空间,最终用户可以浏览网站的垂直区域很小而且不舒服,影响他们的体验。@media(min-height:500px){.site-header{position:sticky;顶部:0;/*其他样式*/}}在上面的代码中,我们让浏览器只显示Time来固定顶部。还有一个重点:使用position:sticky时,除非指定top属性,否则不会生效。(大预览)https://codepen.io/shadeed/pe...在Codepen上查看AhmadShadeed(@shadeed)的代码overflow-y。9、添加图片时,给图片设置max-width,定义max-width:100%,这样图片在屏幕小的时候会改变尺寸。否则浏览器将显示水平滚动条。img{max-width:100%;}10.使用CSSgrid定义main和aside元素CSSgrid可以用来定义布局中的mainsection和asidesection,这是CSSgrid的一个很好的用途。问题是即使aside是空的,它的高度也会等于main的高度。要解决此问题,请将aside元素与其父元素的原点对齐,使其高度不会扩大。.wrapper{显示:网格;网格模板列:repeat(12,minmax(0,1fr));grid-gap:20px;}//align-self将使aside元素与其父元素的开始对齐。aside{网格列:1/4;网格行:1;对齐自我:开始;}main{grid-column:4/13;}(大图预览)https://codepen.io/shadeed/pe...在Codepen上查看AhmadShadeed(@shadeed)的代码overflow-y。11.向SVG添加填充当使用SVG时,如果在SVG内部添加填充,有时它可能无法按预期工作。要解决此问题,请从SVG本身中删除fill属性,或覆盖fill:color。例如:.some-icon{fill:#137cbf;}如果SVG有内联填充,此代码将不起作用。应替换为:.some-iconpath{fill:#137cbf;}12.使用伪元素我喜欢尽可能使用伪元素。伪元素为我们提供了一种创建假元素的方法,主要用于装饰,而无需将它们添加到HTML中。在使用它们时,开发人员可能会忘记执行以下操作:添加一个content:""属性,在不定义显示属性的情况下设置它们的宽度和高度在下面的示例中,我们有一个标题,其标记是一个伪元素。必须将content:""属性添加到元素,并且还必须将display:inline-block设置为它,以便宽度和高度按预期工作。(大图预览)13.使用display:inline-block时出现奇怪的间隙设置display:inline-block或display:inline在两个或多个元素上会导致它们之间出现微小的间隙。原因是浏览器将元素解释为单词,在每个元素之间添加一个字符的空格。在下面的示例中,每个项目的右侧都有一个8px的间隙,但是使用display:inline-block会创建一个小间隙,使其成为12px,这不是我们想要的。li:not(:last-child){margin-right:8px;}(大图预览)这个问题可以通过给父元素设置font-size:0来轻松解决。ul{字体大小:0;}li{字体大小:16px;/*字体大小应在此处重置,因为它将从父元素继承`font-size:0`。*/}(更大的预览)https://codepen.io/shadeed/pe...在Codepen上查看AhmadShadeed(@shadeed)的代码overflow-y。14.给输入框赋值label元素时,加上for="ID"使用表单元素时,确保所有label元素都赋值ID。这将提高它们的可访问性,并且在单击时,关联的输入框将获得焦点。Emailaddress:(大图预览)15.交互式HTML元素的字体在设置字体时不生效在整个文档中,字体不适用于input、buttonselect和textarea等元素。默认情况下,它们不继承文档字体,因为浏览器将系统字体应用于它们。要解决这个问题,直接设置字体属性:input,button,select,textarea{font-family:your-awesome-font-name;}16.Horizo??ntalScrollbar某些元素的宽度可能会导致出现水平滚动条。找到问题根源的最简单方法是使用CSS大纲。AddyOsmani写了一个方便的脚本。将此添加到浏览器的控制台,页面上的所有元素都将被概述。[].forEach.call($$("*"),function(a){a.style.outline="1pxsolid#"+(~~(Math.random()*(1<<24))).toString(16);});(大图预览)17.压缩或拉伸图片使用CSS调整图片大小时,如果长宽比与图片的宽高不一致,图片将被压缩或拉伸。解决方案很简单:使用CSS的object-fit。其作用类似于设置background-size:覆盖到背景图片。img{object-fit:cover;}(大图预览)object-fit不是百试百灵。有些图片必须在不裁剪或调整大小的情况下显示,有些平台会强制用户以特定尺寸裁剪或上传图片。例如,Dribbble要求上传的缩略图大小为800x600像素。18.为输入添加正确的类型使用正确的输入类型。这将改善移动端的用户体验,让用户更容易访问。这是一些HTML:

全名

Email

电话

当每个输入框分别获得焦点时,是这样的:(大图预览)19.RTL布局中的手机号码在右-to-left在的布局中添加+972-123555777等手机号码时,加号将位于号码的末尾。要解决此问题,您可以重新分配手机号码的方向。p{direction:ltr;}(大图预览)结论这里提到的所有问题都是我在前端开发工作中遇到的最常见的问题。我的目标是在开发Web项目时定期检查此列表。你在CSS中经常遇到什么问题吗?欢迎在评论区分享!