Parallelogram button

Description

07.26c30v7 Parallelogram button

#1. Install Code

#1.1. You can use this code to Code Injection > Footer

  • If you use Personal/Basic Plan and your plan doesn’t support Injection, you can see #3.1
<!-- 07.26c30v7 Parallelogram button -->
<script>
window.parallelogramSettings = {
  skewAngle: "-20deg",
  shadowBgColor: "rgba(0, 0, 0, 0.2)",
  shadowOffsetX: "-8px",
  shadowOffsetY: "8px",
  hoverOffsetX: "-4px",
  hoverOffsetY: "4px",
  transitionSpeed: "0.3s"
};
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
  const config = window.parallelogramSettings || {};
  const skewAngle = config.skewAngle || "-20deg";
  const shadowBgColor = config.shadowBgColor || "rgba(0, 0, 0, 0.2)";
  const shadowOffsetX = config.shadowOffsetX || "-8px";
  const shadowOffsetY = config.shadowOffsetY || "8px";
  const hoverOffsetX = config.hoverOffsetX || "-4px";
  const hoverOffsetY = config.hoverOffsetY || "4px";
  const transitionSpeed = config.transitionSpeed || "0.3s";

  const baseClasses = [
    '.sqs-button-element--primary',
    '.sqs-button-element--secondary',
    '.sqs-button-element--tertiary',
    '.newsletter-block .newsletter-form-button',
    '.form-block .form-submit-button',
    '.header-actions-action--cta .btn'
  ];

  const targetSelectors = baseClasses.map(cls => `html body ${cls}.is-parallelogram`).join(',\n');
  const childSelectors = baseClasses.map(cls => `html body ${cls}.is-parallelogram *`).join(',\n');
  const beforeSelectors = baseClasses.map(cls => `html body ${cls}.is-parallelogram::before`).join(',\n');
  const afterSelectors = baseClasses.map(cls => `html body ${cls}.is-parallelogram::after`).join(',\n');
  const hoverBeforeSelectors = baseClasses.map(cls => `html body ${cls}.is-parallelogram:hover::before`).join(',\n');

  const style = document.createElement('style');
  style.innerHTML = `
    html body .newsletter-form-button-wrapper,
    html body .submit-wrapper,
    html body .form-button-wrapper,
    html body .sqs-block-button-container {
      background: transparent !important;
      background-color: transparent !important;
      border: none !important;
      box-shadow: none !important;
    }

    ${targetSelectors} {
      position: relative !important;
      background: transparent !important;
      background-color: transparent !important;
      background-image: none !important;
      border: none !important;
      border-color: transparent !important;
      outline: none !important;
      box-shadow: none !important;
      -webkit-appearance: none !important;
      appearance: none !important;
      color: var(--native-text) !important;
      z-index: 1 !important;
      overflow: visible !important;
      border-radius: 0 !important;
      --primaryButtonBackgroundColor: transparent !important;
      --secondaryButtonBackgroundColor: transparent !important;
      --tertiaryButtonBackgroundColor: transparent !important;
      --solidButtonBackgroundColor: transparent !important;
    }

    ${childSelectors} {
      color: var(--native-text) !important;
      z-index: 2 !important;
      position: relative !important;
      background: transparent !important;
      background-color: transparent !important;
      border-color: transparent !important;
    }

    ${beforeSelectors} {
      content: '' !important;
      position: absolute !important;
      top: 0 !important;
      left: 0 !important;
      width: 100% !important;
      height: 100% !important;
      background-color: var(--native-bg) !important;
      background-image: none !important;
      border: none !important;
      box-shadow: none !important;
      transform: skewX(${skewAngle}) !important;
      z-index: -1 !important;
      transition: transform ${transitionSpeed} ease !important;
      border-radius: 0 !important;
      display: block !important;
    }

    ${afterSelectors} {
      content: '' !important;
      position: absolute !important;
      top: ${shadowOffsetY} !important;
      left: ${shadowOffsetX} !important;
      width: 100% !important;
      height: 100% !important;
      background-color: ${shadowBgColor} !important;
      background-image: none !important;
      border: none !important;
      box-shadow: none !important;
      transform: skewX(${skewAngle}) !important;
      z-index: -2 !important;
      transition: transform ${transitionSpeed} ease !important;
      border-radius: 0 !important;
      display: block !important;
    }

    ${hoverBeforeSelectors} {
      transform: skewX(${skewAngle}) translate(${hoverOffsetX}, ${hoverOffsetY}) !important;
    }
  `;
  document.head.appendChild(style);

  function applyNativeStyles() {
    const buttons = document.querySelectorAll(baseClasses.join(', '));
    
    buttons.forEach(btn => {
      if (!btn.classList.contains('is-parallelogram')) {
        const computed = window.getComputedStyle(btn);
        const bgColor = computed.backgroundColor;
        const txtColor = computed.color;
        
        btn.style.setProperty('--native-bg', bgColor);
        btn.style.setProperty('--native-text', txtColor);
        
        btn.classList.add('is-parallelogram');
      }
    });
  }

  applyNativeStyles();

  setTimeout(applyNativeStyles, 500);
  setTimeout(applyNativeStyles, 1500);
});
</script>

07.26c30v7 Parallelogram button

#1.2. You can adjust button style here (Line 04 – Line 09)

