{"id":1445,"date":"2017-09-23T21:55:19","date_gmt":"2017-09-23T21:55:19","guid":{"rendered":"http:\/\/inchoo.net\/?p=29489"},"modified":"2017-09-23T23:08:46","modified_gmt":"2017-09-23T23:08:46","slug":"moreless-functionality-in-magento2","status":"publish","type":"post","link":"https:\/\/www.sushilkumar.ind.in\/blog\/magento-2\/moreless-functionality-in-magento2\/","title":{"rendered":"More\/Less functionality in Magento2"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>While working on a Magento 2 project for our client, I was supposed to create more\/less button, which is not part of neither Blank or Luma themes. The button should be on product page, but only inside of Details tab on desktop (accordion on mobile), which displays product description field in Admin.<\/p>\n<p>Before we get started, I have created a custom theme (Sushil\/MoreLess that is extending Blank theme), make sure to update the correct path for your theme as we go along. The code was written on latest (2.1.6) installation with sample data.<span id=\"more-29489\"><\/span><\/p>\n<p>First of all, we need to create several files:<\/p>\n<pre class=\"ish\"><code class=\"language-bash\"><span class=\"kw2\">touch<\/span> app<span class=\"sy0\">\/<\/span>design<span class=\"sy0\">\/<\/span>frontend<span class=\"sy0\">\/<\/span>Sushil<span class=\"sy0\">\/<\/span>MoreLess<span class=\"sy0\">\/<\/span>Magento_Catalog<span class=\"sy0\">\/<\/span>layout<span class=\"sy0\">\/<\/span>catalog_product_view.xml\r\n<span class=\"kw2\">touch<\/span> app<span class=\"sy0\">\/<\/span>design<span class=\"sy0\">\/<\/span>frontend<span class=\"sy0\">\/Sushil<\/span><span class=\"sy0\">\/<\/span>MoreLess<span class=\"sy0\">\/<\/span>requirejs-config.js\r\n<span class=\"kw2\">touch<\/span> app<span class=\"sy0\">\/<\/span>design<span class=\"sy0\">\/<\/span>frontend<span class=\"sy0\">\/Sushil<\/span><span class=\"sy0\">\/<\/span>MoreLess<span class=\"sy0\">\/<\/span>web<span class=\"sy0\">\/<\/span>js<span class=\"sy0\">\/<\/span>toggle-product-description.js\r\n<span class=\"kw2\">touch<\/span> app<span class=\"sy0\">\/<\/span>design<span class=\"sy0\">\/<\/span>frontend<span class=\"sy0\">\/Sushil<\/span><span class=\"sy0\">\/<\/span>MoreLess<span class=\"sy0\">\/<\/span>Magento_Catalog<span class=\"sy0\">\/<\/span>templates<span class=\"sy0\">\/<\/span>more-less.phtml\r\n<span class=\"kw2\">touch<\/span> app<span class=\"sy0\">\/<\/span>design<span class=\"sy0\">\/<\/span>frontend<span class=\"sy0\">\/Sushil<\/span><span class=\"sy0\">\/<\/span>MoreLess<span class=\"sy0\">\/<\/span>web<span class=\"sy0\">\/<\/span>css<span class=\"sy0\">\/<\/span>source<span class=\"sy0\">\/<\/span>_theme.less<\/code><\/pre>\n<p>Let\u2019s go over these files and explain for each one what code will be placed inside of them:<\/p>\n<h2>requirejs-config.js<\/h2>\n<p>Use this file to register your own JavaScript component:<\/p>\n<pre class=\"ish\"><code class=\"language-javascript\"><span class=\"kw1\">var<\/span> config <span class=\"sy0\">=<\/span> <span class=\"br0\">{<\/span> map<span class=\"sy0\">:<\/span> <span class=\"br0\">{<\/span> <span class=\"st0\">\"*\"<\/span><span class=\"sy0\">:<\/span> <span class=\"br0\">{<\/span> <span class=\"co1\">\/\/ alias: path-to-corresponding-js-file<\/span> toggleProductDescription<span class=\"sy0\">:<\/span> <span class=\"st0\">'js\/toggle-product-description'<\/span> <span class=\"br0\">}<\/span> <span class=\"br0\">}<\/span>\r\n<span class=\"br0\">}<\/span><span class=\"sy0\">;<\/span><\/code><\/pre>\n<ul>\n<li><em>toggleProductDescription<\/em> is arbitrary component alias that points to arbitrary location of a Javascript file (Magento will automatically append .js extension to the filename).<\/li>\n<\/ul>\n<h2>catalog_product_view.xml<\/h2>\n<p>This is main layout file for product page, I believe there is no need to explain its purpose. Inside of the <em>content<\/em>\u00a0 container, new block is created with specified template file that is going to used:<\/p>\n<pre class=\"ish\"><code class=\"language-xml\"><span class=\"sc3\"><span class=\"re1\">&lt;?xml<\/span> <span class=\"re0\">version<\/span>=<span class=\"st0\">\"1.0\"<\/span><span class=\"re2\">?&gt;<\/span><\/span>\r\n<span class=\"sc3\"><span class=\"re1\">&lt;page<\/span> <span class=\"re0\">xmlns:xsi<\/span>=<span class=\"st0\">\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/span> <span class=\"re0\">xsi:noNamespaceSchemaLocation<\/span>=<span class=\"st0\">\"urn:magento:framework:View\/Layout\/etc\/page_configuration.xsd\"<\/span><span class=\"re2\">&gt;<\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;body<span class=\"re2\">&gt;<\/span><\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;referenceContainer<\/span> <span class=\"re0\">name<\/span>=<span class=\"st0\">\"content\"<\/span><span class=\"re2\">&gt;<\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;block<\/span> <span class=\"re0\">class<\/span>=<span class=\"st0\">\"Magento\\Framework\\View\\Element\\Template\"<\/span> <span class=\"re0\">name<\/span>=<span class=\"st0\">\"more-less-js\"<\/span> <span class=\"re0\">template<\/span>=<span class=\"st0\">\"Magento_Catalog::more-less.phtml\"<\/span> <span class=\"re2\">\/&gt;<\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;\/referenceContainer<span class=\"re2\">&gt;<\/span><\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;\/body<span class=\"re2\">&gt;<\/span><\/span><\/span>\r\n<span class=\"sc3\"><span class=\"re1\">&lt;\/page<span class=\"re2\">&gt;<\/span><\/span><\/span><\/code><\/pre>\n<h2>more-less.phtml<\/h2>\n<p>This file contains basic configuration of the more\/less functionality. Given the fact that Magento utilizes the same\u00a0template file for each tab, it is advisable to separate the JavaScript initialization part into a different file.<\/p>\n<pre class=\"ish\"><code class=\"language-javascript\"><span class=\"sy0\">&lt;<\/span>script type<span class=\"sy0\">=<\/span><span class=\"st0\">\"text\/x-magento-init\"<\/span><span class=\"sy0\">&gt;<\/span>\r\n<span class=\"br0\">{<\/span> <span class=\"st0\">\".product.data.items .product.attribute.description .value\"<\/span><span class=\"sy0\">:<\/span><span class=\"br0\">{<\/span> <span class=\"st0\">\"toggleProductDescription\"<\/span><span class=\"sy0\">:<\/span><span class=\"br0\">{<\/span> <span class=\"st0\">\"contentMaxHeight\"<\/span><span class=\"sy0\">:<\/span> <span class=\"nu0\">200<\/span> <span class=\"br0\">}<\/span> <span class=\"br0\">}<\/span>\r\n<span class=\"br0\">}<\/span>\r\n<span class=\"sy0\">&lt;\/<\/span>script<span class=\"sy0\">&gt;<\/span><\/code><\/pre>\n<p>Let me explain briefly what are the elements and what is their purpose:<\/p>\n<ul>\n<li><span style=\"font-weight: 400;\"><em>.product.data.items .product.attribute.description .value<\/em> \u2013 <\/span><span style=\"font-weight: 400;\">string (but in fact, CSS selector) that is used as a container for further JavaScript processing<\/span><\/li>\n<li><em><span style=\"font-weight: 400;\">toggleProductDescription <\/span><\/em><span style=\"font-weight: 400;\">\u2013 alias of the JavaScript file registered in RequireJS config file<\/span><\/li>\n<li><em><span style=\"font-weight: 400;\">contentMaxHeight<\/span><\/em><span style=\"font-weight: 400;\"> \u2013 declaration of a variable that is going to be used inside of main JavaScript file<\/span><\/li>\n<li><em><span style=\"font-weight: 400;\">200<\/span><\/em><span style=\"font-weight: 400;\"> \u2013 arbitrary value of a variable<\/span><\/li>\n<\/ul>\n<h2>toggle-product-description.js<\/h2>\n<p>Place all of your JavaScript logic in this file. Skeleton of such a JavaScript component should be like this:<\/p>\n<pre class=\"ish\"><code class=\"language-javascript\">define<span class=\"br0\">(<\/span><span class=\"br0\">[<\/span> <span class=\"st0\">\"jquery\"<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ declare your libraries, if you are using them<\/span>\r\n<span class=\"br0\">]<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">(<\/span>$<span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span> <span class=\"co1\">\/\/ delare library aliases<\/span> <span class=\"st0\">'use strict'<\/span><span class=\"sy0\">;<\/span>\r\n\u00a0 <span class=\"kw1\">return<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">(<\/span>config<span class=\"sy0\">,<\/span> node<span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span> <span class=\"co1\">\/\/ paste snippet #1 here<\/span> <span class=\"co1\">\/\/ paste snippet #2 here<\/span> <span class=\"br0\">}<\/span>\r\n<span class=\"br0\">}<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/code><\/pre>\n<p>Here comes the most important part \u2013 the passing of parameters from <em>.phtml<\/em> file and sending back some output:<\/p>\n<ul>\n<li><em><span style=\"font-weight: 400;\">config<\/span><\/em><span style=\"font-weight: 400;\"> \u2013 global variable that contains all of your custom variables. In this case, you are supposed to use <\/span><em><span style=\"font-weight: 400;\">config.contentMaxHeight <\/span><\/em><span style=\"font-weight: 400;\">to get the value of the variable<\/span><\/li>\n<li><em><span style=\"font-weight: 400;\">node<\/span><\/em><span style=\"font-weight: 400;\"> \u2013 selector that can be used for initialising jQuery objects<\/span><\/li>\n<\/ul>\n<p>Inside of the anonymous function, I\u00a0have created a simple JSON object that holds all of the parameters for the more\/less functionality: a link that triggers the change and a target element that the change gets applied to.<\/p>\n<pre class=\"ish\"><code class=\"language-javascript\"><span class=\"co1\">\/\/ snippet #1<\/span>\r\n\u00a0\r\n<span class=\"kw1\">var<\/span> moreLess <span class=\"sy0\">=<\/span> <span class=\"br0\">{<\/span> button<span class=\"sy0\">:<\/span> <span class=\"br0\">{<\/span> el<span class=\"sy0\">:<\/span> $<span class=\"br0\">(<\/span><span class=\"st0\">\"&lt;a&gt;\"<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">{<\/span> id<span class=\"sy0\">:<\/span> <span class=\"st0\">\"toggle-description\"<\/span><span class=\"sy0\">,<\/span> href<span class=\"sy0\">:<\/span> <span class=\"st0\">\"#\"<\/span> <span class=\"br0\">}<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span> expanded_text<span class=\"sy0\">:<\/span> <span class=\"st0\">\"Show less\"<\/span><span class=\"sy0\">,<\/span> collapsed_text<span class=\"sy0\">:<\/span> <span class=\"st0\">\"Show more\"<\/span> <span class=\"br0\">}<\/span><span class=\"sy0\">,<\/span> target<span class=\"sy0\">:<\/span> <span class=\"br0\">{<\/span> el<span class=\"sy0\">:<\/span> $<span class=\"br0\">(<\/span>node<span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span> height<span class=\"sy0\">:<\/span> $<span class=\"br0\">(<\/span>node<span class=\"br0\">)<\/span>.<span class=\"me1\">height<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span> maxHeight<span class=\"sy0\">:<\/span> config.<span class=\"me1\">contentMaxHeight<\/span><span class=\"sy0\">,<\/span> collapsedClassName<span class=\"sy0\">:<\/span> <span class=\"st0\">\"collapsed\"<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">}<\/span>\r\n<span class=\"br0\">}<\/span><span class=\"sy0\">;<\/span><\/code><\/pre>\n<p><span style=\"font-weight: 400;\">The snippet utilizes the function parameters which makes it possible to resolve the more\/less state of the target element.<\/span><\/p>\n<pre class=\"ish\"><code class=\"language-javascript\"><span class=\"co1\">\/\/ snippet #2<\/span>\r\n\u00a0\r\n<span class=\"kw1\">if<\/span> <span class=\"br0\">(<\/span>moreLess.<span class=\"me1\">target<\/span>.<span class=\"me1\">height<\/span> <span class=\"sy0\">&gt;<\/span> moreLess.<span class=\"me1\">target<\/span>.<span class=\"me1\">maxHeight<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span> <span class=\"co1\">\/\/ update button text value<\/span> moreLess.<span class=\"me1\">button<\/span>.<span class=\"me1\">el<\/span>.<span class=\"me1\">text<\/span><span class=\"br0\">(<\/span>moreLess.<span class=\"me1\">button<\/span>.<span class=\"me1\">collapsed_text<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\r\n\u00a0 moreLess.<span class=\"me1\">target<\/span>.<span class=\"me1\">el<\/span> <span class=\"co1\">\/\/ add css class to apply some styling<\/span> .<span class=\"me1\">addClass<\/span><span class=\"br0\">(<\/span>moreLess.<span class=\"me1\">target<\/span>.<span class=\"me1\">collapsedClassName<\/span><span class=\"br0\">)<\/span> <span class=\"co1\">\/\/ append link to product description<\/span> .<span class=\"me1\">parent<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span>.<span class=\"me1\">append<\/span><span class=\"br0\">(<\/span>moreLess.<span class=\"me1\">button<\/span>.<span class=\"me1\">el<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\r\n<span class=\"br0\">}<\/span>\r\n\u00a0\r\nmoreLess.<span class=\"me1\">button<\/span>.<span class=\"me1\">el<\/span>.<span class=\"me1\">on<\/span><span class=\"br0\">(<\/span><span class=\"st0\">\"click\"<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">(<\/span>e<span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span> e.<span class=\"me1\">preventDefault<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\r\n\u00a0 <span class=\"kw1\">if<\/span> <span class=\"br0\">(<\/span>moreLess.<span class=\"me1\">target<\/span>.<span class=\"me1\">el<\/span>.<span class=\"me1\">hasClass<\/span><span class=\"br0\">(<\/span>moreLess.<span class=\"me1\">target<\/span>.<span class=\"me1\">collapsedClassName<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span> moreLess.<span class=\"me1\">target<\/span>.<span class=\"me1\">el<\/span>.<span class=\"me1\">removeClass<\/span><span class=\"br0\">(<\/span>moreLess.<span class=\"me1\">target<\/span>.<span class=\"me1\">collapsedClassName<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span> moreLess.<span class=\"me1\">button<\/span>.<span class=\"me1\">el<\/span>.<span class=\"me1\">text<\/span><span class=\"br0\">(<\/span>moreLess.<span class=\"me1\">button<\/span>.<span class=\"me1\">expanded_text<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">}<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">{<\/span> moreLess.<span class=\"me1\">target<\/span>.<span class=\"me1\">el<\/span>.<span class=\"me1\">addClass<\/span><span class=\"br0\">(<\/span>moreLess.<span class=\"me1\">target<\/span>.<span class=\"me1\">collapsedClassName<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span> moreLess.<span class=\"me1\">button<\/span>.<span class=\"me1\">el<\/span>.<span class=\"me1\">text<\/span><span class=\"br0\">(<\/span>moreLess.<span class=\"me1\">button<\/span>.<span class=\"me1\">collapsed_text<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">}<\/span>\r\n<span class=\"br0\">}<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/code><\/pre>\n<p><span style=\"font-weight: 400;\">When the component gets loaded, it is making a check to see if the height of the content is greater than the threshold defined and if so, append the more\/less button and assign an event listener to it.<\/span><\/p>\n<h2>_theme.less<\/h2>\n<p><span style=\"font-weight: 400;\">This is optional file for you to create, I\u00a0have created some minimal styling (transparent-to-solid background) as a nice effect towards the the more\/less button.<\/span><\/p>\n<pre class=\"ish\"><code class=\"language-css\"><span class=\"re1\">.product<\/span><span class=\"re1\">.attribute<\/span><span class=\"re1\">.description<\/span> .value<span class=\"br0\">{<\/span> <span class=\"kw1\">max-height<\/span><span class=\"sy0\">:<\/span> <span class=\"kw2\">none<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">position<\/span><span class=\"sy0\">:<\/span> <span class=\"kw2\">relative<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">max-height<\/span><span class=\"sy0\">:<\/span> <span class=\"kw2\">none<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">border-bottom<\/span><span class=\"sy0\">:<\/span> <span class=\"re3\">1px<\/span> <span class=\"kw2\">solid<\/span> <span class=\"re0\">#d1d1d1<\/span><span class=\"sy0\">;<\/span>\r\n\u00a0 &amp;<span class=\"re1\">.collapsed<\/span> <span class=\"br0\">{<\/span> <span class=\"kw1\">max-height<\/span><span class=\"sy0\">:<\/span> <span class=\"re3\">200px<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">overflow<\/span><span class=\"sy0\">:<\/span> <span class=\"kw2\">hidden<\/span><span class=\"sy0\">;<\/span>\r\n\u00a0 &amp;<span class=\"re2\">:after <\/span><span class=\"br0\">{<\/span> <span class=\"kw1\">content<\/span><span class=\"sy0\">:<\/span> <span class=\"st0\">\"\"<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">position<\/span><span class=\"sy0\">:<\/span> <span class=\"kw2\">absolute<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">width<\/span><span class=\"sy0\">:<\/span> <span class=\"re3\">100%<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">height<\/span><span class=\"sy0\">:<\/span> <span class=\"re3\">160px<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">z-index<\/span><span class=\"sy0\">:<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">display<\/span><span class=\"sy0\">:<\/span> <span class=\"kw2\">block<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">bottom<\/span><span class=\"sy0\">:<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span>\r\n\u00a0 <span class=\"kw1\">background<\/span><span class=\"sy0\">:<\/span> -moz-linear-gradient<span class=\"br0\">(<\/span><span class=\"kw1\">top<\/span><span class=\"sy0\">,<\/span> rgba<span class=\"br0\">(<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span> <span class=\"re3\">0%<\/span><span class=\"sy0\">,<\/span> rgba<span class=\"br0\">(<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">)<\/span> <span class=\"re3\">70%<\/span><span class=\"sy0\">,<\/span> rgba<span class=\"br0\">(<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">)<\/span> <span class=\"re3\">100%<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span> <span class=\"coMULTI\">\/* FF3.6-15 *\/<\/span> <span class=\"kw1\">background<\/span><span class=\"sy0\">:<\/span> -webkit-linear-gradient<span class=\"br0\">(<\/span><span class=\"kw1\">top<\/span><span class=\"sy0\">,<\/span> rgba<span class=\"br0\">(<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span> <span class=\"re3\">0%<\/span><span class=\"sy0\">,<\/span>rgba<span class=\"br0\">(<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">)<\/span> <span class=\"re3\">70%<\/span><span class=\"sy0\">,<\/span>rgba<span class=\"br0\">(<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">)<\/span> <span class=\"re3\">100%<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span> <span class=\"coMULTI\">\/* Chrome10-25,Safari5.1-6 *\/<\/span> <span class=\"kw1\">background<\/span><span class=\"sy0\">:<\/span> linear-gradient<span class=\"br0\">(<\/span>to <span class=\"kw1\">bottom<\/span><span class=\"sy0\">,<\/span> rgba<span class=\"br0\">(<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span> <span class=\"re3\">0%<\/span><span class=\"sy0\">,<\/span>rgba<span class=\"br0\">(<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">)<\/span> <span class=\"re3\">70%<\/span><span class=\"sy0\">,<\/span>rgba<span class=\"br0\">(<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">255<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">)<\/span> <span class=\"re3\">100%<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span> <span class=\"coMULTI\">\/* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ *\/<\/span> filter<span class=\"sy0\">:<\/span> progid<span class=\"re2\">:DXImageTransform<\/span><span class=\"re1\">.Microsoft<\/span>.gradient<span class=\"br0\">(<\/span> startColorstr<span class=\"sy0\">=<\/span><span class=\"st0\">'#00ffffff'<\/span><span class=\"sy0\">,<\/span> endColorstr<span class=\"sy0\">=<\/span><span class=\"st0\">'#ffffff'<\/span><span class=\"sy0\">,<\/span>GradientType<span class=\"sy0\">=<\/span><span class=\"nu0\">0<\/span> <span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span> <span class=\"coMULTI\">\/* IE6-9 *\/<\/span> <span class=\"br0\">}<\/span> <span class=\"br0\">}<\/span>\r\n<span class=\"br0\">}<\/span>\r\n\u00a0\r\n<span class=\"re0\">#toggle-description<\/span> <span class=\"br0\">{<\/span> <span class=\"kw1\">margin-top<\/span><span class=\"sy0\">:<\/span> <span class=\"re3\">20px<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">display<\/span><span class=\"sy0\">:<\/span> inline-block<span class=\"sy0\">;<\/span>\r\n<span class=\"br0\">}<\/span><\/code><\/pre>\n<p>Here is how it looks like on the frontend:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-29490\" src=\"\/\/www.sushilkumar.ind.in\/blog\/wp-content\/uploads\/2017\/09\/moreless-functionality-in-magento2.jpg\" alt=\"\" width=\"791\" height=\"430\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-29491\" src=\"\/\/www.sushilkumar.ind.in\/blog\/wp-content\/uploads\/2017\/09\/moreless-functionality-in-magento2-1.jpg\" alt=\"\" width=\"790\" height=\"532\" \/><\/p>\n<p>Leave a comment below if you have a question or if this blog post helped you out in your project.<br \/>\nUntil next time, keep calm and code on! =)<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"\/\/www.sushilkumar.ind.in\/custome-devlopment\/\">Do you need any custome Development Click here and fill the form with full your requirement<\/a> and after i will send the quotes of your work requirements.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Everything you need to know on how to setup more\/less functionality in Magento 2<br \/>\nThe post More\/Less functionality in Magento2 appeared first on Inchoo. Do you need any custome Development Click here and fill the form with full your requirement  and after i will send the quotes of your work requirements&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":1446,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[320,321,322,225,323,324,20,325,326,319],"tags":[328,329,330,230,331,332,22,333,334,327],"class_list":["post-1445","post","type-post","status-publish","format-standard","has-post-thumbnail","","category-button","category-custom","category-custom-theme","category-frontend","category-javascript","category-less","category-magento-2","category-more","category-moreless","category-ui-components","tag-button","tag-custom","tag-custom-theme","tag-frontend","tag-javascript","tag-less","tag-magento-2","tag-more","tag-moreless","tag-ui-components"],"jetpack_publicize_connections":[],"acf":[],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-content\/uploads\/2017\/09\/moreless-functionality-in-magento2.jpg","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p99pkJ-nj","_links":{"self":[{"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/posts\/1445"}],"collection":[{"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/comments?post=1445"}],"version-history":[{"count":0,"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/posts\/1445\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/media\/1446"}],"wp:attachment":[{"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/media?parent=1445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/categories?post=1445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/tags?post=1445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}