Open In App

Create a Facebook Post Box Clone in HTML CSS & JavaScript

Last Updated : 23 Jul, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

We will see how can we implement a Facebook post box clone with the help of HTML, CSS, and JavaScript.

A Facebook post is a message or update shared by a user on their profile or page. It typically includes text, photos, videos, or links. Users can tag locations, and friends, express feelings, and set privacy settings. Other users can react, comment, and share the post. It serves as a way to share updates, connect with friends, and engage with a wider audience.

Prerequisites:

Preview:

Screenshot-2024-01-23-122619

CDN Links:

<script type="module" src="https://cdn.jsdelivr.net/npm/emoji-picker-element@^1/index.js"></script>

Approach

  • Create the Facebook post box structure using HTML tags, like <main> and <section> tags for the create post containers, and <emoji-picker> to demonstrate how a typical emoji picker in a Facebook post will look like with corresponding classes and IDs attached to these elements.
  • Add the different styling properties to the post using classes, pseudo-classes such as ::before and::after, and elements that will define the padding, margin, font sizes to text, alignments, colors, etc to the specific elements.
  • In JavaScript, first, create a set of variables to store the textarea, post button, emoji picker, and the button to show or hide the emoji picker on click.
  • Attach an eventListener() to the textarea which will detect on input whether the textarea is empty or not. If it is empty, the post button will be disabled by default. Otherwise, the post button will be enabled since the user is writing a post message.
  • Similarly, attach another eventListener() to the emoji picker button which will toggle the visibility of the emoji picker on click.
  • Attach an eventListener() on the emoji picker itself which will append the emoji selected to the textarea using the insertText() function, which is a part of the inserted text at the cursor module from the node package manager (npm).
  • Attach an eventListener() on the post audience button which will change the audience to which this post should be visible to with appropriate radio buttons for selecting a particular choice.

Example: This example describes the basic implementation of a Facebook post box using HTML, CSS, and Javascript.

HTML
<!DOCTYPE html> 
<html lang="en"> 

<head> 
	<meta charset="UTF-8"> 
	<meta name="viewport" content= 
"width=device-width, initial-scale=1.0"> 
	<link rel="stylesheet" href= 
"./style.css"> 
	<script type="module" src= 
"https://cdn.jsdelivr.net/npm/emoji-picker-element@^1/index.js"> 
</script> 
	<title>Facebook Post Box Clone</title> 
</head> 

