小编Rup*_*ott的帖子

CSS/HTML:使文本斜体的正确方法是什么?

使文本斜体的正确方法是什么?我见过以下四种方法:

<i>Italic Text</i>

<em>Italic Text</em>

<span class="italic">Italic Text</span>

<span class="footnote">Italic Text</span>
Run Code Online (Sandbox Code Playgroud)


<i>

这是"老路".<i>没有语义意义,只传达了使文本斜体的表现效果.据我所知,这显然是错误的,因为这是非语义的.


<em>

这使用语义标记纯粹用于表示目的.它恰好发生<em>在默认情况下以斜体呈现文本,因此经常被那些<i>应该避免但不知道其语义含义的人使用.并非所有斜体文本都是斜体,因为它是强调的.有时,它可能正好相反,如旁注或耳语.


<span class="italic">

这使用CSS类来放置演示文稿.这通常被吹捧为正确的方式,但同样,这对我来说似乎是错误的.这似乎没有传达任何更多的语义含义<i>.但是,它的支持者会哭,如果你想要大胆地改变你所有的斜体文字会更容易.然而事实并非如此,因为我会留下一个名为"italic"的类,它使文本变为粗体.此外,我不清楚为什么我想要改变我网站上的所有斜体文字,或者至少我们可以想到这些不可取或不必要的情况.


<span class="footnote">

这使用CSS类进行语义.到目前为止,这似乎是最好的方式,但它实际上有两个问题.

  1. 并非所有文本都具有足以保证语义标记的含义.例如,页面底部的斜体文字真的是一个注脚吗?还是它放在一边?或完全不同的东西.也许它没有特殊的意义,只需要用斜体表示,以便将它与其前面的文本分开.

  2. 当语义没有足够的强度时,它就会发生变化.让我说我的"脚注"仅仅基于页面底部的文字.几个月后我想在底部添加更多文字会发生什么?它不再是一个脚注.我们如何选择一个不太通用<em>但又避免这些问题的语义类?


摘要

似乎在许多情况下,语义的要求似乎过于繁琐,在这种情况下,制作斜体的愿望并不意味着具有语义含义.

此外,将风格与结构分开的愿望使得CSS被吹捧为<i>当有时候实际上不那么有用时的替代品.所以这让我回到了简陋的<i>标签,并想知道这一思路是否是它留在HTML5规范中的原因?

是否有关于此主题的任何好的博客文章或文章?也许那些参与决定保留/创建<i>标签的人?

html css semantic-markup

194
推荐指数
5
解决办法
24万
查看次数

在哪里可以学习编写词法分析器的基础知识?

我想学习如何写一个词法分析器.我的大学课程有一个任务,我们必须编写一个解析器(和一个词法分析器一起使用),但这是给我们的,没有任何指示或反馈(超出标记),所以我并没有真正从中学到很多东西.

在搜索了这个主题之后,我只能找到相当高级的写作,这些写作集中在我觉得比我所处的位置提前几步的区域.我想讨论为一种非常简单的语言编写词法分析器的基础知识,我可以将其作为研究更复杂语言标记的基础.

在这个阶段,我并不是对最佳实践或优化技术感兴趣,而是更喜欢专注于基本要素.有什么好的资源让我入门?

language-agnostic compiler-construction lexer

69
推荐指数
2
解决办法
3万
查看次数

警告:左移计数> =类型的宽度

我很擅长处理比特,并且在编译时遇到以下警告:

 7: warning: left shift count >= width of type
Run Code Online (Sandbox Code Playgroud)

我的第7行看起来像这样

unsigned long int x = 1 << 32;
Run Code Online (Sandbox Code Playgroud)

如果long我的系统的大小是32位,这将是有意义的.但是,sizeof(long)返回8CHAR_BIT定义为8建议long应为8x8 = 64位长.

我在这里错过了什么?是sizeofCHAR_BIT不准确还是我误解了一些基本的东西?

