How to override CSS in Laravel? - php

I'm making a website using Laravel and I'm happy with the standard CSS of it in the app.css file. However for one page I'd like to change the font size. Is there a way to import both the app.css and a customized CSS, so that the latter overrides the app.css? Or is there an easier way to do this? I want to change the style of text in tables, so I thought I had to use CSS for that. It's pretty much impossible to edit the app.css file because it's minimalized and I can't understand it.
Thanks in advance!

Put them in public folder and call it in the view with something like
<link href="{{ asset('css/mystyle.css') }}" rel="stylesheet">. Make sure You put it after <link href="{{ asset('css/app.css') }}" rel="stylesheet">

Create a new stylesheet in public/css/style.css
Include it into your blade template just like
<link href="{{ asset('css/style.css') }}" rel="stylesheet">

Related

Laravel 8 asset helpers not working in my new project

so I created a new laravel project and use npm run dev to generate my css file inside public folder.
like my last project i tried to load my CSS like this
<link href="{{ URL::asset('/css/app.css') }}" rel="stylesheet" type="text/css">
but that doesn't work. my folder structure is like this
public
css
app.css
I checked a lot of posts but non of them worked. the only way to load the file is like this
<link href="{{ mix('/css/app.css') }}" rel="stylesheet" type="text/css" >
or
<link href="/css/app.css" rel="stylesheet" type="text/css" >
my question is why asset helper don't work ?
i tried changing the url, changing env 'ASSET_URL', etc
I know this is a really elementary issue, but this question are making me crazy,
btw my last project laravel version was 7 but this one version is 8
Use proper path in laravel asset() helper function.
asset() helper function access from app/public directory.
<link href="{{ asset('css/app.css') }}" rel="stylesheet" type="text/css">

Laravel #extends('layouts.app') not working on some pages

#extends('layouts.app')
does not work on some of my web pages. it just shows the content without the layout. why is this happening?
I already tried making a new layout folder and calling it but still some pages still doesn't show the layout.
both show.blade.php and create.blade.php doesn't display the layout
it only shows like this
app.blade.php
this is the navbar.blade.php
Your CSS file maybe not loading properly.
change your app.blade.php file like below,
<link rel="stylesheet" href= "/css/app.css" >
you might what to try this:
<link rel="stylesheet" href="{{ asset('css/app.css') }}" />
In my case this fixed it (had to add public):
href="{{ asset('public/css/app.css')
If your style css not working on every page, try adding it with the asset helper;
This help me to solve exactly the same problem. You can find in Laravel Docs. ;
https://laravel.com/docs/8.x/helpers#method-asset

CSS doesn't work with long link in laravel

I have a interesting trouble, in my view I have:
<base href="{{asset('')}}" />
<link href="ad/bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
that my css's link , it was long but it still worked a month ago, but now it doesn't work, and I try :
<link href="{{ URL::asset('ad/bower_components/bootstrap/dist/css/bootstrap.min.css') }}" rel="stylesheet">
too, but it haven't worked yet,
but when I try a shorter link, it works normally, so why?
<link href="{{asset('link_to_css_file_in_public_folder')}}" rel="stylesheet" >
That should work.
Ps: put this code in your layouts->app.blade.php or any other layout you use.
in case you want to load separate css file in different pages in your layout call this #yield('styles') and then in your blade import your css file like my sample above inside
#section('styles')
your_code
#endsection
<link rel="stylesheet" href="{{URL::to('/')}}/asset/ad/bower_components/bootstrap/dist/css/bootstrap.min.css">
is your asset folder in public folder or not?..if it then it works

Symfony KNP Snappy Bundle: PDF does not load css file