<body> 
	<main class="post"> 
		<div class="wrapper"> 
			<section class="create-post"> 
				<header class="header"> 
					<h1>Create post</h1> 
					<div class="cross-icon"> 
						<div class="cross-icon-mark"></div> 
					</div> 
				</header> 
				<div class="post-header"> 
					<div class="profile-pic"></div> 
					<div class="user-info"> 
						<div class="full-name">GeeksforGeeks</div> 
						<div class="post-audience"> 
							<div class="friends-icon"></div> 
							<span class="audience-text">Friends</span> 
							<div class="drop-down"></div> 
						</div> 
					</div> 
				</div> 
				<div class="post-content"> 
					<textarea name="post-desc" id="post-desc" 
							cols="30" rows="5" 
						placeholder="What's on you mind, Geek?"></textarea> 
					<div class="emoji-picker"> 
						<emoji-picker class="light"></emoji-picker> 
						<i class="emoji" aria-label="Insert an emoji" 
						role="img"></i> 
					</div> 
					<div class="add-to-your-post"> 
						<span class="add-to-post-text">Add to your post</span> 
						<div class="add-to-post-icons"> 
							<div class="photo-video"></div> 
							<div class="tag-people"></div> 
							<div class="feeling-activity"></div> 
							<div class="check-in"></div> 
							<div class="gif"></div> 
							<div class="live-video"></div> 
						</div> 
					</div> 
					<button class="post-btn" disabled>Post</button> 
				</div> 
			</section> 
			<section class="post-audience-section"> 
				<header class="post-audience-header"> 
					<div class="arrow-left-icon"></div> 
					<h1>Post Audience</h1> 
				</header> 
				<div class="post-audience-content"> 
					<h4>Who can see your post?</h4> 
					<p class="your-post-text">Your post will show up 
						in Feed, on your profile and in search results.</p> 
					<p> Your default audience is set to Only me, 
						but you can change the<br /> audience 
						of this specific 
						post.</p> 
				</div> 
				<div class="post-audience-options"> 
					<div class="audience-option"> 
						<div class="audience-option-left"> 
							<div class="audience-option-icon earth"></div> 
							<div class="audience-option-details"> 
								<div class="audience-option-text">Public</div> 
								<span class="audience-option-desc">Anyone on 
								or off Facebook</span> 
							</div> 
						</div> 
						<div class="audience-option-right"> 
							<div class="radio-btn"> 
								<input type="radio" name="audience-option-radio" 
									class="audience-option-radio"> 
							</div> 
						</div> 
					</div> 
					<div class="audience-option"> 
						<div class="audience-option-left"> 
							<div class="audience-option-icon user-group"></div> 
							<div class="audience-option-details"> 
								<div class="audience-option-text">Friends</div> 
								<span class="audience-option-desc">Your friends 
								on Facebook</span> 
							</div> 
						</div> 
						<div class="audience-option-right"> 
							<div class="radio-btn"> 
								<input type="radio" name="audience-option-radio" 
									class="audience-option-radio"> 
							</div> 
						</div> 
					</div> 
					<div class="audience-option"> 
						<div class="audience-option-left"> 
							<div class="audience-option-icon user"></div> 
							<div class="audience-option-details"> 
								<div class="audience-option-text">Friends except...</div> 
								<span class="audience-option-desc">Don't show 
								to some friends</span> 
							</div> 
						</div> 
						<div class="audience-option-right"> 
							<div class="radio-btn"> 
								<input type="radio" name="audience-option-radio" 
									class="audience-option-radio"> 
							</div> 
						</div> 
					</div> 
					<div class="audience-option"> 
						<div class="audience-option-left"> 
							<div class="audience-option-icon specific-user"></div> 
							<div class="audience-option-details"> 
								<div class="audience-option-text"> 
								Specific friends</div> 
								<span class="audience-option-desc">Only 
								show to some friends</span> 
							</div> 
						</div> 
						<div class="audience-option-right"> 
							<div class="radio-btn"> 
								<input type="radio" 
									name="audience-option-radio" 
									class="audience-option-radio"> 
							</div> 
						</div> 
					</div> 
					<div class="audience-option"> 
						<div class="audience-option-left"> 
							<div class="audience-option-icon lock"></div> 
							<div class="audience-option-details"> 
								<div class="audience-option-text">Only me</div> 
							</div> 
						</div> 
						<div class="audience-option-right"> 
							<div class="radio-btn"> 
								<input type="radio" 
									name="audience-option-radio" 
									class="audience-option-radio"> 
							</div> 
						</div> 
					</div> 
					<div class="audience-option"> 
						<div class="audience-option-left"> 
							<div class="audience-option-icon gear"></div> 
							<div class="audience-option-details"> 
								<div class="audience-option-text">Custom</div> 
								<span class="audience-option-desc">Include 
								and exclude friends and lists</span> 
							</div> 
						</div> 
						<div class="audience-option-right"> 
							<div class="radio-btn"> 
								<input type="radio" 
									name="audience-option-radio" 
									class="audience-option-radio"> 
							</div> 
						</div> 
					</div> 
					<div class="audience-option"> 
						<div class="audience-option-left"> 
							<div class="audience-option-icon star"></div> 
							<div class="audience-option-details"> 
								<div class="audience-option-text">Close 
								friends</div> 
								<span class="audience-option-desc">Your 
								custom list</span> 
							</div> 
						</div> 
						<div class="audience-option-right"> 
							<div class="radio-btn"> 
								<input type="radio" 
									name="audience-option-radio" 
									class="audience-option-radio"> 
							</div> 
						</div> 
					</div> 
				</div> 
			</section> 
		</div> 
	</main> 
	<script src="./script.js"></script> 
</body> 

</html>
CSS JavaScript

Output:


Next Article

Similar Reads