tosave 12%
Read more
This product is sold and fulfilled by an independent third-party seller. This product may have been reviewed against Truly Free’s standards for the limited purpose of assigning marketplace badges.
Any such review is based on information provided by the seller and does not constitute certification, approval, or a guarantee of safety, efficacy, or regulatory compliance.
Truly Free assumes no liability for inaccuracies, omissions, product claims or for any damages or adverse outcomes arising from the use or misuse of this product.
Any Truly Free Trust Badges shown here were reviewed against our published standards and approved based on information submitted by the seller. The seller has sole access to and control over its product listing content and is solely responsible for the accuracy of any additional claims being made.
function logShoppableMetrics(moduleName, showsAddToCart) { if (window.ue && window.ue.count) { window.ue.count('aplus:shoppable:' + moduleName + ':addToCart', showsAddToCart ? 1 : 0); } }
(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {P.now('premium-module-5-comparison-table-scroller').execute(function(init){ if (init) { return; } P.register('premium-module-5-comparison-table-scroller', function(){ return function() { P.when('jQuery', 'a-popover', 'A', 'ready').execute(function($, popover, A) { function initCompTable(module) { /** * Premium comparison table: popover trigger module */ var comparisonName = $(module).data('comparison-name'); (function() { var $additionalInfo = $('.aplus-v2 .aplus-popover-trigger'); $additionalInfo.each(function(i, trigger) { return popover.create(trigger, $(trigger).data()); }); $additionalInfo.hover( function() { $(this).focus(); } ); })(); /** * Premium comparison table: adjust column width module */ (function() { var VISIBLE_COLUMNS = 4.2; /* How many visible columns on load */ var MIN_WIDTH = 230; var getWidth = function() { return $(this).outerWidth(); } /* cache selectors */ var $container = $('.aplus-v2 .comparison-table #'+comparisonName), $header = $('.aplus-v2 .comparison-table #'+comparisonName+' td.attribute'), $slider = $('.aplus-v2 .comparison-table #'+comparisonName+' .table-slider'), $columns = $('.aplus-v2 .comparison-table #'+comparisonName+' .aplus-data-column'), $activeColumn = $('.aplus-v2 .comparison-table #'+comparisonName+' .aplus-data-column.active.active-item'); /* Formula for determining desired column width */ var calculatedColumnWidth = Math.floor( ($container.innerWidth() - $header.innerWidth()) / VISIBLE_COLUMNS ); var childWidths = $activeColumn.map(getWidth).get(); var maxChildWidth = Math.max(MIN_WIDTH, Math.max.apply(Math, childWidths)); var minColumnWidth = $columns.innerWidth(); /* set the min-width of each column to the calulated width or minWidth */ $columns.css( 'min-width', Math.max(MIN_WIDTH, (calculatedColumnWidth < minColumnWidth ? calculatedColumnWidth : minColumnWidth)) ); $activeColumn.css('width', maxChildWidth); /* show the component */ $container.removeClass('loading'); })(); /** * Premium comparison table: sticky attribute & column */ (function() { /* cache selectors */ const comparisonTable = document.querySelector('.aplus-v2 .comparison-table #'+comparisonName); const header = comparisonTable.querySelector('td.attribute'); const fixedColumn = comparisonTable.querySelector('td.active'); const attributeColumnObserver = new ResizeObserver((entries) => { for (let entry of entries) { const bounds = entry.target.getBoundingClientRect().width; const activeCellWidth = window.getComputedStyle(fixedColumn).left; if (bounds + 'px' !== activeCellWidth) { const activeCells = document.querySelectorAll('.aplus-data-column.active'); activeCells.forEach(cell => cell.style.left = bounds + 'px'); } } }) attributeColumnObserver.observe(header) })(); /** * Premium comparison table: top scroll bar */ (function() { /* cache selectors */ var $header = $('.aplus-v2 .comparison-table #'+comparisonName+' td.attribute'), $fixedColumn = $('.aplus-v2 .comparison-table #'+comparisonName+' td.active'), $scrollWrapperTop = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-wrapper-top'), $scrollWrapperBottom = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-wrapper-bottom'), $scrollWidth = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-width'), $scrollBar = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-bar'); /* confirm fixed column exists and can add width to the total width of the scroll bar */ var fixedColumnWidth = $fixedColumn.innerWidth(); if ( fixedColumnWidth === null ) { fixedColumnWidth = 0; } /* set width of scrollBar */ $scrollBar.css('width', $scrollWidth.innerWidth() + fixedColumnWidth + $header.innerWidth()); /* connect scrolls together */ $scrollWrapperTop.scroll(function() { $scrollWrapperBottom.scrollLeft($scrollWrapperTop.scrollLeft()); }); $scrollWrapperBottom.scroll(function() { $scrollWrapperTop.scrollLeft($scrollWrapperBottom.scrollLeft()); }); })(); } $('.aplus-v2 .premium-aplus-module-5 .table-container').each(function(index, module) { initCompTable(module); }); }); } });});})); /** * Common event handler for click and keydown events. * @param {Event} event - The event object. * @param {Function} handleClickOrEnter - Function to handle click or Enter key events. * @param {Function} handleEsc - Function to handle Esc key events. */ // [TODO][AplusMantle-8064] Create common event handler util(key events, click events) in AplusModuleResources function handleClickAndKeyEvents(event, handleClickOrEnterOrSpace) { const ENTER_KEY_CODE = 13; const ESCAPE_KEY_CODE = 27; const SPACE_KEY_CODE = 32; const isClick = event.type === 'click'; const isKeydown = event.type === 'keydown'; const isEnter = isKeydown && event.keyCode === ENTER_KEY_CODE; const isSpace = isKeydown && event.keyCode === SPACE_KEY_CODE; const isEsc = isKeydown && event.keyCode === ESCAPE_KEY_CODE; if (isClick || isEnter || isSpace) { handleClickOrEnterOrSpace(); } else if (isEsc) { handleEsc(event); } } /** * Function to handle esc key event. * @param {Event} event - The event object. */ function handleEsc(event) { event.target.blur() // force remove focus }(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {P.now('premium-module-11-faq').execute(function(init) { if (init) { return; } P.register('premium-module-11-faq', function() { return function() { P.when('A', 'jQuery', 'ready').execute(function(A, $){ function initFaq(module) { const MODULE_CLASS_NAME = 'premium-aplus-module-11'; const FAQ_CONTAINER_CLASS_NAME = 'faqs-container'; const FAQ_BLOCK_CLASS_NAME = 'faq-block'; const moduleId = $(module).data('faq-block'); const $faqBlocks = $('.aplus-v2 .' + MODULE_CLASS_NAME + ' .' + FAQ_CONTAINER_CLASS_NAME + '.' + moduleId + ' .' + FAQ_BLOCK_CLASS_NAME); /** * Function to handle click or Enter or Space key events. * @param {Element} element - The this object from which the event is dispatched * @param {faqBlocks} faqBlocks - List of all the Question and Answer blocks. */ function handleClickOrEnterOrSpace(element, faqBlocks) { const $element = $(element); const isActive = $element.hasClass('aplus-active'); faqBlocks.removeClass('aplus-active'); faqBlocks.find('[data-faq-question]').attr('aria-expanded', 'false'); if (!isActive) { $element.addClass('aplus-active'); $element.find('[data-faq-question]').attr('aria-expanded', 'true'); } } /* Using jQuery event namespace for preventing duplicate binding on twister refresh */ $faqBlocks.unbind('click keydown.premiumAplusModule11ClickHandler').bind('click keydown.premiumAplusModule11ClickHandler', function(event) { handleClickAndKeyEvents(event, () => handleClickOrEnterOrSpace(this, $faqBlocks)); }); } $('.aplus-v2 .premium-aplus-module-11 .faqs-container').each(function(index, module) { initFaq(module); }); }); }; });});}));


