Im unable to successfully get masonry working for my Magento 2.0 theme. What i have done currently is i added the link to Masonry cdn to my file default_head_blocks.xml and also called the function from one of my CMS pages. But no luck, nothing works.
Here is my default_head_blocks.xml
 <?xml version="1.0"?>
<!--
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
 <head>
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"/>
 <css src="css/styles-m.css" />
 <css src="css/styles-l.css" media="screen and (min-width: 768px)"/>
 <css src="css/print.css" media="print" />
 <link src="https://fonts.googleapis.com/css?family=Roboto:400,300" src_type="url" /> 
 <link src="https://npmcdn.com/[email protected]/dist/masonry.pkgd.min.js" src_type="url" /> 
 </head>
</page>
Here is CMS page content
 <div class="grid">
 <div class="grid-item">Grid 1</div>
 <div class="grid-item grid-item--width2"> Grid 2</div>
 <div class="grid-item">Grid 3</div>
</div>
<script>
$(function(){
 var $container = $('. grid');
 $container.imagesLoaded( function(){
 $container.masonry({
 itemSelector : '.grid-item'
 });
 });
 });
</script>
 2 Answers 2
Utilize require-js to load masonry. On the website it is stated how it works. For Magento2:
- load the 
masonry.jsinto your themesweb/js-folder. Register in require-js:
var config = { map: { '*': { 'masonry' : 'js/masonry' } }, "shim": { "masonry": ['jquery', 'jquery/ui'], } };put the code in your
list.phtmlrequirejs( [ 'require', 'jquery', 'masonry' ], function( require, ,ドル Masonry ) { // require jquery-bridget, it's included in masonry.pkgd.js require( [ 'jquery-bridget/jquery-bridget' ], function( jQueryBridget ) { // make Masonry a jQuery plugin jQueryBridget( 'masonry', Masonry, $ ); // now you can use $().masonry() $('.grid').masonry({ // your settings }); } ); });
You should try to use script tag to include your external js in layout
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
 .......
 <script src="https://npmcdn.com/[email protected]/dist/masonry.pkgd.min.js" src_type="url" /> 
</head>
 
<head><link src="https://npmcdn.com/[email protected]/dist/masonry.pkgd.min.js" src_type="url" /> </head>for external js follow this magento.stackexchange.com/questions/98091/…