I'm using the knp-snappy-bundle to generate PDF's out of twig.
But my css files are not loading.
I tried it with static url, with absolute url and with only asset url, noting works, but these are the normal css files which I also use when display for example in my edit form. Here are the three options I tried in my pdf.html.twig file
// STATIC DOES NOT WORK
<link rel="stylesheet" href="https://localhost/test/boot.css">
// ASSET DOES NOT WORK
<link rel="stylesheet" href="{{ asset('test/boot.css') }}">
// ABSOLUTE DOES NOT WORK
<link rel="stylesheet" href="{{ absolute_url(asset('test/boot.css')) }}">
Always get this: Warning: Failed to load https://localhost/test/boot.css (ignore)
I presume you are using wkhtmltopdf, in that case you need to use the absolute path to the css file. Not sure what the path is to your web folder, but something like this:
<link rel="stylesheet" href="/var/www/html/Symfony/test/boot.css">
I had this same problem with wkhtmltopdf and had to hard code it like that.
pdf.html.twig file do not extend with another file. Try this code, it works
<link href="{{ app.request.scheme ~'://' ~ app.request.httpHost ~ asset('test/boot.css') }}" rel="stylesheet"/>
As soon as we're in Symfony you could try in TWIG like the following
{% stylesheets
'test/boot.css'
filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}"/>
{% endstylesheets %}
Your css file should be reside in your Symfony application web/test directory. Check availability in browser
http://localhost/test/boot.css
Should work

Using CSS in Laravel views?

