私はSinatraを使用しており、いくつかのスタイルシートをロードしようとしています。link
erbで通常のhtmlタグだけを試しましたが、うまくいきませんでした。
私はもう試した
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
私が使用しているURLの問題ではありませんが、これを実現するための特別な方法はありますか?
私はSinatraを使用しており、いくつかのスタイルシートをロードしようとしています。link
erbで通常のhtmlタグだけを試しましたが、うまくいきませんでした。
私はもう試した
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
私が使用しているURLの問題ではありませんが、これを実現するための特別な方法はありますか?
を使用する場合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"
(文字に注意してください/
)。これにより、ブラウザは常にサーバーのルートでスタイルシートを探すようになります。
これは、アプリケーションが常にサーバーのルートにマウントされていることを前提としており、サブディレクトリで実行すると失敗します。「このアプリケーションのルートにあるスタイルシートを探してください」と言うことができるようにしたいと考えています。url
Sinatra では、ヘルパー メソッドを使用してこれを行うことができます。ERB をテンプレート言語として使用すると、次のようになります。
<link href="<%= url('/style.css') %>" rel="stylesheet" type="text/css" />
これにより、アプリがどこにあってもリンクstyle.css
が正しくなります。