c bit-manipulation bit-shift long-integer

54
推荐指数
2
解决办法
5万
查看次数

我应该使用@import还是清单文件?

Rails 3.1引入了一种通过引入清单文件来组织JS和CSS的新方法.例如,application.js可能看起来像这样:

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require_tree .
Run Code Online (Sandbox Code Playgroud)

这将抓取Jquery的各个部分,所有自己的JS,将它们连接在一起并将其作为单个文件提供给客户端.很简单.

不幸的是,SASS对我来说并不是那么清楚.SASS已经内置了使用的连接@import.

我应该将所有部分文件更改为完整的SASS文件,然后使用清单文件连接它们还是继续使用@import?为什么?

assets sass ruby-on-rails-3

37
推荐指数
1
解决办法
2万
查看次数

clone和mkdir-> cd-> init-> remote-add-> pull有什么区别?

在Github上设置回购后,似乎有两种方法可以将该回购转换为本地回购.

首先,我可以创建一个目录,初始化一个空白仓库,添加一个遥控器,然后从遥控器中提取更改.

> mkdir "exampleProject"
> cd "exampleProject"
> git init
> git remote add origin git@github.com:exampleUser/exampleProject.git
> git pull origin master
Run Code Online (Sandbox Code Playgroud)

其次,我可以克隆遥控器.

> git clone git@github.com:exampleUser/exampleProject.git
Run Code Online (Sandbox Code Playgroud)

克隆只是上述5步版本的快捷方式,还是做其他任何事情?如果我使用一种方法而不是另一种方法,我会遇到困难吗?

git dvcs git-pull git-clone

26
推荐指数
1
解决办法
7816
查看次数

记录文件,类和构造函数的正确方法是什么?

为构造函数和类和仅包含单个类的文件一致地编写注释块的最有用/最标准/最不令人惊讶的方法是什么?

  • 类的注释块,而不是构造函数
  • 构造函数的注释块,而不是类
  • 构造函数和类的注释块 - >在这种情况下,每个应该包含哪些细节?

然后文件本身?如果它只包含一个类,是否需要注释块?应该去哪些细节?

我想尽量避免在类,构造函数和文件注释块之间重复.

php phpdoc

25
推荐指数
1
解决办法
2万
查看次数

哪个更好:依赖注入+注册表或依赖注入或全局注册?

首先,我想将此问题仅限于Web开发.因此,只要语言用于Web开发,这就是语言无关的.就个人而言,我是从PHP的背景来看这个.

通常我们需要使用来自多个范围的对象.例如,我们可能需要在正常范围内使用数据库类,但也需要在控制器类中使用.如果我们在正常范围内创建数据库对象,那么我们无法从控制器类内部访问它.我们希望避免在不同的范围内创建两个数据库对象,因此无论范围如何,都需要一种重用数据库类的方法.为此,我们有两种选择:

  1. 使数据库对象成为全局,以便可以从任何地方访问它.
  2. 将数据库类以例如控制器构造函数的参数的形式传递给控制器​​类.这称为依赖注入(DI).

当许多类涉及许多不同范围内的所有要求对象时,问题变得更加复杂.在这两种解决方案中,这都成了问题,因为如果我们将每个对象都设置为全局,那么我们就会在全局范围内输入太多噪声,如果我们将太多参数传递给类,则该类变得更难以管理.

因此,在这两种情况下,您经常会看到使用注册表.在全局情况下,我们有一个全局的注册表对象,然后将所有对象和变量添加到任何对象中,但只将一个变量(注册表)放入全局范围.在DI情况下,我们将注册表对象传递给每个类,将参数数量减少到1.

就个人而言,我使用后一种方法,因为许多文章主张使用全局变量,但我遇到了两个问题.首先,注册表类将包含大量的递归.例如,注册表类将包含数据库类所需的数据库登录变量.因此,我们需要将注册表类注入数据库.但是,许多其他类将需要该数据库,因此需要将数据库添加到注册表中,创建一个循环.现代语言可以处理这个问题还是会导致巨大的性能问题?请注意,全局注册表不会受此影响,因为它没有传递给任何东西.

