如何在我的Rails项目中手动包含twitter bootstrap(不使用任何gem)?
我正在学习Rails并希望使用Rails和Twitter Bootstrap。 我的Rails项目布局是:
├─assets │ ├─images │ ├─javascripts │ └─stylesheets ├─controllers ├─helpers ├─mailers ├─models └─views ├─course └─layouts
Twitter Bootstrap布局是:
├─css ├─img └─js
我知道Bootstrap css文件引用了它的图像文件,例如:
[class*=" icon-"] { display: inline-block; width: 14px; height: 14px; *margin-right: .3em; line-height: 14px; vertical-align: text-top; background-image: url("../img/glyphicons-halflings.png"); background-position: 14px 14px; background-repeat: no-repeat; margin-top: 1px; }
所以他们必须保留相对位置,否则我必须更改CSS文件。 我想知道,如果我不想使用任何Bootstrap相关的gem,那么将这些Bootstrap文件放入我的Rails项目的最佳方法是什么? 谢谢。
首先,您应该将Bootstrap源文件移动到Rails应用程序的assets文件夹中的相应位置 – 即stylesheets
文件夹中的CSS文件, javascripts
JS和图像中的images
。
如前所述,您需要在Bootstrap的CSS中更改图像路径。 但是,如果您计划在生产中使用您的应用程序,则需要使用Rails的资产路径帮助程序。
例如, background-image: url('../images/glyphicons-halflings.png');
使用资产管道时绝对不正确。 这在开发中可以正常工作,但是一旦你为生产环境预编译资产就不会有用–Rails会将指纹附加到资产文件名以用于缓存目的,这会使上面的URL不正确。
资产管道的Rails指南中概述了在资产中编码路径的正确方法。 如果您只使用CSS,则应将.erb
扩展名添加到您的文件名中(以获取bootstrap.css.erb
)并执行以下操作:
background-image: url(<%= asset_path 'glyphicons-halflings.png' %>);
如果您使用的是SASS / SCSS,还可以使用内置的asset-path
或image-path
帮助程序。 同样,我在上面链接的指南中提到了这一点。
最后,您可能应该使用gem,因为这项工作已经为您完成。 但是,如果必须,这应该足够好。 当然,如果您想要更新Bootstrap,则必须再次执行此操作。
我遇到了同样的麻烦,并且不想安装gem等。
有一个更容易的解决方案。
只需覆盖自定义CSS中背景图像的图标选择器。
[class^="icon-"], [class*=" icon-"] { background-image: url("/assets/img/glyphicons-halflings.png"); } [class^="icon-white"], [class*=" icon-white"] { background-image: url("/assets/img/glyphicons-halflings-white.png"); }
将glyphicons PNG放在app / assets / images / img /(或任何你想要的地方),你就完成了。
您必须将每个Glyphicons图标更改为资源路径。 这是很多工作。 此外,您必须使用LESS,因此使用rails的最简单的使用bootstrap的方法是使用gem。 这是gem,我使用gem’twitter-bootstrap-rails’这个gem也包括字体真棒所以检查这个
重定向routes.rb
调用
get '/img/:name', to: redirect {|params, req| "/assets/#{params[:name]}.#{params[:format]}" }
这会将/img
调用重定向到/assets
您可以将css和js文件放在项目中的任何位置,因为它们不会相互引用,但是,您必须更新css文件中的glypicon引用。
在你的情况下:
background-image: url("../images/glyphicons-halflings.png");
编辑:我更新了路径。 我最初包含的“资产”与您给定的目录结构不一致。