I am using rails 3.2 and i have to set a background for one of the page and i have tried many ways and nothing went right, so looking for some good help. I have tried
For sass (scss) this code works with the following image path
app/assets/images/pictureTitle.png
body {
background-image: image-url('pictureTitle.png');
}
You might also need to restart your rails server.
I struggled with this for an entire day. Finally I got it working in both development and production by coding the css in the view that holds the background image:
<head>
<style>
#tile {
background: url(<%= asset_path 'background.jpg' %>);
background-size: cover;
}
</style>
</head>
Then on the sheet itself I created a div with id=tile like this:
<div id=tile>
<div class=row>
...added more stuff
</div>
</div>
Ruby 2.3.7 Rails 5.2.0
It seems that double quotes work.
Here is my example:
body {
background-image: url("sunset");
}
And the sunset jpeg is located in my assets folder.
The problem could be more deeply ingrained than you think. It most likely is not a Rails asset problem as many presume, but 'miscommunication' between your html elements. Here's why:
First of all, fool proof your code by puting the backgound image in the body
element.
body {
background: url('pic-name.jpg') no-repeat center center;
background-size: cover;} /* For a full size background image */
Once you realize that the console doesn't give a 404 anymore, confirm the image actually loads with this:
http://localhost:3000/assets/pic-name.jpg
body
element is hiding something - when you put the image in the body
, it works, when you put it in another element, it works not.This is the trick; in that other
element where you want the background image, mine was header
, insert some text or some lines, Yes, just plain text or something! Mine was:
<header>
<%= render 'shared/navbar' %> # To have the nav's backgrond as the image
<div class="container">
<div class="text-center">
<h2><strong>Nairobi</strong></h2> <hr>
<h2><strong>Is</strong></h2> <hr>
<h2><strong>Just a Beula Land</strong></h2> <hr>
</div>
</div>
And alas, it worked! Though it didn't show the full image, just the upper part. But at least I knew it worked.
Hope this helps someone.
And along with this I realised that it was not that easy to place the background image to cover the nav
as well, esp if using bootstrap; both the nav
and your other element need to be children
of the same parent element
, eg, mine was the header
as shown above, and you'll also have to render the nav inside your, say, homepage.html.erb
, and every other page, as opposed to just rendering it on the application.html.erb
Update
Okay, this is what I did to show the full background image without inserting texts here and there. In my application.scss
, where you have your css, I simply added the height property, like so
body {
background: url('pic-name.jpg') no-repeat center center;
background-size: cover;
height: 600px;}
N.B: Using height: 100%
didn't work.
I followed the suggestions above (Thank you!) - just in case it doesn't work for others either - this solution worked for me:
.myClass {
background: image-url('myPicture.png');
}
so instead of "background-image" I had to use "background" in my scss.
Ok, hope this helps someone!! I was in a similar situation recently looking to implement an image for a theme. This solution worked for me in a home_page_header.html.erb file provided that you have an image called blog_image.jpeg in your app/assets/images folder:
<!-- Page Header -->
<header class='masthead' style='background-image: url(assets/blog_image.jpeg)'>
<div class='container'>
<div class='row'>
<div class='col-lg-8 col-md-10 mx-auto'>
<div class='site-heading'>
<h1>Omega</h1>
<span class='subheading'>Sample text</span>
</div>
</div>
</div>
</div>
</header>