其次,我将开始将大量数据传递给不需要它的对象.我的数据库不关心我的路由器,但路由器将与数据库连接详细信息一起传递到数据库.这通过递归问题变得更糟,因为如果路由器具有注册表,则注册表具有数据库和注册表并且注册表被传递到数据库,然后数据库通过路由器传递给自己(即我可以$this->registry->router->registry->database从在数据库类里面`).

此外,除了更复杂之外,我没有看到DI给了我什么.我必须将一个额外的变量传递给每个对象,我必须使用注册表对象$this->registry->object->method()而不是$registry->object->method().现在这显然不是一个大问题,但如果它没有给我任何关于全球方法的东西,它似乎是不必要的.

显然,当我在没有注册表的情况下使用DI时,这些问题不存在,但是我必须"手动"传递每个对象,导致类构造函数具有荒谬的参数数量.

鉴于这两个版本的DI存在这些问题,是不是全球注册表优越?通过在DI上使用全球注册表,我失去了什么?

在讨论DI vs Globals时经常提到的一件事是全局变量会抑制你正确测试程序的能力.全局变量究竟是如何阻止我测试DI不会的程序?我在很多地方都读到这是因为全局可以从任何地方改变,因此难以模仿.但是,在我看来,至少在PHP中,对象是通过引用传递的,更改某个类中的注入对象也会在注入它的任何其他类中更改它.

php registry dependency-injection global-variables

16
推荐指数
2
解决办法
2209
查看次数

向表中添加新列时,是应该创建新迁移还是编辑旧迁移?

如果我创建一个表rails generate migration,我可以稍后通过创建一个新的迁移添加一个额外的列.我还可以回滚原始迁移,然后编辑它以包含额外列.

方法1:新迁移

//Create the model including the migration
$ rails generate model Foo bar:string

//Perform the migration
$ rake db:migrate

//Create the add column migration
$ rails generate migration add_foobar_to_foos foobar:string

//Perform the new migration
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)

方法2:回滚

//Create the model including the migration
$ rails generate model Foo bar:string

//Perform the migration
$ rake db:migrate

//Rollback the migration
$ rake db:rollback

//Edit the original migration file

//Perform the new migration
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)

完成此任务的正确/最佳方法是什么?为什么?

migration ruby-on-rails-3

11
推荐指数
1
解决办法
8774
查看次数

如何从我的主干变为分支?

我刚开始使用Git并发现当我在分支中实现一个功能时,我会遇到一些真正需要尽快推送到主干的bug.为了做到这一点,我使用checkout切换回trunk,进行更改并提交它们.我现在有一个没有bug的主干.

不幸的是,我的分支也需要修复此错误.由于功能不完整,我不能将分支合并回主干.如何更改我的分支以便它接收我对主干所做的更改?

如果重要的话,我正在自行开发,因此只需要担心一个存储库.

我正在使用TortoiseGit,因此特定于此的说明将有所帮助,但不是必需的.

git dvcs tortoisegit

9
推荐指数
1
解决办法
1万
查看次数

打印到stderr时检查fprintf时出错

根据文档,fprintf可能会失败,并会在失败时返回负数.显然有很多情况下检查这个值是有用的.

但是,我通常使用fprintf将错误消息打印到stderr.我的代码通常看起来像这样:

rc = foo();
if(rc) {
  fprintf(stderr, "An error occured\n");
  //Sometimes stuff will need to be cleaned up here
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

在这些情况下,fprintf仍然可能失败吗?如果是这样,有什么方法可以用来以某种方式显示错误消息,或者是否有更可靠的替代fprintf?

如果没有,是否需要检查fprintf以何种方式使用?

c

9
推荐指数
2
解决办法
2万
查看次数