zoukankan      html  css  js  c++  java
  • Ruby Rails学习中:网站导航,Bootstrap和自定义的CSS,局部视图

    添加一些结构

    一.网站导航

    1.添加一些结构后的网站布局文件

    打开文件:app/views/layouts/application.html.erb

    简单介绍一下,添加的代码:

    我们从上往下看一下这段代码中新添加的元素。前面简单介绍过,Rails 默认使用 HTML5(如文档类型声明 <!DOCTYPE html> 所示)。因为 HTML5 标准还很新,
    有些浏览器(特别是旧版 Internet Explorer)还没有完全支持,所以我们加载了一些 JavaScript 代码(称作 HTML5 shim(或 shiv)) 3 来解决这个问题:
    <!--[if lt IE 9]>
      <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/r29/html5.min.js">
      </script>
    <![endif]-->
    这段有点古怪的句法,只有当 IE 浏览器的版本号小于9时( if lt IE 9 )才会加载其中的代码。 <!--[if ltIE 9]> 这个奇怪的句法不是 Rails 提供的,其实
    它是 IE 浏览器为了解决兼容性问题而特别提供的。使用这个句法的好处是,只会在 IE9 以前的版本中加载 HTML5 shim,而 Firefox、Chrome 和 Safari 等其
    他浏览器不受影响。-->
    
    后面的区域是一个 header 元素,包含网站的徽标(纯文本)、一些区域(使用 div 标签)和一个导航列表元素:
    <header class="navbar navbar-fixed-top navbar-inverse">
      <div class="container">
        <%= link_to "sample app", '#', id: "logo" %>
        <nav>
          <ul class="nav navbar-nav navbar-right">
            <li><%= link_to "Home", '#' %></li>
            <li><%= link_to "Help", '#' %></li>
            <li><%= link_to "Log in", '#' %></li>
          </ul>
        </nav>
      </div>
    </header>
    header 标签表明这个元素应该放在页面的顶部。我们为 header 标签指定了三个 CSS 类, 分别为 navbar 、navbar-fixed-top 和 navbar-inverse ,类之间
    用空格分开:
    <header class="navbar navbar-fixed-top navbar-inverse">
    所有 HTML 元素都可以指定类和 ID,它们不仅仅是标注,使用 CSS 编写样式时也有用。类和ID之间的主要区别是,类可以在同一个网页中多次使用,而 ID 只能使用一次。
    这里的三个类在 Bootstrap 框架中都有特殊的意义。我们会在下面安装并使用 Bootstrap。
    
    在 header 标签中,有一个 div 标签:
    <div class="container">
    div 标签标识常规的区域,除了把文档分成不同的部分之外,没有特殊的意义。在以前的 HTML 标准中, div标签用于划分网站中几乎所有的区域,但是 HTML5 增加了 
    header 、 nav 和 section 等元素,用于划分大多数网站中都会用到的区域。这个 div 标签也有一个 CSS 类, container 。与 header 标签的类一样,这个类在
    Bootstrap 中也有特殊意义。
    
    在这个 div 标签中有一些 ERb 代码:
    <%= link_to "sample app", '#', id: "logo" %>
      <nav>
      <ul class="nav navbar-nav navbar-right">
        <li><%= link_to "Home", '#' %></li>
        <li><%= link_to "Help",'#' %></li>
        <li><%= link_to "Log in", '#' %></li>
      </ul>
    </nav>
    这里使用 Rails 提供的 link_to 辅助方法创建链接(前面是直接使用 a 标签创建的)。 link_to 的第一个参数是链接文本,第二个参数是 URL。5.3.3 节会使用具名
    路由(named route)指定 URL,现在暂且使用 Web开发中经常使用的占位符 # 。第三个参数可选,是一个散列,本例使用这个参数为徽标添加一个 CSSID—— logo 。(其
    他三个链接没有使用这个散列参数,没关系,因为这个参数是可选的。)Rails 辅助方法的参数经常这样使用散列,让我们仅使用 Rails 的辅助方法就能灵活添加 HTML 属性。
    
    div 标签中的第二个元素是导航链接,使用无序列表标签 ul ,以及列表项目标签 li 编写:
    <nav>
      <ul class="nav navbar-nav navbar-right">
        <li><%= link_to "Home", '#' %></li>
        <li><%= link_to "Help", '#' %></li>
        <li><%= link_to "Log in", '#' %></li>
      </ul>
    </nav>
    <nav> 标签以前是不需要的,它的目的是明确表明这些链接是导航。 ul 标签中的 nav 、 navbar-nav 和 navbar-right 三个类在 Bootstrap 中有特殊的意义,下面
    将引入 Bootstrap CSS 之后会自动实现特殊的样式。在浏览器中审查导航元素,你会发现 Rails 处理布局文件并执行其中的 ERb 代码后,生成的列表如下所示: 
    <nav>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Home</a></li>
        <li><a href="#">Help</a></li>
        <li><a href="#">Log in</a></li>
      </ul>
    </nav>
    这就是返回给浏览器的文本。
    
    布局文件的最后一部分是一个 div 标签,标识主内容区域:
    <div class="container">
      <%= yield %>
    </div>
    与之前一样, container 类在 Bootstrap 中有特殊意义。3.4.3 节已经介绍过, yield 会把各个页面中的内容插入网站的布局中。除了留到下面的内容添加的网站页脚之
    外,布局现在完成了。访问“首页”就能看到结果。为了利用后面添加的样式,我们要在 home.html.erb 视图中添加一些元素,如下代码所示:
    简单介绍

    2.我们要在 home.html.erb 视图中添加一些元素, 如下所示:

    打开文件:app/views/static_pages/home.html.erb(“首页”视图,包含一个指向注册页面的链接)

    简单介绍一下,添加的代码:

    其中第一个 link_to 创建一个占位链接,指向第 7 章创建的用户注册页面:
    <a href="#" class="btn btn-lg btn-primary">Sign up now!</a>
    div 标签的 CSS 类 jumbotron 在 Bootstrap 中有特殊的意义,注册按钮的 btn 、btn-lg 和 btn-primary 也是一样。
    第二个 link_to 用到了 image_tag 辅助方法,它的第一个参数是图像的路径;第二个参数可选,是一个散列,本例中这个散列参数使用一个符号键设置图像的 alt 属性。为了
    能正确显示图像,应用中必须有个名为rails.png 的图像。这个图像随便找找,怼上。后面不好看的话再换也一样。然后把这个图片放到app/assets/images/ 目录中。
    因为我们在上面的代码中使用了 image_tag 辅助方法,Rails 会通过 Asset Pipeline自动找到 app/assets/images/ 目录中的任何图像。
    简单介绍

    然后,来瞧一瞧页面吧:

    注:不得不说页面真的是丑陋无比,不过我也懒得改了,先这样吧,忍着。

    3.更好的理解image_tag

    我们在浏览器中审查那个图像,看一下生成的 HTML:

    <img alt="Rails logo" src="/assets/rails-88ddc9b4a116e8a8525f8c29ed8f8a89f2e93c78e07b932b04e2a65794e6c34f.png">

    其中,字符串rails-88ddc9b4a116e8a8525f8c29ed8f8a89f2e93c78e07b932b04e2a65794e6c34f(你看到的可能不一样)由 Rails 添加,目的是确保文件名的唯一性,如果文件变化了,让浏览器重新加载文件(而不是从浏览器缓存中读取)。注意, src 属性中并不包含 images ,而是静态文件(图像、JavaScript、CSS 等)共用的 assets 目录。在服务器中,Rails 会把assets 目录中的图像和 app/assets/images 目录中的文件对应起来。这么做是为了让浏览器觉得所有静态文件都在同一个目录中,有利于快速伺服。 alt 属性的内容会在图像无法加载时显示,例如在针对视觉障碍人士的屏幕阅读器中。

    二.Bootstrap 和自定义的 CSS

    1.安装Bootstrap 

    把 bootstrap-sass gem 添加到 Gemfile 文件中:

    $ bundle install

    rails generate 命令会自动为控制器生成一个单独的 CSS 文件, 但很难使用正确的顺序引入这些样式, 所以简单起见, 本书会把所有 CSS 都放在一个文件中。为此, 我们要先新建这个 CSS 文件:

    $ touch app/assets/stylesheets/custom.scss

    注:app/assets/stylesheets/ 目录是 Asset Pipeline 的一部分, 其中所有的样式表都会引入 application.css 文件。文件名 custom.scss 中包含 .scss 扩展名, 说明这是“Sassy CSS”文件, Asset Pipeline 会使用 Sass 处理其中的内容。

    在这个 CSS 文件中,我们可以使用 @import 函数引入 Bootstrap,如下所示:

    2.导入 Bootstrap 中的 CSS

    打开文件:app/assets/stylesheets/custom.scss

    这两行代码会引入整个 Bootstrap CSS 框架。然后,重启 Web 服务器(先按 Ctrl-C 键,然后执行 rails server 命令), 让这些改动生效,效果如下图所示。文本的位置还不合适, 徽标也没有任何样式, 不过颜色搭配和注册按钮看起来都不错。

    然后查看页面,如果报错,就更改Gemfile:

    记得重启服务然后页面,就出来了:

    注:是不是也是丑的一匹,嫌丑自己改改,我是懒得改了

    3. 添加全站使用的 CSS

    打开文件:app/assets/stylesheets/custom.scss

    注:CSS的具体作用,请自行百度:https://www.baidu.com/

    注:丑的令人心痛!!!

    4.添加一些精美的文字排版样式

    打开文件:app/assets/stylesheets/custom.scss

    注:CSS的具体作用,请自行百度:https://www.baidu.com/

    注:我没守住底线,我竟然改页面了(字太少, 没办法凸显文字排版后的样式, 这不是解释, 这是迫不得已, 记住了, 我是迫不得已才改的页面, 迫不得已, 迫不得已, 迫不得已...重要的事情说三遍)

    5.添加网站徽标的样式

    打开文件:app/assets/stylesheets/custom.scss

     注:CSS的具体作用,请自行百度:https://www.baidu.com/

    注:看徽标,看徽标,主页左上角

    6.隐藏图像的 CSS

     注:CSS的具体作用,请自行百度:https://www.baidu.com/

    注:图片消失了,记得看一下网站的HTML代码,其实图片还存在,只是被隐藏掉了(F12快捷键:打开网站代码检查)

    三.局部视图

    虽然在1.(1)小节中的布局达到了目的, 但其中的内容看起来有点混乱。HTML shim 就占了三行, 而且使用了只针对 IE 的奇怪句法, 如果能把它打包放在一个单独的地方就好了。此外, 页头的 HTML 自成一个逻辑单元, 也可以把这部分打包放在某个地方。在 Rails 中我们可以使用局部视图(partial)实现这种想法

    1.把 HTML shim 和页头放到局部视图中之后的网站布局

    打开文件:app/views/layouts/application.html.erb

    在这段代码中,我们把 HTML shim 删掉,换成了一行代码,调用 Rails 的辅助方法 render :
    <%= render 'layouts/shim' %>
    这行代码会寻找一个名为 app/views/layouts/_shim.html.erb 的文件,执行其中的代码,然后把结果插入视图。(回顾一下,执行 Ruby 表达式并将结果插入模板中要使用 <%= ... %> 。)
    注意,文件名_shim.html.erb 的开头有个下划线,这是局部视图的命名约定,以便在目录中快速定位所有局部视图。
    当然,若要局部视图起作用,我们要写入相应的内容。HTML shim 局部视图只包含三行代码,如下代码所示:

    创建并打开文件:app/views/layouts/_shim.html.erb(HTML shim 局部视图)

    类似地,我们可以把页头移入局部视图,如下代码所示,然后再次调用 render 把这个局部视图插入布局中。

    创建并打开文件:app/views/layouts/_header.html.erb(网站页头的局部视图)

    2.加入与页头对应的页脚

    创建并打开文件:app/views/layouts/_footer.html.erb(页脚的局部视图)

    注:与页头类似,我们在页脚使用 link_to 创建指向“关于”页面和“联系”页面的链接,地址先使用占位符 # 。

    打开文件:app/views/layouts/application.html.erb(添加页脚局部视图后的网站布局)

    注:为了适应页面上的内容,改了个图片(嗯...这么看着就舒服多了...)

    3.添加网站页脚的 CSS

    打开文件:app/assets/stylesheets/custom.scss

    注:网站现在有点像样了啊

    4.把 Rails 在 head 元素中插入的标签替换成 render 调用

    。。。

    基本结构差不多就搞定了,翻篇说的别的

  • 相关阅读:
    sfs2x 连接 mongodb
    java websocket
    webstorm 4.0 注册码
    解决 sfs2 admin tool 找不到扩展
    window 注册表五大类
    opengl 学习第二日
    java google Protobuf
    扩展 java sencha touch PhonegapPlugin
    sencha touch2 kryonet socket phonegap 通信 作者:围城
    sencha touch2 layout 笔记
  • 原文地址:https://www.cnblogs.com/rixian/p/11687304.html
Copyright © 2011-2022 走看看