您现在的位置是:网站首页> 编程资料编程资料
CSS进阶指引CSS Transition通过改变Height实现展开收起元素从QQtabBar看css命名规范BEM的详细介绍css实现两栏布局,左侧固定宽,右侧自适应的多种方法CSS 实现Chrome标签栏的技巧CSS实现两列布局的N种方法CSS实现隐藏搜索框功能(动画正反向序列)CSS3中Animation实现简单的手指点击动画的示例详解CSS中的特指度和层叠问题详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)关于CSS浮动与取消浮动的问题
2021-09-05
966人已围观
简介 这篇文章主要介绍了CSS入门指引,其中包括BEM和OOCSS等的代码示例,强烈推荐!需要的朋友可以参考下
你不要觉得CSS没什么重要可言?最近几年他成为一个热门的话题,很多人都在讨论他。CSS并不是一个简单的事情,前端开发者可以使用他将页面制作的更佳漂亮。看得更远一些,我们更关心的是网站的性能以及如何制作出更好的网站。在本文中,我想分享我最近几个月的学到的有关于CSS编码的知识。作为一个程序员,我真正感兴趣的事情是框架(Architectural)部分。我觉得写CSS应该需要去改变,为此我深挖了很多知识。我搜索了好的程序、工作流和原则。这篇文章将带领大家和CSS一起旅行,很多人都说写CSS并不是编程,我就不同意,我说写CSS同样是有趣的,富有挑战性的。
CSS预处理器
让我们一起面对吧,在世界上写CSS并不是一件可笑的事情。CSS预处理器看起来就像CSS,但他更像一个魔术师一样,使用一些魔法会产生有效的CSS代码。这让你的样多和浏览器之间新增加了一层,这样不是更加的糟糕吗?看上去是这样,但事实不是这样的,因为CSS预处理器提供了一些真正有用的特性。
连接(Concatenation)
我认为最有价值的东西是连接你的文件。我相信,你知道使用@import来引用你的.css文件,告诉浏览器获取这个文件。这样做,浏览器需要增加一个请求,这样有点麻烦,因为你可能有很多个这样的文件。增加额外的请求,使你的程序性能变得更低。如果您使用CSS预处理器语言,这个问题将不会存在。他们只会编译你样式文件中单个.css文件。
扩展(Extending)
LESS和Sass是最主要的两个CSS预处理器。我们都支持扩展。虽然他们的工作方式略有不同,但他们的想法是一样的。你可以做一个基本的类(通常称为mixin)和一群属性,然后在另一个选择器导入这些属性,如:
- // less
- .bordered(@color: #000) {
- border: dotted 2px @color;
- }
- .header { .bordered; }
- .footer { .bordered(#BADA55); }
- // 编译出来的CSS
- .header {
- border: dotted 2px #000000;
- }
- .footer {
- border: dotted 2px #bada55;
- }
这里的问题是,如果你没有定义一个参数的mixin,例如刚才的示例:
- .bordered {
- border: dotted 2px #000;
- }
这是最后编译的CSS文件,无论你是否使用都没有任何关系。因为他是一个有效的选择器。在Sass中我们可以做得更灵活一些。他有混合(mixins)、扩展(extends)和占位选择器(placeholders)(如果您想看到他们之间的区别,我强烈建议您阅读这篇文章)。接下来我们简单看看Sass是如何工作和编译的:
- // sass
- @mixin bordered($color: #000) {
- border: dotted 2px $color;
- }
- .header { @include bordered; }
- .footer { @include bordered(#BADA55); }
- //编译的CSS
- .header {
- border: dotted 2px black;
- }
- .footer {
- border: dotted 2px #bada55;
- }
它看起来和前面几乎相同,但如果我们秋看第二个placeholder的用例:
- // sass
- %bordered {
- border: dotted 2px #000;
- }
- .header {
- @extend %bordered;
- }
- .footer {
- @extend %bordered;
- }
- // 编译的CSS
- .header, .footer {
- border: dotted 2px #000;
- }
这个有两个优势,首先不会编译出.bordered类名,其次会使用组合选择器,合并相同的样式,使代码变得更加简洁。
配置(Configuration)
LESS和Sass都支持变量,你可以调用这些变量,将将他们作为属性的值:
- // sass
- $brand-color: #009f0A;
- ...
- h1 {
- color: $brand-color;
- }
这是一个很好的特性,因为你可以储存一些重要的东西,比如说颜色或者网格的宽度,将他们存放在同一个地方,如果你需要修改一些不经常改动的代码,会变得非常的简便。
另一个好处理,可以使用变量的插值,如下面演示的方法:
- // sass
- @mixin border($side) {
- border-#{$side}: solid 1px #000;
- }
- .header {
- @include border("left");
- }
- // 编译的CSS
- .header {
- border-left: solid 1px #000;
- }
针对预处理器(Against the preprocessors)
预处理器是一种工具,您要使用得先要有一个适合的环境。如果你思念将其集成到你的应用程序中,也需要额外的编码。
如果你不想让你的代码变得混乱,你需要有一个观察机制,用来监测你的文件。如果这样,你每个项目开始时就需要运行这个监测机制。
通常开发人员只看到.less或.sass文件,但是输出是什么非常重要。你可能有写得很好的Sass代码,但这并不意味着,你最终会有很好的CSS代码。可能会有一些特异性的问题,所以需要定期检测编译的版本。
BEM
好的,我找到了一个新的好玩工具。这个预处理器可以节省大量的时间,但他不能为你写出好的结构。首先,我开始考虑是一个命名约定,让我们来看以下的HTML标签:
- <header class="site-header">
- <div class="logo">div>
- <div class="navigation">div>
- header>
可能会写出对应的样式:
- .site-header { ... }
- .logo { ... }
- .navigation { ... }
这样的样式能正常的工作,但它有一个问题——阅读CSS,让人难于理解。例如,logo是属于header部分的,你可能有另一个logo要放在页脚footer处。那么将添加一个后代选择器来控制:
- .site-header .logo { ... }
但是使用这些选择器并不是很好的主意,因为它始终需要依赖于特定的标记和结构。一旦你把logo移到
- .site-header-logo { ... }
很棒了,自己就是说明,但它并不能运用于所有情况之下。例如,我想在12的圣诞节使用一个圣诞节版本的logo。所以,我不能写:
- .site-header-logo-xmas { ... }
因为我的逻辑是,写一个选择器要像嵌套HTML标签一样匹配。
BEM可能解决这样的情况。这意味着块(Block)、元素(Element)和修改器(Modifier)和一些创建规则,你可以遵循这些规则。使用BEM,我们的小例将变成:
- .site-header { ... } /* block */
- .site-header__logo { ... } /* element */
- .site-header__logo--xmas { ... } /* modifier */
- .site-header__navigation { ... } /* element */
也就是说site-header是我们的块。那么logo和navigation是这个块的元素,圣诞版本的logo是修饰符。也许它看起来简单,但是它真的很强大。一旦你开始使用它,会发现他能让你的结构更加的优秀。当然也有反对的理由,那就是因为其语法。是的,或许看起来有点丑,但为了有一个好的结构,我会准备为此做出牺牲。(更好的阅读请点这和这)。
OOCSS
自从我发现BEM,我就开始在思考如何正确的使用我的类名。也许,我的第一件事情要读一篇关于面向对象的CSS。面向对象编程添加了一些抽像的概念,CSS也支持这样的概念。如果你使用了CSS预处理器,你或多或少知道一些。做为一个编写代码的人,我发现这个概念离我平时编程很近,拿JavaScript为例,有两个主要原则:
单独的结构和样式
我们用下面的例子来进行介绍:
- .header {
- background: #BADA55;
- color: #000;
- width: 960px;
- margin: 0 auto;
- }
- .footer {
- background: #BADA55;
- text-align: center;
- color<
相关内容
- 详解CSS3中border-image的使用深入浅析css3 border-image边框图像详解CSS3 border-image详解、应用及jQuery插件深入浅出CSS3 background-clip,background-origin和border-image教程 css3 border-image使用说明css3图片边框border-image的用法
- CSS元素居中布局的简单方法css 不定宽高的元素居中布局解决方案CSS实现元素居中原理解析浅谈css元素居中CSS实现定位元素居中的方法html元素水平居中、垂直居中、水平垂直居中于其父级元素的方法css控制div中元素居中的示例css实现元素居中的N种方法
- 使用CSS3来绘制一个月食图案纯css3绘制的小黄人头像动画特效源码纯css3绘制的QQ企鹅动画特效源码纯css3绘制的精美购物优惠券样式效果源码纯css3绘制的哆啦a梦机器猫头像效果源码HTML5+CSS3绘制锯齿状的矩形CSS3绘制不规则图形的一些方法示例使用HTML和CSS3绘制基本卡通图案的示例分享CSS3绘制圆角矩形的简单示例用CSS3绘制三角形的简单方法纯CSS3绘制打火机动画火焰效果
- 举例详解CSS的z-index属性的使用css3的transform造成z-index无效解决方案css z-index层重叠顺序使用介绍CSS教程 彻底掌握Z-index属性
- 用CSS3绘制三角形的简单方法纯CSS3+DIV实现小三角形边框效果的示例代码详解css如何利用 :before :after 写小三角形CSS3 画基本图形,圆形、椭圆形、三角形等布局和排版教程 纯css3实现图片三角形排列使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)CSS3实现三角形不断放大效果
- 简介CSS中的各种选择符CSS中的属性选择符和结构化伪类详解CSS中的类和ID选择符CSS中的选择符实际使用指南几个特殊的CSS选择符使用介绍css选择符类型详细介绍CSS 选择符的用法和实例详解如何编写高效的 CSS 选择符
- CSS中值得记住的一些技巧CSS的一些必记属性整理举例详解CSS中的的优先级
- CSS的一些必记属性整理10个实用的CSS属性小结深入理解CSS中的属性模块举例详解CSS中的cursor属性
- 举例详解CSS中的的优先级CSS 优先级问题详解浏览器如何判断css优先级CSS的执行顺序和优先级问题示例探讨
- CSS中下拉菜单和表单以及弹出层的简单笔记CSS3模拟动画下拉菜单效果CSS导航栏及弹窗示例代码CSS下拉菜单简单制作教程 你值得拥有的CSS下拉菜单效果纯html+css制作三级下拉菜单基于CSS实现的4级下拉菜单效果代码CSS实现的灰色下拉菜单效果代码基于CSS实现带阴影和小箭头的黑色风格下拉菜单效果css3实现的多级渐变下拉菜单导航效果代码纯CSS实现酷黑风格三级下拉菜单效果代码
点击排行
本栏推荐
