Skip to content

Instantly share code, notes, and snippets.

@hawkrives
Forked from JoelBesada/dabblet.css
Created March 19, 2012 15:04
Show Gist options
  • Select an option

  • Save hawkrives/2115504 to your computer and use it in GitHub Desktop.

Select an option

Save hawkrives/2115504 to your computer and use it in GitHub Desktop.
CSS States
/* CSS States */
body {
background: url(http://dabblet.com/img/noise.png);
background-color: #F5F2F0;
font-family: Georgia, serif;
font-size: 18px;
line-height: 1.6em;
text-shadow: 0 2px 0 white;
color: #222;
}
.wrapper {
width: 900px;
margin: 70px auto;
}
h1 {
font-family: Helvetica, Arial, sans-serif;
text-align: center;
font-size: 1.6em;
}
a {
text-decoration: none;
color: #B46919;
}
a:visited {
color: #834B0F;
}
a:hover {
color: #E9A051;
}
.device {
display: inline-block;
position: relative;
background:#AD0F0F;
width: 230px;
height: 450px;
padding: 20px 15px;
margin: 20px;
border-radius: 20px;
border: 1px solid #410707;
border-bottom-width: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.7),
inset 0 0 10px rgba(255,255,255,0.5),
inset 0 2px 2px rgba(255,255,255,0.25);
}
section {
display: inline-block;
vertical-align: top;
padding: 30px;
width: 500px;
}
small {
display: block;
margin-top: 20px;
opacity: 0.3;
text-align: center;
padding:
20px;
transition: opacity 0.5s;
}
small:hover {
opacity: 1;
}
.up, .down, .left, .right {
position: absolute;
z-index: 1001;
margin-left: 50%;
font-size: 40px;
width: 50px;
height: 50px;
background: #FFA03A;
border: 1px solid #915515;
box-shadow: 0 3px 0 #52300E,
inset 0 0 10px rgba(255,255,255,0.3);
appearance: none;
border-radius: 50px;
cursor: pointer;
}
.up:active, .down:active, .left:active, .right:active {
margin-top: 3px;
box-shadow: inset 0 1px 1px rgba(0,0,0,0.3);
}
.up:before, .down:before, .left:before, .right:before {
display: block;
position: absolute;
content: "";
width: 15px;
height: 15px;
border-radius: 15px;
background: #E4923D;
box-shadow: 0 2px 2px rgba(255,255,255,0.25),
inset 0 1px 0 rgba(0,0,0,0.5);
}
.up:after, .down:after, .left:after, .right:after {
display: block;
position: absolute;
content: "";
top: -5px;
left: -6px;
width: 60px;
height: 60px;
border-radius: 60px;
box-shadow: 0 2px 2px rgba(255,255,255,0.25),
inset 0 2px 2px rgba(0,0,0,0.5);
}
.up:active:after, .down:active:after, .left:active:after, .right:active:after {
top: -8px;
}
.up {
top: 300px;
left: -25px;
}
.up:before {
top: 5px;
left: 17px;
}
.down {
top: 400px;
left: -25px;
}
.down:before {
bottom: 5px;
left: 17px;
}
.left {
top: 350px;
left: -75px;
}
.left:before {
top: 17px;
left: 5px;
}
.right {
top: 350px;
left: 25px;
}
.right:before {
top: 17px;
right: 5px;
}
.up:active ~ .screen .char, .down:active ~ .screen .char, .left:active ~ .screen .char, .right:active ~ .screen .char {
transition: margin-top 2s linear,
margin-left 2s linear;
}
.up:active ~ .screen .char {
margin-top: -84px;
background-position: 0 -144px;
animation: walk-up 0.65s infinite;
}
.down:active ~ .screen .char {
margin-top: 90px;
background-position: 0 0;
animation: walk-down 0.65s infinite;
}
.left:active ~ .screen .char {
margin-left: -88px;
background-position: 0 -48px;
animation: walk-left 0.65s infinite;
}
.right:active ~ .screen .char {
margin-left: 88px;
background-position: 0 -96px;
animation: walk-right 0.65s infinite;
}
.screen {
position: relative;
margin: 0 auto;
padding: 128px 112px;
box-sizing: border-box;
width: 224px;
height: 256px;
overflow:hidden;
box-shadow: 0 0 20px rgba(255,255,255,0.25),
0 2px 1px rgba(255,255,255,0.15);
background: url("http://joelb.me/extassets/sprites/home-layer-1.png") no-repeat;
}
.overlay {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: url("http://joelb.me/extassets/sprites/home-layer-2.png") no-repeat;
box-shadow: inset 0 0 50px rgba(0,0,0,0.5);
z-index: 1000;
}
.char {
position: relative;
left: -16px;
background-image: url("http://joelb.me/extassets/sprites/old-man.png");
background-position: -32px 0;
width: 32px;
height: 48px;
transition-property: margin-top, margin-left, background-position;
transition-duration: 0;
transition-delay: 999999s;
transition-timing-function: linear;
}
@keyframes walk-up {
0%, 32.99% { background-position: 0 -144px; }
33%, 65.99% { background-position: 32px -144px; }
66%, 100% { background-position: -32px -144px; }
}
@keyframes walk-down {
0%, 32.99% { background-position: 0 0; }
33%, 65.99% { background-position: 32px 0; }
66%, 100% { background-position: -32px 0; }
}
@keyframes walk-left {
0%, 32.99% { background-position: 0 -48px; }
33%, 65.99% { background-position: 32px -48px; }
66%, 100% { background-position: -32px -48px; }
}
@keyframes walk-right {
0%, 32.99% { background-position: 0 -96px; }
33%, 65.99% { background-position: 32px -96px; }
66%, 100% { background-position: -32px -96px; }
}
<div class="wrapper">
<h1>Maintaining CSS Style States using "Infinite" Transition Delays</h1>
<div class="device">
<button class="up"></button>
<button class="down"></button>
<button class="left"></buton>
<button class="right"></button>
<div class="screen">
<div class="char"></div>
<div class="overlay"></div>
</div>
</div>
<section>
<p>
This demo is <strong>completely JavaScript-free</strong>.
Feel free to move the character around with the D-pad, and notice how it always
keeps its position after you stop moving.
</p>
<p>
This is made possible by using a virtually infinite transition delay, so that the
CSS rules never return to their default state. The character will always be stuck
in a transition and only moves when you hold down a button.
</p>
<p>
I've written a
<a target="_blank" href="http://joelb.me/blog/2012/maintaining-css-style-states-using-infinite-transition-delays/"> blog post </a> explanining how
this all works, but please keep in mind that things like this should ideally be handled
with Javascript. After all, this is a dirty hack, not a CSS feature.
</p>
</section>
<small>Credit goes to to <a target="_blank" href="http://www.tekepon.net/fsm/">First Seed Material</a> for the
character sprite, and <a target="_blank" href="http://vxresource.wordpress.com/2010/03/17/the-real-macks-tileset/">
Mack</a> for the map tileset.
</small>
</div>
{"view":"split-vertical","seethrough":"","prefixfree":"1","page":"html"}
@kaeasbaw

