10

私はSinatraを使用しており、いくつかのスタイルシートをロードしようとしています。linkerbで通常のhtmlタグだけを試しましたが、うまくいきませんでした。

私はもう試した

<head>
  <link href="style.css" rel="stylesheet" type="text/css" />
</head>

私が使用しているURLの問題ではありませんが、これを実現するための特別な方法はありますか?

4

1 に答える 1

15

を使用する場合href="style.css"、スタイルシートへの相対リンクを指定しています。ブラウザーが要求する実際のパスは、現在のページの URL によって異なります。たとえば、次のようなルートがある場合:

get '/things/:id' do
  #look up thing with id = :id
  erb :my_view
end

次に、ブラウザは でスタイルシートを探します/things/style.css。スタイルシートがディレクトリの最上位にある場合、これは明らかに機能しませんpublic

簡単な解決策は、スタイルシートへの絶対パスを使用することです: href="/style.css"(文字に注意してください/)。これにより、ブラウザは常にサーバーのルートでスタイルシートを探すようになります。

これは、アプリケーションが常にサーバーのルートにマウントされていることを前提としており、サブディレクトリで実行すると失敗します。「このアプリケーションのルートにあるスタイルシートを探してください」と言うことができるようにしたいと考えています。urlSinatra では、ヘルパー メソッドを使用してこれを行うことができます。ERB をテンプレート言語として使用すると、次のようになります。

<link href="<%= url('/style.css') %>" rel="stylesheet" type="text/css" />

これにより、アプリがどこにあってもリンクstyle.cssが正しくなります。

于 2012-09-09T17:33:56.160 に答える