Ceramic Vase
logShoppableMetrics('premium-module-5-comparison-table-scroller', false)
Buying Options
Magnetic Frame
Add to Cart
logShoppableMetrics('premium-module-5-comparison-table-scroller', true)
Magnetic Frame
Add to Cart
logShoppableMetrics('premium-module-5-comparison-table-scroller', true)
Magnetic Frame
Add to Cart
logShoppableMetrics('premium-module-5-comparison-table-scroller', true)
Vases
Add to Cart
logShoppableMetrics('premium-module-5-comparison-table-scroller', true) Customer Reviews
4.8 out of 5 stars 51
4.1 out of 5 stars 46
4.1 out of 5 stars 46
4.1 out of 5 stars 46
4.4 out of 5 stars 19
Price
$15.83$15.83 $12.99$12.99 $14.99$14.99 $14.99$14.99 $12.99$12.99 Qty
1 4 16 8 4 Size
6.3 x 3.5 inch 4 x 6 inch 2.36 x 3.5 inch 2.36 x 3.5 inch Multi Material
Ceramic Acrylic Acrylic Acrylic Glass Occasions
Housewarming Home Home Home Home New Types in Progress
Yes Yes Yes Yes Yes
(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) { P.when('premium-module-5-comparison-table-scroller', 'ready').execute(function(init){ init() });}));
(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) { P.when('premium-module-11-faq').execute(function(init){ init(); });}));
function logShoppableMetrics(moduleName, showsAddToCart) { if (window.ue && window.ue.count) { window.ue.count('aplus:shoppable:' + moduleName + ':addToCart', showsAddToCart ? 1 : 0); } }
(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {P.now('premium-module-5-comparison-table-scroller').execute(function(init){ if (init) { return; } P.register('premium-module-5-comparison-table-scroller', function(){ return function() { P.when('jQuery', 'a-popover', 'A', 'ready').execute(function($, popover, A) { function initCompTable(module) { /** * Premium comparison table: popover trigger module */ var comparisonName = $(module).data('comparison-name'); (function() { var $additionalInfo = $('.aplus-v2 .aplus-popover-trigger'); $additionalInfo.each(function(i, trigger) { return popover.create(trigger, $(trigger).data()); }); $additionalInfo.hover( function() { $(this).focus(); } ); })(); /** * Premium comparison table: adjust column width module */ (function() { var VISIBLE_COLUMNS = 4.2; /* How many visible columns on load */ var MIN_WIDTH = 230; var getWidth = function() { return $(this).outerWidth(); } /* cache selectors */ var $container = $('.aplus-v2 .comparison-table #'+comparisonName), $header = $('.aplus-v2 .comparison-table #'+comparisonName+' td.attribute'), $slider = $('.aplus-v2 .comparison-table #'+comparisonName+' .table-slider'), $columns = $('.aplus-v2 .comparison-table #'+comparisonName+' .aplus-data-column'), $activeColumn = $('.aplus-v2 .comparison-table #'+comparisonName+' .aplus-data-column.active.active-item'); /* Formula for determining desired column width */ var calculatedColumnWidth = Math.floor( ($container.innerWidth() - $header.innerWidth()) / VISIBLE_COLUMNS ); var childWidths = $activeColumn.map(getWidth).get(); var maxChildWidth = Math.max(MIN_WIDTH, Math.max.apply(Math, childWidths)); var minColumnWidth = $columns.innerWidth(); /* set the min-width of each column to the calulated width or minWidth */ $columns.css( 'min-width', Math.max(MIN_WIDTH, (calculatedColumnWidth < minColumnWidth ? calculatedColumnWidth : minColumnWidth)) ); $activeColumn.css('width', maxChildWidth); /* show the component */ $container.removeClass('loading'); })(); /** * Premium comparison table: sticky attribute & column */ (function() { /* cache selectors */ const comparisonTable = document.querySelector('.aplus-v2 .comparison-table #'+comparisonName); const header = comparisonTable.querySelector('td.attribute'); const fixedColumn = comparisonTable.querySelector('td.active'); const attributeColumnObserver = new ResizeObserver((entries) => { for (let entry of entries) { const bounds = entry.target.getBoundingClientRect().width; const activeCellWidth = window.getComputedStyle(fixedColumn).left; if (bounds + 'px' !== activeCellWidth) { const activeCells = document.querySelectorAll('.aplus-data-column.active'); activeCells.forEach(cell => cell.style.left = bounds + 'px'); } } }) attributeColumnObserver.observe(header) })(); /** * Premium comparison table: top scroll bar */ (function() { /* cache selectors */ var $header = $('.aplus-v2 .comparison-table #'+comparisonName+' td.attribute'), $fixedColumn = $('.aplus-v2 .comparison-table #'+comparisonName+' td.active'), $scrollWrapperTop = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-wrapper-top'), $scrollWrapperBottom = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-wrapper-bottom'), $scrollWidth = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-width'), $scrollBar = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-bar'); /* confirm fixed column exists and can add width to the total width of the scroll bar */ var fixedColumnWidth = $fixedColumn.innerWidth(); if ( fixedColumnWidth === null ) { fixedColumnWidth = 0; } /* set width of scrollBar */ $scrollBar.css('width', $scrollWidth.innerWidth() + fixedColumnWidth + $header.innerWidth()); /* connect scrolls together */ $scrollWrapperTop.scroll(function() { $scrollWrapperBottom.scrollLeft($scrollWrapperTop.scrollLeft()); }); $scrollWrapperBottom.scroll(function() { $scrollWrapperTop.scrollLeft($scrollWrapperBottom.scrollLeft()); }); })(); } $('.aplus-v2 .premium-aplus-module-5 .table-container').each(function(index, module) { initCompTable(module); }); }); } });});})); /** * Common event handler for click and keydown events. * @param {Event} event - The event object. * @param {Function} handleClickOrEnter - Function to handle click or Enter key events. * @param {Function} handleEsc - Function to handle Esc key events. */ // [TODO][AplusMantle-8064] Create common event handler util(key events, click events) in AplusModuleResources function handleClickAndKeyEvents(event, handleClickOrEnterOrSpace) { const ENTER_KEY_CODE = 13; const ESCAPE_KEY_CODE = 27; const SPACE_KEY_CODE = 32; const isClick = event.type === 'click'; const isKeydown = event.type === 'keydown'; const isEnter = isKeydown && event.keyCode === ENTER_KEY_CODE; const isSpace = isKeydown && event.keyCode === SPACE_KEY_CODE; const isEsc = isKeydown && event.keyCode === ESCAPE_KEY_CODE; if (isClick || isEnter || isSpace) { handleClickOrEnterOrSpace(); } else if (isEsc) { handleEsc(event); } } /** * Function to handle esc key event. * @param {Event} event - The event object. */ function handleEsc(event) { event.target.blur() // force remove focus }(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {P.now('premium-module-11-faq').execute(function(init) { if (init) { return; } P.register('premium-module-11-faq', function() { return function() { P.when('A', 'jQuery', 'ready').execute(function(A, $){ function initFaq(module) { const MODULE_CLASS_NAME = 'premium-aplus-module-11'; const FAQ_CONTAINER_CLASS_NAME = 'faqs-container'; const FAQ_BLOCK_CLASS_NAME = 'faq-block'; const moduleId = $(module).data('faq-block'); const $faqBlocks = $('.aplus-v2 .' + MODULE_CLASS_NAME + ' .' + FAQ_CONTAINER_CLASS_NAME + '.' + moduleId + ' .' + FAQ_BLOCK_CLASS_NAME); /** * Function to handle click or Enter or Space key events. * @param {Element} element - The this object from which the event is dispatched * @param {faqBlocks} faqBlocks - List of all the Question and Answer blocks. */ function handleClickOrEnterOrSpace(element, faqBlocks) { const $element = $(element); const isActive = $element.hasClass('aplus-active'); faqBlocks.removeClass('aplus-active'); faqBlocks.find('[data-faq-question]').attr('aria-expanded', 'false'); if (!isActive) { $element.addClass('aplus-active'); $element.find('[data-faq-question]').attr('aria-expanded', 'true'); } } /* Using jQuery event namespace for preventing duplicate binding on twister refresh */ $faqBlocks.unbind('click keydown.premiumAplusModule11ClickHandler').bind('click keydown.premiumAplusModule11ClickHandler', function(event) { handleClickAndKeyEvents(event, () => handleClickOrEnterOrSpace(this, $faqBlocks)); }); } $('.aplus-v2 .premium-aplus-module-11 .faqs-container').each(function(index, module) { initFaq(module); }); }); }; });});}));