kaeasbaw commented Mar 8, 2024

Copy link
Copy Markdown

I've been on the lookout for a quality online casino experience and recently stumbled upon Spinyoo Casino. The site’s wide range of games has been a major draw for me, especially since options for online gaming can be limited here in New Zealand. The user interface is slick and easy to navigate, making my gaming experience enjoyable and straightforward. If you're in New Zealand and looking for a reliable online casino, I'd suggest giving Spinyoo Casino a try. Here’s their website: Spinyoo Casino . It’s definitely worth a visit.

I see people writing about Spinyoo Casino and no wonder, it's not a bad platform. Why not bad? Because there are even better ones like https://promocodemelbet.com . Here you will find a huge selection of casino games, ranging from classic slots to exciting table games. This application is not limited only to the gaming aspect - we also have the opportunity to bet on sports with high odds.

@Joseph34-eng

Copy link
Copy Markdown

Guys, I think I signed up for the Fortune Wins social casino because my coworkers were talking so enthusiastically about this site during our break that I got curious and wanted to try it out myself. They say you can create an account in literally a minute via email, but now I have some questions about security and identity verification.

@Joseph34-eng

Copy link
Copy Markdown

Now I’m really curious: how does the user verification process actually work, and what specific documents are usually required for it? And at what stage do they require identity verification—right away during registration to access the games, or later on, when you’ve accumulated bonuses and plan to redeem your Sweeps Coins for prizes?

@batemanpatric13-cloud

Copy link
Copy Markdown

Look, there’s no need to worry, this process is perfectly straightforward. You can usually start playing straight away after your registration, but in the case of converting Sweeps Coins, they will require some documents (e.g., your driver's licence or a passport and a bill showing your address) to be sent in for verification, in order to prevent the possibility of fraudulent activities. If you want to learn more about how casinos verify player identity online, I recommend reading the helpful breakdown on the Fortune Wins blog. That article helped me a lot when I was registering and answered a lot of my questions. Did you ever go through a KYC procedure on other websites, or is this your first time, btw?

@sasatachini

Copy link
Copy Markdown

The infinite transition-delay trick is clever, but it feels pretty fragile once you start depending on sibling order and :active for state. The demo also seems to have a few copy/paste issues, especially the unfinished url() values and the tag, so fixing those would make it easier to test what is actually happening. I’d definately be careful with pasted demos picking up unrelated links like https://tonybeteesti.com/, since they distract from the CSS mechanics more than they help. Still, as a hacky explanation of persistent CSS state, it gets the point across surprisingly well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment