
Welcome to Alternative Widgets! This site is an alternative to popular code libraries.
Unlike JQuery, Bootstrap, and similar plug-ins, these are easy to alter, have a bare minimum of code, and wrap any content.
You do not have to know JavaScript to use these widgets, but you should be comfortable with HTML and CSS so that you can alter the styles to suit your needs.
Explore the widgets below. You will find a demo, HTML, CSS, and JavaScript for each.
Purpose:
Click on an element to reveal some content, and click again to hide it. This is useful for question/answer situations or just to contain large content until called upon.
To apply:
Example:
Darth Vader!
Purpose:
Create a pop-up and gray out the page behind it.
Please note this widget is meant to allow any element to open a widget that can contain any number of other elements. If you want a simple image pop-out, use the Image Pop-Out Modals widget instead.
To apply:
Optional:
Zoom-In Effect: By default the modals open with a zoom-in effect. If you don't like it just remove the line animation: modalZoomIn .25s; from the "modalContent" class in the CSS.
Fade-In Effect: The modal can open with a subtle fade-in effect instead. To apply, replace the zoom-in line above with animation: modalFadeIn .25s; on the "modalContent" class in the CSS.
Additional Close Button: If you want to create an additional button that closes the modal within the modal's content, apply style = "cursor: pointer;" and onclick="closeModal();" to the opening tag of the element used as the button.
Example:
Purpose:
Create a pop-out for images.
Please note this widget is meant to pop out images only. If you want a pop-out modal that can contain any content, use the Modals widget instead.
To apply:
The imageModalClose button is not required because the modal will close when the background is clicked. It's just a more obvious exit.
Optional:
Captions: You can pull page content into the modal to serve as a caption.
Zoom-In Effect: By default the image and caption open with a zoom-in effect. If you don't like it, remove the line animation: imageModalZoomIn .25s; from both the "imageModalBackground img" and "imageCaptionContainer" IDs in the CSS.
Fade-In Effect: The image and caption can open with a subtle fade-in effect instead. If you prefer that, replace the line animation: imageModalZoomIn .25s; with animation: imageModalFadeIn .25s; for both the "imageModalBackground img" and "imageCaptionContainer" IDs in the CSS.
Example:
Purpose:
Replace content with a click.
This simple widget has no menu, unlike other widgets on this site. It can also take any content, not just images like in the example.
To apply:
Please note, the JavaScript for this widget must be placed after the related content. It can be embedded in a script tag or referenced externally. But it will not work if referenced above the content.
Example:
Click the word bananas to replace the apple below. Click the word cherry to see a cherry. And click the word apple to restore the apple.
Purpose:
This tool adds hidden content to a page, one segment at a time. It is useful for long pages, especially when the content is laid out in rows or lists.
To apply:
Example:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Purpose:
Reveal content as a user scrolls down the page.
To apply:
Wrap each block to be revealed in a div with the class "scrollBlock". (The first block will be displayed on page load.) When the bottom of the last displayed block enters the screen frame, the next block is revealed.
Please note, the JavaScript for this widget must be placed after the related content. It can be embedded in a script tag or referenced externally. But it will not work if referenced above the content.
Example:
Each image below is contained in a scrollBlock which appears as you scroll down. Notice the scroll bar at the right of your browser adjust as the blocks are added to the screen. If you missed it the first time, just refresh the browser.
Purpose:
Contain numerous sections in a small area, and make each quickly accessible on one page. When one opens, the others close.
To apply:
Please note, the JavaScript for this widget must be referenced after the content to which it applies. It can be embedded or referenced externally.
You might have multiple accordions on your page. If a user opens a page on accordion1, then opening a page on accordion2 will make open pages in other accordions close. If that will be a problem, there are additional steps that will fix it, but I made them separate to make the basic coding as simple as possible. Click below to get the multiple accordion solution.
To make multiple accordions function independently of each other:
Example:
Praesent condimentum interdum elit iaculis laoreet. Vestibulum non molestie orci. Proin quis justo quam. Morbi tempus quis elit nec scelerisque. Quisque hendrerit orci enim. Pellentesque eget hendrerit augue. Nulla accumsan turpis at diam cursus varius. Ut sem ipsum, eleifend sit amet egestas a, volutpat sed augue. Aenean a risus interdum metus tincidunt imperdiet in quis erat. Proin tincidunt iaculis efficitur. Sed molestie lectus vel quam convallis tempor sed vel eros. Ut interdum sem a rutrum venenatis. Vivamus sit amet dapibus sem. Etiam in ultricies dui. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam non velit nec nisi aliquet consequat.
Fusce et leo nec est imperdiet facilisis a in elit. Pellentesque pellentesque metus ut consectetur euismod. Vestibulum molestie augue id accumsan vestibulum. Suspendisse potenti. Sed nec facilisis metus, eget tincidunt magna. Donec odio augue, ultrices ut suscipit non, consequat non massa. Vestibulum molestie id sem quis auctor. Nunc egestas mi sed nunc imperdiet, et luctus nulla congue. Aliquam erat volutpat. Donec risus urna, vulputate eu orci in, ultricies elementum metus. Praesent non euismod diam. Nullam varius rutrum magna in auctor. Morbi mattis dolor et diam vulputate accumsan. Sed vel nisl maximus, pretium dolor nec, commodo sapien.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam vel consectetur metus, nec maximus dolor. Cras sapien diam, ultricies ut volutpat sed, fringilla quis nunc. Sed sed risus lorem. Aenean non sapien vitae leo lobortis eleifend sit amet vel lectus. Pellentesque porta ligula eu dignissim lacinia. Praesent sed posuere turpis, in semper nunc. Nam consectetur, leo quis fermentum euismod, neque nibh sagittis arcu, at consectetur nibh felis tempor quam. Curabitur viverra posuere nisl, non venenatis eros imperdiet a. Fusce eu metus nibh. Donec id dolor dolor.
Etiam condimentum rutrum faucibus. Suspendisse sed accumsan quam, a vehicula enim. Pellentesque posuere augue quis nunc condimentum, quis pulvinar purus sollicitudin. Sed orci mauris, hendrerit a pellentesque eu, venenatis at sapien. Vestibulum vel ultricies nisl. Maecenas vitae est elementum tellus maximus iaculis. Vestibulum fringilla porta interdum. Aliquam dictum, lorem vitae tincidunt semper, lectus lorem semper ipsum, quis rhoncus nisi leo ullamcorper libero. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer vehicula ullamcorper laoreet. Duis eget neque a nisi faucibus malesuada. Donec quis est molestie, tempor dui sit amet, suscipit arcu. Nullam eget feugiat leo, ac porta felis. Donec hendrerit purus et auctor tempor. Nunc commodo, dolor vitae elementum convallis, est eros vulputate ipsum, sit amet mollis nisi est id risus. Morbi egestas a tellus eget viverra.
In dui augue, molestie id feugiat sit amet, ultricies eget felis. Nulla pharetra pulvinar urna, sit amet semper dolor maximus sed. Donec congue magna placerat quam ullamcorper sodales vel sit amet lorem. Pellentesque id massa at velit convallis porta. Proin auctor neque tellus, eget sagittis nulla vehicula a. Etiam orci eros, aliquet imperdiet ligula ultricies, viverra vehicula sem. Duis blandit pulvinar lorem, in viverra felis porta id.
Praesent non est consectetur, aliquet sem vitae, aliquet ipsum. Praesent in augue ut massa lacinia ullamcorper quis ac purus. Quisque nec suscipit nisi. Nulla facilisi. Integer arcu urna, fringilla id suscipit sed, fringilla non ex. Phasellus mollis ante vel gravida semper. Morbi in vestibulum felis, varius pharetra orci. Aliquam nunc lorem, suscipit ac interdum quis, placerat eu tellus. Nulla ut euismod purus, ac fringilla purus. Ut lobortis nec sapien lacinia porttitor. Nulla facilisi. Praesent metus sem, imperdiet ut euismod a, interdum ut neque. Fusce tristique euismod dapibus. Nulla efficitur bibendum placerat. Etiam ut ligula et nibh euismod malesuada at nec est.
Integer ut vehicula erat. Aenean volutpat nisl sem, vitae sagittis felis auctor eu. Nam mattis elit eget purus suscipit dapibus. Pellentesque maximus molestie feugiat. Sed volutpat, lorem sit amet consectetur vulputate, quam orci molestie urna, ac dignissim est magna id nisi. Mauris fringilla consequat leo, sed laoreet nibh laoreet non. Etiam at mauris dapibus, euismod nisi nec, fringilla ex. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum aliquet arcu id sagittis aliquet. Vivamus dui leo, imperdiet vitae eros non, molestie ultricies lacus. Maecenas placerat orci eget nisl ultricies suscipit.
Proin mollis mi at est luctus porttitor. Aliquam erat volutpat. Curabitur in lectus eu sem consectetur molestie. Vivamus libero lacus, euismod id quam ac, fermentum eleifend mi. Maecenas viverra ligula at venenatis mattis. Maecenas rhoncus tincidunt vestibulum. Nulla facilisi. Morbi eu eros eget augue vehicula eleifend eu id mi. Curabitur ullamcorper ipsum maximus mauris tristique, a pulvinar sem aliquam. Nulla quis fermentum mauris. Praesent nec ipsum vel justo finibus ullamcorper varius nec sem. Nullam mollis, dui at commodo porta, enim velit posuere erat, a congue ipsum nibh et odio. Aliquam quam est, cursus venenatis nibh ut, cursus dapibus libero. Integer ultricies, dui ac tempus porttitor, nibh magna faucibus metus, vitae ullamcorper ipsum ipsum sit amet nisl.
Purpose:
Load pages on click with the back and next buttons. The sections can take any content, not just images. Use them for entire pages, or just place images within for a gallery.
To apply:
The back and next buttons will display above the page's contents, but they are transparent until hovered over.
Example:
Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable.
The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Purpose:
Load pages on click with the back and next buttons, while a page counter updates. The sections can take any content, not just images. Use them for entire pages, or just place images within for a gallery.
To apply:
Please note, the JavaScript for this widget must be placed after the related gallery content in a script tag. It can be embedded in a script tag or referenced externally. But it will not work if referenced above the content.
Example:
Example of page-wide mixed content.
Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.
The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.
Purpose:
Create pages which rotate automatically. The pages can take any content, not just images
To apply:
Please note, the JavaScript for this widget must be referenced after the content to which it applies. It can be embedded or referenced externally. The first page will not load until the first interval if the script comes before the content.
Example:
Purpose:
Create rotating pages with stops. When a stop is clicked, the rotation ends.
To apply:
Please note, the JavaScript for this widget must be referenced after the content to which it applies. It can be embedded or referenced externally. But the widget will not work if the script comes before the content.
The sections can take any content, not just images. So this tool can be used for entire pages.
Purpose:
Create a grid of images. Clicking an individual image will expand it and hide the grid. If you have any other content, like a caption, it can be hidden from the grid but appear when the grid item is selected.
This widget is a lot like the main navigation of this site, which is also downloadable as the icon menu widget, but here it is optimized for images.
To apply:
Please note, the functions in the JavaScript end with a jump back to the top of the gridContainer and openGridItemContainer, depending on which is opened. That way users always land at the top of the image, or the top of the gallery, however far down they may have scrolled earlier. If you want to remove that, just find the two instances of the scrollIntoView call and remove them.
Optional: You can open a gridItem on page load, using the URL's hash to determine page content. Click below to get the code that updates the grid gallery by URL.
To open a gridItem on page load:
Follow all the steps above, but use this JavaScript file instead. This version of the JavaScript must be referenced after the content to which it applies. It can be embedded or referenced externally.
When a gridItem is opened, the URL will have the gridItem's ID in the hash. You can use that extended URL to open the gridItem directly.
Example:
The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.
Integer ut vehicula erat. Aenean volutpat nisl sem, vitae sagittis felis auctor eu. Nam mattis elit eget purus suscipit dapibus. Pellentesque maximus molestie feugiat. Sed volutpat, lorem sit amet consectetur vulputate, quam orci molestie urna, ac dignissim est magna id nisi. Mauris fringilla consequat leo, sed laoreet nibh laoreet non. Etiam at mauris dapibus, euismod nisi nec, fringilla ex. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum aliquet arcu id sagittis aliquet. Vivamus dui leo, imperdiet vitae eros non, molestie ultricies lacus. Maecenas placerat orci eget nisl ultricies suscipit.
Purpose:
This creates a left/right "sliding" container with previews for an optional viewport.
To apply:
Please note, the JavaScript for this widget must be referenced after the content to which it applies. It can be embedded or referenced externally. But the widget will not work if the script comes before the content.
Options & Variations
The viewport and the invidual segments in the slider can take any content, not just images. If the viewport contents end up being different heights, the slider below will keep bouncing up and whenever the viewport updates. You can simply move the viewport below the slider. (Content below the viewport will still move around but at least the slider menu is in place.)
Alternatively you can add a fixed height to the viewport and have a vertical scroll bar appear within it, which might look a bit awkward.
You don't have to have the viewport. You can use the slider as a gallery unto itself which opens nothing for example. (In which case remove the "cursor: pointer;" style from the sliderContent class.) Or you can use the contents to open links to other pages.
You can also use the slider's contents to open modals for a Netflix-like interface. To apply modals:
You can have multiple sliders on the same page for a Netflix-like layout.
To apply:
Example:
Purpose:
This widget creates a page selector with a horizontal menu, which becomes a drop menu on narrow screens.
If you are using a mobile device, or if you undock and narrow down your browser, you should see the drop menu instead.
There is also a vertical menu version.
To apply:
Please note, the JavaScript for this widget must be referenced after the content to which it applies. It can be embedded or referenced externally. But the widget will not work if the script comes before the content.
By default the horizontal menu is replaced by the drop menu at a screen width of 500px. This should account for most phones at vertical orientation. If you want to change the width at which the drop menu is triggered, follow the steps below.
You might have multiple horizontal pagination widgets on your page. If a user opens a page on one, then opening a page on another will cause all open pages in other horizontal pagination widgets to close. These additional steps that will fix this. I made them separate to make the basic coding as simple as possible.
Example:
Page 1: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Page 2: Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?
Page 3: It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).
Page 4: There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable.
Page 5: The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Purpose:
This widget creates a multi-page selector with a vertical menu which is set to the left of the pages.
There is also a horizontal version of the menu.
To apply:
Please note, the JavaScript for this widget must be referenced after the content to which it applies. It can be embedded or referenced externally. But the widget will not work if the script comes before the content.
Caution: This kind of menu does not look good on narrow screens because the pages will become too narrow. Consider using a drop menu instead.
You might have multiple vertical pagination widgets on your page. If a user opens a page on one, all open pages in other vertical pagination widgets will close.
To make multiple vertical pagination widgets function independently of each other:
Example:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable.
The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Purpose:
Create a countdown clock to alert users to deadlines, or promote upcoming events.
To apply:
The countdown is triggered on page load.
There is no CSS necessary for this tool. Style the "countdownText" container as you see fit.
Please note, the user-side time entry field below is just for this demonstration. In the tool's code, you must enter the time in the script's variable.
Example:
Enter a new date and time below with the same format, and click submit to see the countdown change.
Enter a past date to verify that your displayAfterCountdown message displays.
Purpose:
Automatically change content, or just reveal content, at a specific point in time.
To apply:
There is no CSS necessary for this widget beyond what has been mentioned above.
Please note, the JavaScript for this widget must be placed after the related content. It can be embedded in a script tag or referenced externally. But it will not work if referenced above the content.
Also, the user-side time entry field below is just for this demonstration. In the widget's code, you must enter the time in the variable.
Example:
Enter a new date and time below with the same format, and click submit to see the paragraph below change.
Purpose:
Create content which changes to accomodate device width via media queries.
This is really just an explanation, not a widget. I have encountered a lot of unnecessarily complicated descriptions of responsive design online. Basically it's about making your page display differently based on screen widths. There are three ways to achieve this:
The third version is used in this example, and throughout this site. Media query explanations are also often overly complicated. The only version you have to worry about in this context is the screen width query below.
To apply:
This is a media query.
@media screen and (max-width: 720px){
YOUR CLASS HERE
}
If you're on a desktop or laptop, undock and narrow your browser. You will see the following changes in the example below:
A great way to make divs responsive is to change their widths, and also display style from "inline-block" to "block" on narrow screens. They will sit side-by-side on wide screens and atop each other on narrow screens.
Example:
Purpose:
Create asides which float to the left or right of content, and which expand to full width on narrow screens. The code provides for images and captions within the asides. The code also provides a full width image and caption option.
To apply:
Example:
Test the responsiveness of the asides by simply undocking your browser and narrowing it down. If you are on a phone they will already be full width. The last example is already full width, but demonstrates you can use it for full width images and captions.
Try adding a little salt on sliced apples for a sweet and savory snack.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?
Try spreading strawberry jam on bananas for a quick snack.
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Integer ut vehicula erat. Aenean volutpat nisl sem, vitae sagittis felis auctor eu. Nam mattis elit eget purus suscipit dapibus. Pellentesque maximus molestie feugiat. Sed volutpat, lorem sit amet consectetur vulputate, quam orci molestie urna, ac dignissim est magna id nisi. Mauris fringilla consequat leo, sed laoreet nibh laoreet non. Etiam at mauris dapibus, euismod nisi nec, fringilla ex. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum aliquet arcu id sagittis aliquet. Vivamus dui leo, imperdiet vitae eros non, molestie ultricies lacus. Maecenas placerat orci eget nisl ultricies suscipit.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Do you prefer yellow or brown pears?
Proin mollis mi at est luctus porttitor. Aliquam erat volutpat. Curabitur in lectus eu sem consectetur molestie. Vivamus libero lacus, euismod id quam ac, fermentum eleifend mi. Maecenas viverra ligula at venenatis mattis. Maecenas rhoncus tincidunt vestibulum. Nulla facilisi. Morbi eu eros eget augue vehicula eleifend eu id mi. Curabitur ullamcorper ipsum maximus mauris tristique, a pulvinar sem aliquam. Nulla quis fermentum mauris. Praesent nec ipsum vel justo finibus ullamcorper varius nec sem. Nullam mollis, dui at commodo porta, enim velit posuere erat, a congue ipsum nibh et odio. Aliquam quam est, cursus venenatis nibh ut, cursus dapibus libero. Integer ultricies, dui ac tempus porttitor, nibh magna faucibus metus, vitae ullamcorper ipsum ipsum sit amet nisl.
Purpose:
Separate content into columns, which become stacked and page-wide on narrow screens.
To apply:
Example:
The example below has two media query blocks, allowing the four columns at laptop width to become two at tablet width, and then one at phone width. Narrow down your browser to see the columns respond.
Purpose:
Create a responsive table in which font and padding sizes are reduced for mobile devices. Rows and columns are styled without any inline styles.
To apply:
Please note: The order of CSS selectors for table styles is important. The styles which affect the most specific rows or columns should go last.
Although this table is responsive, too many columns with too much data will of course always overflow a narrow screen. Use tables for simple data, not for page structure or large content.
Click the button below to see some CSS selectors which are useful in targeting specific table elements.
Every other row
You can insert either "odd" or "even" in the parentheses.
.myTable tr:nth-child(odd) td
Specific columns
This affects only the column number in parentheses.
.myTable td:nth-child(1)
Specific row
This affects only the row number in parentheses.
.myTable tr:nth-child(1) td
Range of columns
Replace x and y with integers which represent the first and last columns to be affected.
.myTable td:nth-child(n+x):nth-child(-n+y)
Range of rows
Replace x and y with integers which represent the first and last rows to be affected.
.myTable tr:nth-child(n+x):nth-child(-n+y) td
Every nth row
Replace x with an integer representing the nth row. For example, 4n would affect every 4th row.
.myTable tr:nth-child(Xn) td
Every nth column
Replace x with an integer representing the nth column. For example, 4n would affect every 4th column.
.myTable td:nth-child(Xn)
Specific column to last column
Replace x with an integer representing a starting column. All subsequent columns will be affected.
.myTable td:nth-last-child(-n+X)
Specific row to last row
Replace x with an integer representing a starting row. All subsequent rows will be affected.
.myTable tr:nth-last-child(-n+X) td
Example:
PLANET | DISTANCE FROM SUN | DIAMETER | REVOLUTION | ROTATION | Voyager Fly-by |
Mercury | 57.91 million km | 4,879 km | 88 days | 59 days | n/a |
Venus | 108.2 million km | 12,104 km | 224.7 days | 243 days | n/a |
Earth | 149.6 million km | 12,742 km | 365.26 days | 23.93 hours | n/a |
Mars | 227.9 million km | 6,779 km | 1.88 years | 24.6 hours | n/a |
Jupiter | 778.5 million km | 139,822 km | 11.86 years | 9.8 hours | V1 1979 V2 1979 |
Saturn | 1.433 billion km | 116,464 km | 29.7 years | 10.2 hours | V1 1980 V2 1981 |
Uranus | 2.871 billion km | 50,724 km | 84 years | 17.9 hours | V2 1986 |
Neptune | 4.495 billion km | 49,244 km | 164.8 years | 19.1 hours | V2 1989 |
Purpose:
Add links with pop-up modals over a background image. The example uses a US map but you can use any background image.
This widget uses the same CSS and JavaScript as the Modals widget, in addition to its own CSS file.
To apply:
Example:
California and New York are the only states with pop-up content for this example.
Original map image from Pixabay.
Purpose:
Create a drop menu for main navigation.
To apply:
Optional:
Example:
The first two options are regular links. The rest of the menu uses this widget's pagination option described above.
Purpose:
Create multiple drop menus within a navigation bar. The menus merge into one for narrow screens.
To apply:
Optional:
Example:
The first drop menu uses this widget's pagination to change pages. The second drop menu has regular links. The rest of the drop menus have no function.
Normally a menu bar like this would be at the top of your page, so they would not overflow your page like these do. But this is just for demonstration.
Narrow your browser to see the menu bar and drop menus stacked for narrow screens.
Purpose:
Create an icon menu, like an app menu on mobile devices, for your site's navigation.
To apply:
Please note, the JavaScript for this widget must be placed after the related content. It can be embedded in a script tag or referenced externally. But it will not work if referenced above the content.
Example:
The page selections on this site's homepage use this widget.
But this site's version has a few additional features. To keep things simple, I have created a basic version above and the advanced version in use on this site, which is also available to you with instructions.
In addition to the basic menu above, the advanced version also has these features:
You can remove these features as you see fit if you feel comfortable with JavaScript without breaking the widget. There are plenty of comments in the code to help you.
Purpose:
Filter displayed items by keywords.
To apply:
Please note, the JavaScript for this widget must be placed after the related content. It can be embedded in a script tag or referenced externally. But it will not work if referenced above the content.
There is really no CSS associated with this widget, except to set the keywordContent divs to display as "none", "block", or "inline-block".
Variations:
Example:
Purpose:
Reveal hidden content by password.
Caution: This is a very simple password check. Anyone who knows how to look at page source can find the password. It should not be used for sensitive or private information.
To apply:
Example:
Please enter the password below to reveal content.
(The password is "widgets".)
Correct password! This is hidden content.
Purpose:
Filter displayed items by a term in the URL.
To apply:
You can add words to a URL without breaking the link by placing them after either a "#" or a "?". You can then hide, display, or alter content on load based on those words. That way users will see different content based on the URL you provide.
There is no further CSS or JavaScript beyond the above for this widget.
Example:
This site uses a URL variations to trigger content change on load, so that the widgets can be accessed directly. For example, the two links below go to the same page, but the hashtag causes different content to display.
Purpose:
Have your users take a quiz which provides a score, and reveals some content if the user passes, like a link or some text.
When you click "Submit" the quiz will:
To apply:
Create a div with the class "quizContainer". All of the quiz's contents and options below must be placed within it.
To create a multiple choice (including true or false) question:
To create a "select all that apply" question:
To reveal branching answers when an answer is selected:
To apply the "Submit" button.
Optional post-submit divs.
Example:
Purpose:
Change video or audio with a click.
Please note, this only works if the media is contained on the same domain. For example, all on your domain, or all on YouTube, or all on Vimeo. That's because we are only replacing the media source reference, and due to a JavaScript security feature, we can't jump sources between domains. If you have media from different sources, just replace the entire block of code for the embedded media by using the Replace Contents widget instead.
To apply:
Example:
SELECT A VIDEO
Purpose:
Save visitor data and display different content for return visits.
To apply:
There are several ways to save data. We will look at cookies and sessionStorage objects. They differ in the following ways:
You can also use localStorage objects, which are very similar to sessionStorage objects, but they stay in memory indefinitely. I don't like adding permanent data to users' computers so we will just look at cookies and sessionStorage objects. You can get more information on both at w3schools' web storage page.
Select either cookies or sessionStorage objects below for an example of each.
A cookie is just data in a name-value pair. For example:
planet = Earth
You can create a cookie like this:
document.cookie = "planet = Earth";
Avoid special characters like /,\,&,'," and spaces. Alphanumeric characters only.
You can add a parameter which sets the cookie's expiration date. Otherwise the cookie will be deleted when the browser session ends (when the user closes the browser) by default. For our purposes the default should be enough. But if you want to know more about cookie duration please visit the W3 Schools' cookie tutorial.
It is relatively easy to check if a cookie exists, and then do something based on that alone. But it is quite complicated to retrieve the value of a cookie. If you want to retrieve data, I suggest using sessionStorage instead.
Example:
We will display a message on this page for returning visitors based on the existence of a cookie. By clicking the button below, you will create this cookie:
document.cookie = "returningVisitor = yes";
Each time this page loads, a function checks if the cookie exists. If it does, a welcome message will display instead of these instructions.
You can create the cookie automatically on page load without the button function, so that a returning user will see something different automatically. That version of the function is also in the cookies' JavaScript file, commented out.
If you created the cookie, refresh this page, and navigate back here. You will see the welcome message instead of these instructions.
A sessionStorage ojbect is data in a name-value pair. For example:
planet = Earth
You can create a sessionStorage object like this:
sessionStorage.setItem("planet", "Earth");
Avoid special characters like /,\,&,'," and white space. Alphanumeric characters only.
You can retrieve the value of a sessionStorage object and place it in a variable, or whatever else you want to do with it, like this:
var myPlanet = sessionStorage.getItem("planet");
The variable myPlanet will contain "Earth".
Example:
We will display a personalized message on this page for returning visitors which includes their first and last name. By entering your name and clicking the button below, you will save the data to sessionStorage objects.
Each time this page loads, a function will check if the sessionStorage object exists. If it does, a welcome message will display instead of these instructions.
Please enter your first name:
Please enter your last name:
If you submitted your name, refresh the page, and navigate back here. You will see your personalized message.
Purpose:
Display a calculator that can perform simple mathematical functions..
This is an admittedly useless widget because all phones and Google have a calculator. But it was a fun challenge to create. Parts of it can be useful to you. Look through the CSS or JS to see if there is anything you can apply elsewhere. For example, the click animation on the buttons.
To apply:
There are really no steps here beyond copying over the code and updating the CSS as you see fit.
Example:
Purpose:
Display a functioning analog clock.
This is an admittedly useless widget if you don't need a clock. But it was a fun challenge to create. Parts of it can be useful to you. Look through the CSS or JS to see if there is anything you can apply elsewhere.
To apply:
There are really no steps here beyond copying over the code and updating the CSS as you see fit. There are some interdependencies in the styles, so check the comments within before changing anything.
You can remove the pendulum, but adjust the large bottom margin on the clockContainer if you do so.
Example:
When I click the buttons, nothing happens.
Some of these widgets require that the script reference be placed after the elements they affect. This is noted in the instructions and in the JavaScript comments for those widgets.
The styles seem to be breaking, and everything is displaying all at once, or not at all.
Did you embed the CSS into an HTML page? If so, remove the comments. Sometimes comments in a style tag create breaks when embedded in an HTML document.
Also, try adding type="text/css" to the opening style tag, and try adding type="text/javascript" to the opening script tag.
I applied your styles but my page is not responsive. It still looks full-width on narrow screens.
Mobile devices interpret pixels differently. To make them respond to the CSS concept of a pixel, put this code in your page's head tag:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
On a narrow screen, I get a left/right scroller at the bottom. Why does my page not fit?
There can be several reasons:
I have video or audio embedded in my widget section. When the section closes I can hear them still playing. How do I make them stop when the section closes?
You're just hiding the section, not removing it, so the media is still there playing. But there is a way to make them stop with JavaScript.
Add the call to the stopMedia() function to the button that closes the section. For example, if you're stopping a video when a modal closes, then your function calls looks like this:
onclick="closeModal('modalID'), stopMedia();"
Modals have a closing button. But what about widgets whose sections close only when another has opened? For example, choosing another widget on this site's homepage. There is no closing button involved.
Then it becomes a matter of placing the function and its call in the right place. You would have to add the stopMedia() function call to every instance of an opening button for the other pages.
But that's a bit messy. Instead, place the stopMedia() function call within the widget's section opener function. That way stopMedia() is called whichever section a user opens next, even if media was never played, which is still okay.
So if I have a video on one of this site's main widget pages, and I want to make sure the video stops playing when you return to the homepage, then I would place the stopMedia() function call before the end of the openWidgetPage() function in the JavaScript for the icon menu.
What stopMedia() actually does is force the media to reload its src, which stops it and takes it back to the start. If you have a lot of videos, this reload process can slow things down a bit, but there is no better solution.
Example:
Start the video below. The button which opens this solution has the stopMedia() function call. When you click it again to close the solution, the video will stop playing.
Is there a good, free WYSIWYG that generates HTML while you edit it as if it were a Word file?
There really is not. They all generate junky code which will leave you troubleshooting for mysterious margins, spaces, characters, etc. And they're likely to wreck code throughout your page due to one wrong entry. Even the paid ones like Dreamweaver have issues.
However I would use free online editors for simple things. For example, if you're copying something out of a Word file, and you just need to create paragraphs, numbered or bulleted lists, italics and bolds, etc. I would not attempt to apply responsive images or complex styles through these editors.
For simple things this page is quite useful. You can edit content as if it were a Word file, and view your work in both graphic and code layout.
Is there a good, free code editor?
I personally like to start with a blank HTML page and build it up with direct hard coding. It's easier than it sounds because once you get it right, the rest is a lot of copy/alter. There are fewer surprises and no extraneous code that way.
Notepad++ is all you need to create simple to moderate websites, especially if you become familiar with some of its find/replace with regular expression features. (Please note, this is not regular Notepad that comes with Windows.) This also has very helpful, but not intrusive, means of alerting you when code is broken, like simple color coding for example. You can download Notepad++ here.
Notepad++ does not work on Macs, but Mac users can install Sublime Text which is very similar.
If you feel like you need something more complicated, and rather headache inducing, you can download either Netbeans or Eclipse. These are enterprise-level code editors used to create everything from simple sites to complicated apps. They create a lot of interconnectivity between files for you, like HTML-to-CSS-to-JS, so that changes to file locations or names will auto-update for the whole project. They're also very good at pointing out errors. However just starting a project is a messy process. It's also ridiculously easy to break the interconnectivity between files, and once that happens, give it up and start over! Just opening the project on another computer is enough to break the connectivity. If you're good enough to use these to code apps, you're probably too advanced for my site.
Where is the best, free site to get answers to HTML, CSS, or JavaScript questions?
The World Wide Web Consortium, which is the official caretaker of HTML and other web-related issues, maintains an excellent site for tutorials and examples of all of the above and more - W3Schools.
You can also try Code Academy. It's not bad, but I find after I complete a course that the content was slim, too specific to the project underway, and just tedious.
Of course the best thing to do with a coding question is just google it. You'll find someone else has already asked the question, and you will find several message boards where someone else has (probably condescendingly) answered it. Most google searches will probably lead you to W3Schools anyway.
(By the way, I've had employers tell me the answer they want for "What do you do if you have a coding problem?" is "just google it". They want to know you can find the answer when you need it.)
Something is wrong on my site but I can't determine where. Is there a free service that will quickly check my HTML files for errors?
Yes. W3Schools has an excellent and quick code validator. You can either link to a page or upload a file to it. Don't be alarmed if it tells you that you have 100 errors. If you start from the first and work your way down, each fix will simultaneously correct many errors below.
Is there something like the above for CSS files?
Yes. W3Schools also has jigsaw, a CSS validator, which is almost exactly like the HTML validator.
Is there something like the above for JavaScript files?
No, unfortunately. Since the logical route to effective JavaScript can vary greatly between programmers and context, there is no way for a validator to determine what the script is meant to do. However, a good code editor will point out where you have a syntax problem, although they can't do anything if there's a logic problem.
Did you create all those animations?
No, they're built into CSS. I just altered them as I needed to. You can learn all about them at W3Schools. They even have a downloadable CSS page with all animations, which I have made available here. As you can see the page is quite a compacted jumble and difficult to interpret and manipulate without going through their tutorials, but you can have them all in one go and just pull out and clean up the ones you need.
Would you recommend one web-hosting service over another?
There are many options, and many more sites debating which option is best. I have only used GoDaddy, which is probably the most popular service. Their user interface can be difficult to understand at first. But from what I gather their servers are least likely to slow your site down and can handle a lot of traffic. I would shop around and read reviews.
Is there a site to get free images?
There are a great number of them, whether you're looking for images or icons. But some require emails, or memberships, or have limits unless you pay. I find most of what I need from pixabay. That's where the fruit images came from. I made the menu icons with PowerPoint and Photoshop. I made the background image with Photoshop.
Is there a good, free image editor?
Yes, Gimp2 is quite good. It's a lot like Photoshop, although not as broad or precise. But you get a lot for a free, open-source app. If you already know Photoshop, it's just a matter of learning a new, and somewhat messy, interface. If you don't know Photoshop, there's a learning curve to both anyway. It seems to take a lot of active memory though, but that shouldn't be a problem with a decent computer.
Is there a good, free FTP app?
There are a few, and the one I've used most is filezilla. It's probably the most popular too. It's quite good, easy to use, and free. It doesn't have robust security, so I wouldn't access a server through it on public wi-fi.
What is considered good website layout?
Clean and simple, columnar layout without borders, white space and plain backgrounds. Use images sparingly. Basically look at the index page of a news magazine, and make it look like that.
So why didn't I follow the above advice? I was trying to make something that looked more like my phone's home screen. And I just liked the background.
Tabs or spaces in coding?
Fans of the hilarious HBO show Silicon Valley might remember an argument between Richard and his girlfriend over using tabs versus spaces in coding. I'm with Richard - tabs! They look much better in a code editor. However, tabs are not always consistent across devices, and as you can see if you open my code links in a browser, they make code look very messy outside a code editor. But I set these up for ease in a code editor, and not for appearance. If you would rather convert the tabs to spaces, click below.
We're going to replace each tab with two spaces. Don't replace tabs with only one space so that you can reverse it easily if necessary. This works in Notepad++, but you should be able to do something very similar in any code editor.
What's the point of this site?
I have used popular code-libraries like JQuery and Bootstrap. I found trying to change styles frustrating because there is so much code in each widget, and it's often not clear what you're changing. The JavaScript is so compressed it's difficult to disentangle for changes. I wanted to make something simple and modifiable that can take any content.
What's with the weird Latinesque text throughout?
That is ipsem lorem, traditional placeholder text when you just need some content.
What's with all the fruit?
This site is in dire need of some color, and the images were free from pixabay. And I just like fruit.
Should you be credited?
If you find any of my content useful, it would be great if you would link back to this site.
My question wasn't answered. How do I contact you?
You can contact me at alternativewidgets@gmail.com. Please allow a few days for response.
April 2022
March 2022
January 2022
February 2021
December 2020
September 2020
July 2020
June 2020
May 2020
April 2020
December 2019
October 2019
September 2019
August 2019
June 2019
May 2019
December 2018
September 2018
August 2018
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.
Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.
The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.
California is a state in the Pacific Region of the United States. With 39.5 million residents across a total area of about 163,696 square miles (423,970 km2), California is the most populous U.S. state and the third-largest by area, and is also the world's thirty-fourth most populous subnational entity.
Source: wikipedia.org/wiki/California
New York is a state located in the Northeastern United States. New York was one of the original thirteen colonies that formed the United States. With more than 19 million residents in 2019,[6] it is the fourth most populous state. To distinguish the state from New York City, which is the largest city in the state, it is sometimes referred to as New York State.
Source: wikipedia.org/wiki/New_York_(state)