Ceramic Vase
logShoppableMetrics('premium-module-5-comparison-table-scroller', false)
Buying Options
Magnetic Frame
Add to Cart
logShoppableMetrics('premium-module-5-comparison-table-scroller', true)
Magnetic Frame
Add to Cart
logShoppableMetrics('premium-module-5-comparison-table-scroller', true)
Magnetic Frame
Add to Cart
logShoppableMetrics('premium-module-5-comparison-table-scroller', true)
Vases
Add to Cart
logShoppableMetrics('premium-module-5-comparison-table-scroller', true) Customer Reviews
4.8 out of 5 stars 51
4.1 out of 5 stars 46
4.1 out of 5 stars 46
4.1 out of 5 stars 46
4.4 out of 5 stars 19
Price
$15.83$15.83 $12.99$12.99 $14.99$14.99 $14.99$14.99 $12.99$12.99 Qty
1 4 16 8 4 Size
6.3 x 3.5 inch 4 x 6 inch 2.36 x 3.5 inch 2.36 x 3.5 inch Multi Material
Ceramic Acrylic Acrylic Acrylic Glass Occasions
Housewarming Home Home Home Home New Types in Progress
Yes Yes Yes Yes Yes
(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) { P.when('premium-module-5-comparison-table-scroller', 'ready').execute(function(init){ init() });}));
(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) { P.when('premium-module-11-faq').execute(function(init){ init(); });}));