content logo

React Buttons:

React Button with CSS Transitions Effect

In this post, you will see some buttons. All of these buttons are similar. The title of each button is white and the button itself is blue. The edges of the buttons are also not sharp and have a radius border. You can see an effect by clicking on any of the buttons. One of the buttons changed the color of the button. Another displays an item like an accordion and another displays a pop-up.

#

React Button Code

#

React Button Transition Effect

#

HTML Animating React Button

#

CSS Button Transition Code

<!-- This script got from frontendfreecode.com -->
<div id="app"></div><a style="font-size: 8pt; text-decoration: none" target="_blank" href="http://frontendfreecode.com">Free Frontend</a>
                                                                            
*,
*::before,
*::after {
  box-sizing: border-box;
}

body,
h1,
p {
  margin: 0;
}

button {
  color: inherit;
  font: inherit;
  -webkit-font-smoothing: inherit;
  letter-spacing: inherit;
  margin: 0;
}

button {
  background: initial;
  border: 0;
  cursor: pointer;
  padding: 0;
  text-align: inherit;
}
[hidden] {
  display: block;
}
html,
body,
.app {
  height: 100%;
}
html {
  color: #4bb;
  font: 14px/1 "Proxima Nova", "Helvetica Neue", Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  letter-spacing: 0.02em;
}
.app {
  perspective: 600px;
}
.main {
  max-width: 600px;
  min-height: 100%;
  margin: 0 auto;
}
.app-title {
  border-bottom: 5px solid #4bb;
  font-size: 100px;
  letter-spacing: -0.03em;
  line-height: 0.8;
  margin-bottom: 0.5em;
  padding: 1em 0 0.5em;
}
.app-subheading {
  font-size: 3em;
}
.app-list {
  font-size: 2em;
}
.app-list-item {
  line-height: 1.5;
}
.demo-4, .demo-3, .demo-2, .demo-1 {
  margin-bottom: 2em;
}
.demo-3 .something, .demo-2-box, .demo-4-button, .demo-3-button, .demo-2-button, .demo-1-button {
  font-size: 2em;
  font-weight: bold;
  line-height: 3em;
  margin-bottom: 1em;
  padding: 0 1em;
  text-align: center;
}
.demo-4-button, .demo-3-button, .demo-2-button, .demo-1-button {
  width: 100%;
  background: #4bb;
  border-radius: 1.5em;
  color: #fff;
  transition: background 0.5s;
}
.demo-4-button:hover, .demo-3-button:hover, .demo-2-button:hover, .demo-1-button:hover {
  opacity: 0.9;
}
.demo-4-button:active, .demo-3-button:active, .demo-2-button:active, .demo-1-button:active {
  opacity: 0.7;
}
.demo-3 .something, .demo-2-box {
  background: rgba(68, 119, 119, 0.2);
  color: #477;
  transition: opacity 0.5s;
}
.demo-1-button.transition-me {
  background: #f03;
}
.demo-2-box {
  opacity: 1;
}
.demo-2-box[hidden] {
  opacity: 0;
}
.demo-3 .something.jacob-enter {
  opacity: 0;
}
.demo-3 .something.jacob-enter-active {
  opacity: 1;
}
.demo-3 .something.jacob-leave {
  opacity: 1;
}
.demo-3 .something.jacob-leave-active {
  opacity: 0;
}
.dialog-overlay {
  width: 100%;
  height: 100%;
  background: rgba(255, 255, 255, 0.8);
  pointer-events: none;
  position: fixed;
  top: 0;
  left: 0;
  text-align: center;
  transition: background 0.5s;
}
.dialog-overlay::before {
  width: 1px;
  height: 100%;
  content: "";
  display: inline-block;
  margin-right: -1px;
  vertical-align: middle;
}
.dialog-body {
  width: 100%;
  max-width: 720px;
  background: #fff;
  border-radius: 6px;
  box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3);
  display: inline-block;
  padding: 100px;
  position: relative;
  text-align: left;
  transition: 1.5s cubic-bezier(0.2, 1, 0.2, 1);
  vertical-align: middle;
}
.dialog-enter, .dialog-leave.dialog-leave-active {
  background: rgba(255, 255, 255, 0.01);
}
.dialog-enter .dialog-body, .dialog-leave.dialog-leave-active .dialog-body {
  opacity: 0.01;
  transform: translate3d(0, 10px, -20px);
}
.dialog-enter-active, .dialog-leave {
  background: rgba(255, 255, 255, 0.8);
}
.dialog-enter-active .dialog-body, .dialog-leave .dialog-body {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}
let { CSSTransitionGroup } = React.addons;
window.Dispatcher = _.extend({}, Backbone.Events);
var local = JSON.parse(localStorage.getItem('react-demo')),
Model = Backbone.Model.extend({}),
muon;
if (local) {
  muon = new Model(local);
} else {
  muon = new Model({});
}
var Something = React.createClass({ displayName: "Something",
  render: function () {
    return /*#__PURE__*/(
      React.createElement("div", { className: "something" }, "Something"));
  } });
