content logo

React Accordions:

Gray React Accordion with Shadow

This accordion can be used to better sort items. Accordions can also be used to better categorize content. These items have a gray header. The background color of the texts is white. Titles and texts are all black. This accordion has an outer shadow around the header and text. Around the accordion is a thin gray border.

#

Gray Accordion Code

#

Simple Accordion with Shadow

#

React Accordion Code

#

HTML Accordion with Shadow

<!-- This script got from frontendfreecode.com -->
<div id="app"></div>
<div id="app2"></div>
<div id="app3"></div><a style="font-size: 8pt; text-decoration: none" target="_blank" href="http://frontendfreecode.com">Free Frontend</a>
                                                                            
.accordion {
  border: 1px solid rgba(0, 0, 0, 0.25);
  box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.25);
  width: 50%;
  margin: 5rem auto;
}
.accordion__button {
  padding: 1rem;
  border: none;
  width: 100%;
  text-align: left;
}
.accordion__drawer {
  overflow: hidden;
  transition: height 0.2s ease-in-out;
}
.accordion__paragraph {
  margin: 0;
  padding: 1rem;
}
function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}class Accordion extends React.Component {
  constructor(props) {
    super(props);_defineProperty(this, "onButtonClick",
    () => {
      this.openHeight = this.paragraph.offsetHeight;
      this.setState({
        isOpen: !this.state.isOpen });
    });this.state = { isOpen: false };}
  render() {
    const style = { height: this.state.isOpen ? this.openHeight : '0px' };
    return /*#__PURE__*/(
      React.createElement("div", { className: "accordion" }, /*#__PURE__*/
      React.createElement("button", { className: "accordion__button", type: "button", onClick: this.onButtonClick }, "Click Me to Open/Close"), /*#__PURE__*/
      React.createElement("div", { className: "accordion__drawer", style: style }, /*#__PURE__*/
      React.createElement("p", { className: "accordion__paragraph", ref: el => this.paragraph = el }, "Autem lorem aliquid consectetur amet. Dolor vel libero eaque sed elit autem eum optio explicabo delectus. Asperiores odio harum recusandae ipsum vitae similique rem itaque opsum autem sit. Nihil illo labore odit nostrum molestias aliquid explicabo vitae similique autem vel recusandae lorem voluptatem eaque rem harum molestias labore nihil odit itaque sed consectetur autem libero asperiores amet nostrum optio illo opsum odio eum dolor delectus sit ipsum. Elit similique autem voluptatem ipsum vel sed explicabo optio. Nostrum odio eaque sit elit libero harum rem delectus recusandae amet vitae labore opsum illo eum dolor lorem aliquid nihil asperiores. Odit consectetur molestias."))));
  }}
ReactDOM.render( /*#__PURE__*/React.createElement(Accordion, null), document.getElementById('app'));
ReactDOM.render( /*#__PURE__*/React.createElement(Accordion, null), document.getElementById('app2'));
ReactDOM.render( /*#__PURE__*/React.createElement(Accordion, null), document.getElementById('app3'));
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
<script src='https://cdnjs.cloudflare.com/ajax/libs/react/16.4.0/umd/react.development.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.4.0/umd/react-dom.development.js'></script>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- This script got from frontendfreecode.com -->

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
<script src='https://cdnjs.cloudflare.com/ajax/libs/react/16.4.0/umd/react.development.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.4.0/umd/react-dom.development.js'></script>
<style>
.accordion {
  border: 1px solid rgba(0, 0, 0, 0.25);
  box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.25);
  width: 50%;
  margin: 5rem auto;
}
.accordion__button {
  padding: 1rem;
  border: none;
  width: 100%;
  text-align: left;
}
.accordion__drawer {
  overflow: hidden;
  transition: height 0.2s ease-in-out;
}
.accordion__paragraph {
  margin: 0;
  padding: 1rem;
}
</style>

</head>
<body>
<div id="app"></div>
<div id="app2"></div>
<div id="app3"></div><div id="bcl"><a style="font-size:8pt;text-decoration:none;" href="http://www.devanswer.com">Free Frontend</a></div>
<script>
function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}class Accordion extends React.Component {
  constructor(props) {
    super(props);_defineProperty(this, "onButtonClick",
    () => {
      this.openHeight = this.paragraph.offsetHeight;
      this.setState({
        isOpen: !this.state.isOpen });
    });this.state = { isOpen: false };}
  render() {
    const style = { height: this.state.isOpen ? this.openHeight : '0px' };
    return /*#__PURE__*/(
      React.createElement("div", { className: "accordion" }, /*#__PURE__*/
      React.createElement("button", { className: "accordion__button", type: "button", onClick: this.onButtonClick }, "Click Me to Open/Close"), /*#__PURE__*/
      React.createElement("div", { className: "accordion__drawer", style: style }, /*#__PURE__*/
      React.createElement("p", { className: "accordion__paragraph", ref: el => this.paragraph = el }, "Autem lorem aliquid consectetur amet. Dolor vel libero eaque sed elit autem eum optio explicabo delectus. Asperiores odio harum recusandae ipsum vitae similique rem itaque opsum autem sit. Nihil illo labore odit nostrum molestias aliquid explicabo vitae similique autem vel recusandae lorem voluptatem eaque rem harum molestias labore nihil odit itaque sed consectetur autem libero asperiores amet nostrum optio illo opsum odio eum dolor delectus sit ipsum. Elit similique autem voluptatem ipsum vel sed explicabo optio. Nostrum odio eaque sit elit libero harum rem delectus recusandae amet vitae labore opsum illo eum dolor lorem aliquid nihil asperiores. Odit consectetur molestias."))));
  }}
ReactDOM.render( /*#__PURE__*/React.createElement(Accordion, null), document.getElementById('app'));
ReactDOM.render( /*#__PURE__*/React.createElement(Accordion, null), document.getElementById('app2'));
ReactDOM.render( /*#__PURE__*/React.createElement(Accordion, null), document.getElementById('app3'));
</script>

</body>
</html>
Preview