Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does "#" (hash mark, number sign) close a modal box?

I recently read this article about creating a pure CSS modal box:

  • Creating a modal window with HTML5 & CSS3

I've tested the code and it works great. I'm using it for my site's contact and register/log-in pages.

There is one part of the code I haven't fully grasped.

How does this...

<a href="#close" title="Close" class="close">X</a>

...close the box?

There is nothing in the CSS that hides or removes an element with a close class, nor any similar function targeting href, #close or title. It's simply that one line of code by itself, and when the use clicks on it, the modal window closes (neatly and elegantly, I might add).

It's clear that the "close" text doesn't matter. The text could be anything and the function works. But if "#" is removed, the styling fails, but the window still closes.

So what's so special about "#"?

.modalDialog {
  position: fixed;
  font-family: Arial, Helvetica, sans-serif;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background: rgba(0, 0, 0, 0.8);
  z-index: 99999;
  opacity: 0;
  transition: opacity 400ms ease-in;
  pointer-events: none;
}
.modalDialog:target {
  opacity: 1;
  pointer-events: auto;
}
.modalDialog > div {
  width: 400px;
  position: relative;
  margin: 10% auto;
  padding: 5px 20px 13px 20px;
  border-radius: 10px;
  background: #fff;
}
.close {
  background: #606061;
  color: #FFFFFF;
  line-height: 25px;
  position: absolute;
  right: -12px;
  text-align: center;
  top: -10px;
  width: 24px;
  text-decoration: none;
  font-weight: bold;
  border-radius: 12px;
  box-shadow: 1px 1px 3px #000;
}
.close:hover {
  background: #00d9ff;
}
<a href="#openModal">Open Modal</a>

<div id="openModal" class="modalDialog">
  <div>
    <a href="#" title="Close" class="close">X</a>
    <h2>Modal Box</h2>
    <p>This is a sample modal box that can be created using the powers of CSS3.</p>
    <p>You could do a lot of things here like have a pop-up ad that shows when your website loads, or create a login/register form for users.</p>
  </div>
</div>
like image 380
Michael Benjamin Avatar asked Nov 09 '14 15:11

Michael Benjamin


1 Answers

When you click on href="#openModal", it finds the fragment with id="openModal" and puts the focus on it. Changing its state. The css .modalDialog:target comes into action making the modal visible with opacity:1.

When you click on href="#close", it tries to find fragment id="close", which is not present. It also removes focus from any other fragment, making modalDialog loose focus. So nothing remains in focus. and modal closes.

like image 146
DrEarnest Avatar answered Sep 23 '22 06:09

DrEarnest