css规则中区块block,听晴空讲Drupal主题——第六章 主题中的CSS(10)

6.10 在主题中应用smacss(1)——Apply SMACSS in Drupal theme(1)

ok,前几节我都在介绍css构架方式,核心是smacss。smacss并不是什么css技术,它无法帮你写出一个下拉菜单或者首页幻灯片,它是一套关于如何编写css的指导原则,让你的css结构更合理,更具有可读性和重用性。之所以说它是指导原则,是因为它并不是你必须完全遵守的规定,每个人、每个团队、每个项目都可以根据它发展出适合自己的具体实践方式。

要使用smacss构架你的css,你就必须学会掌控你的模版层、掌控页面上的标签,你要有能力指定页面中的某个元素的选择器(class或id),你也应该有能力去把drupal生成的各种令人郁闷的选择器删除掉或者控制在合理的范围内。如果你不这么做,而是直接通过drupal后台自动生成的选择器来写样式,虽然也可以做出和设计图一致的网页,但是你的css就背离了smacss的指导思想了。——这就是drupal主题在国内饱受诟病的原因,一个单纯的前端掌控不了模版层,他看到drupal生成的html里面冗长的class就想砸电脑;可是如果把主题交给一个后端phper来做,他又会很为难,因为他并不见得愿意和css打交道,大材小用、不务正业的感觉多少也会有一点,除非是新人练手。

在整个drupal主题界,这都是一个问题,无论是国内还是国外。一方面是因为smacss理论在前端技术中属于一个新生事物,知道并接受它的人并不多;另一方面是因为drupal主题制作方式中天生的特点(缺陷),导致每个项目能把主题做得和设计图差不多一样就万事大吉了,鬼才有精力去管css是怎么架构的。然而,我的一位良师益友曾经说过一句话,至今犹在耳旁,他说:完美是不可能的,但是总不能从来不想一下什么是完美吧。所以,接下来的内容,我将尝试着和大家讨论如何掌控你的Drupal模版层,也许某一天会有人认同这其中的意义——其中的大部分我已经在第6章第7节中提过了。

现在我们先用一个例子再深入的讲一下我们要解决的问题。这个例子的主角是区块,它是Drupal网页中必不可少的一个东西。在默认情况下,Drupal的block模块会为每个区块提供好几个选择器,其中最常见的就是#block-block-[id],如#block-block-1,这个选择器能让你直接为这个区块编写样式。但问题是:

1 缺乏可重用性。如果你想把这个区块的样式用在其他区块上,你就必须在你的css样式规则中加入其它区块的ID选择器。比如你已经为第一个自定义区块写了如下样式:

#block-block-1{

/*一些css规则*/

}

然后你又创建了第二个区块,那么你不得不将你的css改为:

#block-block-1,#block-block-2{

/*一些css规则*/

}

这时当某个不会前端的网站编辑想要为网站创建一个新的区块,并继承现有区块的样式时,他就会发现在自己给自己找麻烦。同时,如果你的网站项目很大,就算你会前端,你还是会因为要不停的添加新建区块的ID,而进行很多重复工作。

2  区块ID具有不确定性。

还记得那篇黑Drupal的“著名”文章么,现摘录其中一小段:

“而且如果是更改了某个块,块ID变了,css就没了,还要重新调整css里面的id,做html的人不知道要做多少次重复的劳动。而且由于html是view生成的,从html里面的n多垃圾代码找到一个可以用于写css的ID真比自杀还难受。”

Drupal很无奈,两手一摊,你不懂smacss,不会控制你的模版层,怪我咯?

ok,那么怎样为区块指定我们需要的选择器呢?

1 土办法——覆写模版

我们知道,在主题制作中模版覆写有着很重要的地位。很多时候,网页前端代码都是由模版控制的。因此,我们自然可以通过覆写模版来控制页面上的html和class标签。不过这样做的坏处是,你会需要很多很多模版文件。比如,如果用这种方式来控制区块的html的话,每一个区块你都要写一个模版文件。如:

block--footer.tpl.php

block--header.tpl.php

block--search.tpl.php

block--navigation--menu.tpl.php

block--let-me-die.tpl.php

等等

以上这些模版文件大致上都是一样的,只有class标签不一样。如果我们为了架构好css就把模版文件给搞得乱七八糟、乌烟瘴气,似乎又有点南辕北辙的意思了。

2  通过drupal后台UI控制

大概很多开发者都不太赞成这种方法。他们习惯于将代码写在文件中,这样利于搜索、利于版本控制、页面样式不依赖于数据库。但是使用UI的好处是在一定程度上能降低任务的难度,理论上,只要通过简单的文档说明和培训,你就可以让不懂程序的网站编辑自己控制网页元素的css标签,并获得预先设置好的效果,同时还满足控制模版层并用smacss的方式去架构网站css的需求,在某些情况下,这种方式也是可以使用的。以下这些第三方模块都是你可以使用的工具。

block class

display suite

fences

semantic views

semantic fields

skinr

views

fusion accelerator

而为了控制区块的选择器,我们可以使用block class模块, https://www.drupal.org/project/block_class,它的用法非常简单,这里就不再详述了。

至于第三种方式,请看下一节。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。国政府高度重视这一领域的发展,提出“数字国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动国农业现代化的重要途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值