skewAngle: "-20deg",
shadowBgColor: "rgba(0, 0, 0, 0.2)",
shadowOffsetX: "-8px",
shadowOffsetY: "8px",
hoverOffsetX: "-4px",
hoverOffsetY: "4px",

#1.3. If you need to tweak more you can use this AI Assistant (designed for Squarespace sites)

#2. Customize

nothing now

#3. Other

#3.1. If you use Personal/Basic Plan and your plan doesn’t support Injection, you can edit Site Footer > Add a Markdown Block

04.26c10v2 Header Sound Icon

Add this code into Markdown

<script>
window.parallelogramSettings = {
  skewAngle: "-20deg",
  shadowBgColor: "rgba(0, 0, 0, 0.2)",
  shadowOffsetX: "-8px",
  shadowOffsetY: "8px",
  hoverOffsetX: "-4px",
  hoverOffsetY: "4px",
  transitionSpeed: "0.3s"
};
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
  const config = window.parallelogramSettings || {};
  const skewAngle = config.skewAngle || "-20deg";
  const shadowBgColor = config.shadowBgColor || "rgba(0, 0, 0, 0.2)";
  const shadowOffsetX = config.shadowOffsetX || "-8px";
  const shadowOffsetY = config.shadowOffsetY || "8px";
  const hoverOffsetX = config.hoverOffsetX || "-4px";
  const hoverOffsetY = config.hoverOffsetY || "4px";
  const transitionSpeed = config.transitionSpeed || "0.3s";

  const baseClasses = [
    '.sqs-button-element--primary',
    '.sqs-button-element--secondary',
    '.sqs-button-element--tertiary',
    '.newsletter-block .newsletter-form-button',
    '.form-block .form-submit-button',
    '.header-actions-action--cta .btn'
  ];

  const targetSelectors = baseClasses.map(cls => `html body ${cls}.is-parallelogram`).join(',\n');
  const childSelectors = baseClasses.map(cls => `html body ${cls}.is-parallelogram *`).join(',\n');
  const beforeSelectors = baseClasses.map(cls => `html body ${cls}.is-parallelogram::before`).join(',\n');
  const afterSelectors = baseClasses.map(cls => `html body ${cls}.is-parallelogram::after`).join(',\n');
  const hoverBeforeSelectors = baseClasses.map(cls => `html body ${cls}.is-parallelogram:hover::before`).join(',\n');

  const style = document.createElement('style');
  style.innerHTML = `
    html body .newsletter-form-button-wrapper,
    html body .submit-wrapper,
    html body .form-button-wrapper,
    html body .sqs-block-button-container {
      background: transparent !important;
      background-color: transparent !important;
      border: none !important;
      box-shadow: none !important;
    }

    ${targetSelectors} {
      position: relative !important;
      background: transparent !important;
      background-color: transparent !important;
      background-image: none !important;
      border: none !important;
      border-color: transparent !important;
      outline: none !important;
      box-shadow: none !important;
      -webkit-appearance: none !important;
      appearance: none !important;
      color: var(--native-text) !important;
      z-index: 1 !important;
      overflow: visible !important;
      border-radius: 0 !important;
      --primaryButtonBackgroundColor: transparent !important;
      --secondaryButtonBackgroundColor: transparent !important;
      --tertiaryButtonBackgroundColor: transparent !important;
      --solidButtonBackgroundColor: transparent !important;
    }

    ${childSelectors} {
      color: var(--native-text) !important;
      z-index: 2 !important;
      position: relative !important;
      background: transparent !important;
      background-color: transparent !important;
      border-color: transparent !important;
    }

    ${beforeSelectors} {
      content: '' !important;
      position: absolute !important;
      top: 0 !important;
      left: 0 !important;
      width: 100% !important;
      height: 100% !important;
      background-color: var(--native-bg) !important;
      background-image: none !important;
      border: none !important;
      box-shadow: none !important;
      transform: skewX(${skewAngle}) !important;
      z-index: -1 !important;
      transition: transform ${transitionSpeed} ease !important;
      border-radius: 0 !important;
      display: block !important;
    }

    ${afterSelectors} {
      content: '' !important;
      position: absolute !important;
      top: ${shadowOffsetY} !important;
      left: ${shadowOffsetX} !important;
      width: 100% !important;
      height: 100% !important;
      background-color: ${shadowBgColor} !important;
      background-image: none !important;
      border: none !important;
      box-shadow: none !important;
      transform: skewX(${skewAngle}) !important;
      z-index: -2 !important;
      transition: transform ${transitionSpeed} ease !important;
      border-radius: 0 !important;
      display: block !important;
    }

    ${hoverBeforeSelectors} {
      transform: skewX(${skewAngle}) translate(${hoverOffsetX}, ${hoverOffsetY}) !important;
    }
  `;
  document.head.appendChild(style);

  function applyNativeStyles() {
    const buttons = document.querySelectorAll(baseClasses.join(', '));
    
    buttons.forEach(btn => {
      if (!btn.classList.contains('is-parallelogram')) {
        const computed = window.getComputedStyle(btn);
        const bgColor = computed.backgroundColor;
        const txtColor = computed.color;
        
        btn.style.setProperty('--native-bg', bgColor);
        btn.style.setProperty('--native-text', txtColor);
        
        btn.classList.add('is-parallelogram');
      }
    });
  }

  applyNativeStyles();

  setTimeout(applyNativeStyles, 500);
  setTimeout(applyNativeStyles, 1500);
});
</script>

07.26c30v7 Parallelogram button

Buy me a coffee