var Dialog = React.createClass({ displayName: "Dialog",
  render: function () {
    return /*#__PURE__*/(
      React.createElement("div", { className: "dialog-overlay" }, /*#__PURE__*/
      React.createElement("div", { className: "dialog-body" }, /*#__PURE__*/
      React.createElement("h1", null, "This is a dialog, yo."))));
  } });
var App = React.createClass({ displayName: "App",
  getInitialState: function () {
    return _.extend({
      demo_1: false,
      demo_2: true,
      demo_3: null,
      demo_4: null },
    this.props.model.toJSON());
  },
  componentDidMount: function () {
    var component = this;
    component.props.model.on('change', function (model) {
      var json = model.toJSON();
      component.setState(json);
      localStorage.setItem('react-demo', JSON.stringify(json));
      console.log('Changes saved to localStorage', json);
    });
    muon.set({ app_mounted: true });
  },
  render: function () {
    return /*#__PURE__*/(
      React.createElement("div", { className: this.getClasses() }, /*#__PURE__*/
      React.createElement("div", { className: "main" }, /*#__PURE__*/
      React.createElement("div", { className: "demo-1" }, /*#__PURE__*/
      React.createElement("button", { className: this.getDemo1Classes(), onClick: this.toggleForDemo1 }, "Transition by toggling classes")), /*#__PURE__*/
      React.createElement("div", { className: "demo-2" }, /*#__PURE__*/
      React.createElement("button", { className: "demo-2-button", onClick: this.toggleForDemo2 }, "Transition using hidden attribute"), /*#__PURE__*/
      React.createElement("div", { className: "demo-2-box", hidden: this.state.demo_2 }, "I was [hidden], but now I\u2019m not.")), /*#__PURE__*/
      React.createElement("div", { className: "demo-3" }, /*#__PURE__*/
      React.createElement("button", { className: "demo-3-button", onClick: this.toggleForDemo3 }, "Same transition with React"), /*#__PURE__*/
      React.createElement(CSSTransitionGroup, { transitionName: "jacob" },
      this.state.demo_3), /*#__PURE__*/
      React.createElement("h2", { className: "app-subheading" }, ""), /*#__PURE__*/
      React.createElement("div", { className: "demo-4" }, /*#__PURE__*/
      React.createElement("button", { className: "demo-4-button", onClick: this.toggleForDemo4 }, "Duration and child transitions"))), /*#__PURE__*/
      React.createElement(CSSTransitionGroup, { transitionName: "dialog" },
      this.state.demo_4))));
  },
  getDemo1Classes: function () {
    var s = this.state;
    return React.addons.classSet({
      'demo-1-button': true,
      'transition-me': this.state.demo_1 });
  },
  toggleForDemo1: function () {
    this.setState({ demo_1: !this.state.demo_1 });
  },
  toggleForDemo2: function () {
    this.setState({ demo_2: !this.state.demo_2 });
  },
  toggleForDemo3: function () {
    if (!this.state.demo_3) {
      this.setState({ demo_3: /*#__PURE__*/React.createElement(Something, null) });
    } else {
      this.setState({ demo_3: null });
    }
  },
  toggleForDemo4: function () {
    if (!this.state.demo_4) {
      this.setState({ demo_4: /*#__PURE__*/React.createElement(Dialog, null) });
    } else {
      this.setState({ demo_4: null });
    }
  },
  getClasses: function () {
    var s = this.state;
    return React.addons.classSet({
      'app': true,
      'dialog-open': s.dialog });
  } });