I've just began learning Laravel, and can do the basics of a controller and routing.
My OS is Mac OS X Lion, and it's on a MAMP server.
My code from routes.php:
Route::get('/', function() {
return View::make('home.index');
});
Route::get('businesses', function() {
return View::make('businesses.index');
});
Route::get('testing', function() {
return View::make('testing.index');
});
Route::get('hello', function() {
return "<h3>Hello world!</H3>";
});
That works, the views display perfectly, ''however'' what I want to try and do is include CSS within the views, I tried adding in a link to a stylesheet within the directory but the page displayed it as the default browser font even though the css was in the HTML!
This is index.php from businesses within the views folder:
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>
<p>Business is a varied term. My content here.
I tried using the Blade template engine in my other views folder (testing) to display CSS but again the CSS did not show despite it being in the testing folder!
How can I overcome this problem, and get better - as I'm slowly learning this framework.
Put your assets in the public folder; e.g.:
public/css
public/images
public/fonts
public/js
And then, to access them using Laravel, use:
{{ HTML::script('js/scrollTo.js'); }}
{{ HTML::style('css/css.css'); }}
Or:
{{ URL::asset('js/scrollTo.js'); }}
{{ URL::asset('css/css.css'); }}
This syntax will automatically generate the correct path (e.g., `public/js/scrollTo.js').
your css file belongs into the public folder or a subfolder of it.
f.e if you put your css in
public/css/common.css
you would use
HTML::style('css/common.css');
In your blade view...
Or you could also use the Asset class http://laravel.com/docs/views/assets...
You can also write a simple link tag as you normaly would and then on the href attr use:
<link rel="stylesheet" href="<?php echo asset('css/common.css')?>" type="text/css">
of course you need to put your css file under public/css
We can do this by the following way.
<link href="{{ asset('/css/style.css') }}" rel="stylesheet">
{{ HTML::style('css/style.css', array('media' => 'print')) }}
It will search the style file in the public folder of Laravel and then will render it.
Like Ahmad Sharif mentioned, you can link stylesheet over http
<link href="{{ asset('/css/style.css') }}" rel="stylesheet">
but if you are using https then the request will be blocked and a mixed content error will come, to use it over https use secure_asset like
<link href="{{ secure_asset('/css/style.css') }}" rel="stylesheet">
https://laravel.com/docs/5.1/helpers#method-secure-asset
Since Laravel 5 the HTML class is not included by default anymore.
If you're using Form or HTML helpers, you will see an error stating class 'Form' not found or class 'Html' not found. The Form and HTML helpers have been deprecated in Laravel 5.0; however, there are community-driven replacements such as those maintained by the Laravel Collective.
You can make use of the following line to include your CSS or JS files:
<link href="{{ URL::asset('css/base.css') }}" rel="stylesheet">
<link href="{{ URL::asset('js/project.js') }}" rel="script">
You can simply put all the files in its specified folder in public like
public/css
public/js
public/images
Then just call the files as in normal html like
<link href="css/file.css" rel="stylesheet" type="text/css">
It works just fine in any version of Laravel
Update for laravel 5.4 ----
All answers have have used the HTML class for laravel but I guess it has been depreciated now in laravel 5.4, so
Put your css and js files in public->css/js
And reference them in your html using
<link href="css/css.common.css" rel="stylesheet" >
To my opinion the best option to route to css & js use the following code:
<link rel="stylesheet" type="text/css" href="{{ URL::to('route/to/css') }}">
So if you have css file called main.css inside of css folder in public folder it should be the following:
<link rel="stylesheet" type="text/css" href="{{ URL::to('css/main.css') }}">
That is not possible bro, Laravel assumes everything is in public folder.
So my suggestion is:
Go to the public folder.
Create a folder, preferably named css.
Create the folder for the respective views to make things organized.
Put the respective css inside of those folders, that would be easier for you.
Or
If you really insist to put css inside of views folder, you could try creating Symlink (you're mac so it's ok, but for windows, this will only work for Vista, Server 2008 or greater) from your css folder directory to the public folder and you can use {{HTML::style('your_view_folder/myStyle.css')}} inside of your view files, here's a code for your convenience, in the code you posted, put these before the return View::make():
$css_file = 'myStyle.css';
$folder_name = 'your_view_folder';
$view_path = app_path() . '/views/' . $folder_name . '/' . $css_file;
$public_css_path = public_path() . '/' . $folder_name;
if(file_exists($public_css_path)) exec('rm -rf ' . $public_css_path);
exec('mkdir ' . $public_css_path);
exec('ln -s ' . $view_path .' ' . $public_css_path . '/' . $css_file);
If you really want to try doing your idea, try this:
<link rel="stylesheet" href="<?php echo app_path() . 'views/your_view_folder/myStyle.css'?>" type="text/css">
But it won't work even if the file directory is correct because Laravel won't do that for security purposes, Laravel loves you that much.
put your css File in public folder . (public/css/bootstrap-responsive.css)
and <link href="./css/bootstrap-responsive.css" rel="stylesheet">
Copy the css or js file that you want to include, to public folder or you may want to store those in public/css or public/js folders.
Eg. you are using style.css file from css folder in public directory then you can use
<link rel="stylesheet" href="{{ url() }}./css/style.css" type="text/css"/>
But in Laravel 5.2 you will have to use
<link rel="stylesheet" href="{{ url('/') }}./css/style.css" type="text/css"/>
and if you want to include javascript files from public/js folder, it's fairly simple too
<script src="{{ url() }}./js/jquery.min.js"></script>
and in Laravel 5.2 you wll have to use
<script src="{{ url('/') }}./js/jquery.min.js"></script>
the function url() is a laravel helper function which will generate fully qualified URL to given path.
Put them in public folder and call it in the view with something like href="{{ asset('public/css/style.css') }}". Note that the public should be included when you call the assets.
put your css in public folder, then
add this in you blade file
<link rel="stylesheet" type="text/css" href="{{ asset('mystyle.css') }}">
Use {!! in new laravel
{!! asset('js/app.min.js') !!}
<script type="text/javascript" src="{!! asset('js/app.min.js') !!}"></script>
For Laravel 5.4 and if you are using mix helper, use
<link href="{{ mix('/css/app.css') }}" rel="stylesheet">
<script src="{{ mix('/js/app.js') }}"></script>
For those who need to keep js/css out of public folder for whatever reasons, in modern Laravel you can use sub-views. Say your views structure is
views
view1.blade.php
view1-css.blade.php
view1-js1.blade.php
view1-js2.blade.php
in view1 add
#include('view1-css')
#include('view1-js1')
#include('view1-js2')
in views-js.blade.php files wrap your js code in <script> tag
in views-css.blade.php wrap your styles in <style> tag
That will tell Laravel, and your code editor, that those are in fact js and css files. You can do the same with additional HTML, SVGs and other stuff that is browser-renderable

Categories