React.render( /*#__PURE__*/React.createElement(App, { model: muon }), document.getElementById('app'));
<script src='https://cdnjs.cloudflare.com/ajax/libs/react/0.13.3/react-with-addons.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.2/underscore-min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js'></script>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- This script got from frontendfreecode.com -->

<script src='https://cdnjs.cloudflare.com/ajax/libs/react/0.13.3/react-with-addons.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.2/underscore-min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js'></script>
<style>
*,
*::before,
*::after {
  box-sizing: border-box;
}

body,
h1,
p {
  margin: 0;
}

button {
  color: inherit;
  font: inherit;
  -webkit-font-smoothing: inherit;
  letter-spacing: inherit;
  margin: 0;
}

button {
  background: initial;
  border: 0;
  cursor: pointer;
  padding: 0;
  text-align: inherit;
}
[hidden] {
  display: block;
}
html,
body,
.app {
  height: 100%;
}
html {
  color: #4bb;
  font: 14px/1 "Proxima Nova", "Helvetica Neue", Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  letter-spacing: 0.02em;
}
.app {
  perspective: 600px;
}
.main {
  max-width: 600px;
  min-height: 100%;
  margin: 0 auto;
}
.app-title {
  border-bottom: 5px solid #4bb;
  font-size: 100px;
  letter-spacing: -0.03em;
  line-height: 0.8;
  margin-bottom: 0.5em;
  padding: 1em 0 0.5em;
}
.app-subheading {
  font-size: 3em;
}
.app-list {
  font-size: 2em;
}
.app-list-item {
  line-height: 1.5;
}
.demo-4, .demo-3, .demo-2, .demo-1 {
  margin-bottom: 2em;
}
.demo-3 .something, .demo-2-box, .demo-4-button, .demo-3-button, .demo-2-button, .demo-1-button {
  font-size: 2em;
  font-weight: bold;
  line-height: 3em;
  margin-bottom: 1em;
  padding: 0 1em;
  text-align: center;
}
.demo-4-button, .demo-3-button, .demo-2-button, .demo-1-button {
  width: 100%;
  background: #4bb;
  border-radius: 1.5em;
  color: #fff;
  transition: background 0.5s;
}
.demo-4-button:hover, .demo-3-button:hover, .demo-2-button:hover, .demo-1-button:hover {
  opacity: 0.9;
}
.demo-4-button:active, .demo-3-button:active, .demo-2-button:active, .demo-1-button:active {
  opacity: 0.7;
}
.demo-3 .something, .demo-2-box {
  background: rgba(68, 119, 119, 0.2);
  color: #477;
  transition: opacity 0.5s;
}
.demo-1-button.transition-me {
  background: #f03;
}
.demo-2-box {
  opacity: 1;
}
.demo-2-box[hidden] {
  opacity: 0;
}
.demo-3 .something.jacob-enter {
  opacity: 0;
}
.demo-3 .something.jacob-enter-active {
  opacity: 1;
}
.demo-3 .something.jacob-leave {
  opacity: 1;
}
.demo-3 .something.jacob-leave-active {
  opacity: 0;
}
.dialog-overlay {
  width: 100%;
  height: 100%;
  background: rgba(255, 255, 255, 0.8);
  pointer-events: none;
  position: fixed;
  top: 0;
  left: 0;
  text-align: center;
  transition: background 0.5s;
}
.dialog-overlay::before {
  width: 1px;
  height: 100%;
  content: "";
  display: inline-block;
  margin-right: -1px;
  vertical-align: middle;
}
.dialog-body {
  width: 100%;
  max-width: 720px;
  background: #fff;
  border-radius: 6px;
  box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3);
  display: inline-block;
  padding: 100px;
  position: relative;
  text-align: left;
  transition: 1.5s cubic-bezier(0.2, 1, 0.2, 1);
  vertical-align: middle;
}
.dialog-enter, .dialog-leave.dialog-leave-active {
  background: rgba(255, 255, 255, 0.01);
}
.dialog-enter .dialog-body, .dialog-leave.dialog-leave-active .dialog-body {
  opacity: 0.01;
  transform: translate3d(0, 10px, -20px);
}
.dialog-enter-active, .dialog-leave {
  background: rgba(255, 255, 255, 0.8);
}
.dialog-enter-active .dialog-body, .dialog-leave .dialog-body {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}
</style>

</head>
<body>
<div id="app"></div><div id="bcl"><a style="font-size:8pt;text-decoration:none;" href="http://www.devanswer.com">Free Frontend</a></div>
<script>
let { CSSTransitionGroup } = React.addons;
window.Dispatcher = _.extend({}, Backbone.Events);
var local = JSON.parse(localStorage.getItem('react-demo')),
Model = Backbone.Model.extend({}),
muon;
if (local) {
  muon = new Model(local);
} else {
  muon = new Model({});
}
var Something = React.createClass({ displayName: "Something",
  render: function () {
    return /*#__PURE__*/(
      React.createElement("div", { className: "something" }, "Something"));
  } });
var Dialog = React.createClass({ displayName: "Dialog",
  render: function () {
    return /*#__PURE__*/(
      React.createElement("div", { className: "dialog-overlay" }, /*#__PURE__*/
      React.createElement("div", { className: "dialog-body" }, /*#__PURE__*/
      React.createElement("h1", null, "This is a dialog, yo."))));
  } });
var App = React.createClass({ displayName: "App",
  getInitialState: function () {
    return _.extend({
      demo_1: false,
      demo_2: true,
      demo_3: null,
      demo_4: null },
    this.props.model.toJSON());
  },
  componentDidMount: function () {
    var component = this;
    component.props.model.on('change', function (model) {
      var json = model.toJSON();
      component.setState(json);
      localStorage.setItem('react-demo', JSON.stringify(json));
      console.log('Changes saved to localStorage', json);
    });
    muon.set({ app_mounted: true });
  },
  render: function () {
    return /*#__PURE__*/(
      React.createElement("div", { className: this.getClasses() }, /*#__PURE__*/
      React.createElement("div", { className: "main" }, /*#__PURE__*/
      React.createElement("div", { className: "demo-1" }, /*#__PURE__*/
      React.createElement("button", { className: this.getDemo1Classes(), onClick: this.toggleForDemo1 }, "Transition by toggling classes")), /*#__PURE__*/
      React.createElement("div", { className: "demo-2" }, /*#__PURE__*/
      React.createElement("button", { className: "demo-2-button", onClick: this.toggleForDemo2 }, "Transition using hidden attribute"), /*#__PURE__*/
      React.createElement("div", { className: "demo-2-box", hidden: this.state.demo_2 }, "I was [hidden], but now I\u2019m not.")), /*#__PURE__*/
      React.createElement("div", { className: "demo-3" }, /*#__PURE__*/
      React.createElement("button", { className: "demo-3-button", onClick: this.toggleForDemo3 }, "Same transition with React"), /*#__PURE__*/
      React.createElement(CSSTransitionGroup, { transitionName: "jacob" },
      this.state.demo_3), /*#__PURE__*/
      React.createElement("h2", { className: "app-subheading" }, ""), /*#__PURE__*/
      React.createElement("div", { className: "demo-4" }, /*#__PURE__*/
      React.createElement("button", { className: "demo-4-button", onClick: this.toggleForDemo4 }, "Duration and child transitions"))), /*#__PURE__*/
      React.createElement(CSSTransitionGroup, { transitionName: "dialog" },
      this.state.demo_4))));
  },
  getDemo1Classes: function () {
    var s = this.state;
    return React.addons.classSet({
      'demo-1-button': true,
      'transition-me': this.state.demo_1 });
  },
  toggleForDemo1: function () {
    this.setState({ demo_1: !this.state.demo_1 });
  },
  toggleForDemo2: function () {
    this.setState({ demo_2: !this.state.demo_2 });
  },
  toggleForDemo3: function () {
    if (!this.state.demo_3) {
      this.setState({ demo_3: /*#__PURE__*/React.createElement(Something, null) });
    } else {
      this.setState({ demo_3: null });
    }
  },
  toggleForDemo4: function () {
    if (!this.state.demo_4) {
      this.setState({ demo_4: /*#__PURE__*/React.createElement(Dialog, null) });
    } else {
      this.setState({ demo_4: null });
    }
  },
  getClasses: function () {
    var s = this.state;
    return React.addons.classSet({
      'app': true,
      'dialog-open': s.dialog });
  } });
React.render( /*#__PURE__*/React.createElement(App, { model: muon }), document.getElementById('app'));
</script>

</body>
</html>
Preview