I'm using element.send_keys("Long text") to fill textarea, but it takes very much time and the script has to fill it in fast.
I tried some different method.
Execute javascipt:
browser.execute_script('document.getElementsByClassName("inputarea")[0].value="Long text"')
but nothing happened
I can't using clipboard because my server doesn't have GUI.
Here is my HTML:
<div data-mprt="3" class="overflow-guard" style="width: 954px; height: 268px;"><div class="margin" style="position: absolute; will-change: transform; top: 0px; height: 268px; width: 68px;" role="presentation" aria-hidden="true"><div class="glyph-margin" style="left: 0px; width: 0px; height: 268px;"></div><div class="margin-view-zones" style="position: absolute;" role="presentation" aria-hidden="true"></div><div class="margin-view-overlays" style="position: absolute; width: 68px; font-family: "Droid Sans Mono", "monospace", monospace, "Droid Sans Fallback"; font-weight: normal; font-size: 14px; line-height: 20px; letter-spacing: 0px; height: 268px;" role="presentation" aria-hidden="true"><div style="position:absolute;top:0px;width:100%;height:20px;"><div class="current-line" style="width:68px; height:20px;"></div><div class="line-numbers lh-even" style="left:0px;width:42px;">1</div></div></div></div><div class="monaco-scrollable-element editor-scrollable vs-dark" role="presentation" style="position: absolute; overflow: hidden; left: 68px; width: 886px; height: 268px;" data-mprt="5"><div class="lines-content monaco-editor-background" style="position: absolute; overflow: hidden; width: 1000000px; height: 1000000px; touch-action: none; will-change: transform; top: 0px; left: 0px;"><div class="view-overlays" style="position: absolute; height: 0px; width: 886px;" role="presentation" aria-hidden="true"><div style="position:absolute;top:0px;width:100%;height:20px;"><div class="current-line" style="width:886px; height:20px;"></div></div></div><div role="presentation" aria-hidden="true" class="view-rulers"></div><div class="view-zones" style="position: absolute;" role="presentation" aria-hidden="true"></div><div class="view-lines" style="position: absolute; font-family: "Droid Sans Mono", "monospace", monospace, "Droid Sans Fallback"; font-weight: normal; font-size: 14px; line-height: 20px; letter-spacing: 0px; width: 886px; height: 268px;" role="presentation" aria-hidden="true" data-mprt="7"><div style="top:0px;height:20px;" class="view-line"><span><span> </span></span></div></div><div data-mprt="1" class="contentWidgets" style="position: absolute; top: 0px;"><div class="lightbulb-glyph" title="Show Fixes (Ctrl+.)" style="position: absolute; visibility: hidden; max-width: 886px;" widgetid="LightBulbWidget"></div></div><div role="presentation" aria-hidden="true" class="cursors-layer cursor-line-style cursor-solid"><div class="cursor " style="height: 20px; top: 0px; left: 0px; font-family: "Droid Sans Mono", "monospace", monospace, "Droid Sans Fallback"; font-weight: normal; font-size: 14px; line-height: 20px; letter-spacing: 0px; display: block; visibility: hidden; width: 2px;"></div></div></div><div role="presentation" aria-hidden="true" class="invisible scrollbar horizontal" style="position: absolute; width: 880px; height: 10px; left: 0px; bottom: 0px;"><div class="slider" style="position: absolute; top: 0px; left: 0px; height: 10px; will-change: transform; width: 880px;"></div></div><canvas class="decorationsOverviewRuler" style="position: absolute; will-change: transform; top: 0px; right: 0px; width: 6px; height: 268px;" aria-hidden="true" width="6" height="268"></canvas><div role="presentation" aria-hidden="true" class="invisible scrollbar vertical" style="position: absolute; width: 6px; height: 268px; right: 0px; top: 0px;"><div class="slider" style="position: absolute; top: 0px; left: 0px; width: 6px; will-change: transform; height: 268px;"></div></div></div><div role="presentation" aria-hidden="true" style="width: 954px;"></div><textarea data-mprt="6" class="inputarea" autocorrect="off" autocapitalize="none" autocomplete="off" spellcheck="false" aria-label="Editor content;Press Alt+F1 for Accessibility Options." role="textbox" aria-multiline="true" aria-haspopup="false" aria-autocomplete="both" style="font-size: 1px; line-height: 20px; top: 0px; left: 68px; width: 0px; height: 0px;" wrap="off"></textarea><div style="position: absolute; top: 0px; left: 0px; width: 0px; height: 0px;"></div><div data-mprt="4" class="overlayWidgets" style="width: 954px;"><div class="accessibilityHelpWidget" style="display: none; position: absolute;" role="dialog" aria-hidden="true" widgetid="editor.contrib.accessibilityHelpWidget"><div role="document"></div></div></div><div data-mprt="8" class="minimap slider-mouseover" style="position: absolute; left: 0px; width: 0px; height: 268px;" role="presentation" aria-hidden="true"><div class="minimap-shadow-hidden" style="height: 268px;"></div><canvas style="position: absolute; left: 0px; width: 1px; height: 268px;" width="1" height="268"></canvas><div style="position: absolute; will-change: transform; width: 0px;" class="minimap-slider"><div style="position: absolute; width: 0px; height: 0px;" class="minimap-slider-horizontal"></div></div></div></div>
Edited
I want the method different from the method send_keys(), because send_keys() so slow.
Try the below way:
((JavascriptExecutor) driver).executeScript("arguments[0].value = arguments[1];", driver_tmp.findElement(By.id("text_id")), text);
Maybe, it can be work to use XPATH.
textarea_field = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '/html/body/div/textarea'))).send_keys("Long text")
Please share a little bit of your code cause send_keys fills the area under 1 second in my experience
My code just works fine :
import selenium
from selenium import webdriver
from selenium.webdriver import Firefox
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
browser = webdriver.Firefox()
browser.get('YOUR_URL')
area = browser.find_element(by=By.<Your Choice>, value=<Name or Xpath or ...>)
area.send_keys('Your Text')
Related
I am currently configuring(backend) my search-bar in my Django project to search the database. I've put an 'if or else' statement for when the user just clicks the search button without putting anything in the search-box. The 'if or else' statement seems not to be working properly because it ignores the 'if' part and goes straight to the else part. I've tried different ways to fix it but I seem to be failing. How do I rectify this.
function openNav() {
document.getElementById("mynavbar").style.display = "block";
}
function closeNav() {
document.getElementById("mynavbar").style.display = "none";
}
.navbar{
position: absolute;
height: 102px;
width: 1136px;
left: 69px;
top: 39px;
border-radius: 0px;
}
.nav-menu{
display: none;
}
.closebtn{
display: none;
}
.logo img{
position: absolute;
height: 57.599998474121094px;
width: 100px;
left: 12px;
top: 31px;
border-radius: 0px;
}
.HOME{
position: absolute;
height: 38.10988998413086px;
width: 97.52754211425781px;
left: 203.26788330078125px;
top: 48.19781494140625px;
border-radius: 0px;
font-family: Poppins;
font-size: 27px;
font-style: normal;
font-weight: 700;
line-height: 41px;
letter-spacing: 0em;
text-align: left;
/* background: #FFFFFF; */
}
.ARTIST{
position: absolute;
height: 38.10988998413086px;
width: 105.85134887695312px;
left: 328.64324951171875px;
top: 48.19781494140625px;
border-radius: nullpx;
font-family: Poppins;
font-size: 27px;
font-style: normal;
font-weight: 700;
line-height: 41px;
letter-spacing: 0em;
text-align: left;
/* background: #FFFFFF; */
}
.ABOUTUS{
position: absolute;
height: 38.10988998413086px;
width: 142.14324951171875px;
left: 475.8270263671875px;
top: 48.19781494140625px;
border-radius: nullpx;
font-family: Poppins;
font-size: 27px;
font-style: normal;
font-weight: 700;
line-height: 41px;
letter-spacing: 0em;
text-align: left;
/* background: #FFFFFF; */
}
.search-bar{
position: absolute;
height: 38.109893798828125px;
width: 177.427001953125px;
left: 655.270263671875px;
top: 50.4395751953125px;
border-radius: 45px;
background: #FFFFFF42;
border: 3px solid #FFFFFF;
}
#search-area{
position: absolute;
height: 38.109893798828125px;
width: 177.427001953125px;
left: -3px;
top: -4px;
border-radius: 45px;
background: #FFFFFF42;
border: 3px solid #FFFFFF;
font-family: 'Poppins';
font-size: 19px;
font-weight: 700;
}
.search-icon{
position: absolute;
height: 30px;
width: 24.251404px;
left: 136px;
top: 0px;
border-radius: 0px;
}
.bi-search{
position: absolute;
height: 30px;
width: 24.251404px;
left: 0px;
top: 0px;
border-radius: 0px;
}
.rec{
position: absolute;
height: 45.95604705810547px;
width: 119.96490478515625px;
left: 1013.1486206054688px;
top: 42.593414306640625px;
border-radius: 10px;
background: #7e81d1;
}
.SignIn{
position: absolute;
height: 38.109893798828125px;
width: 98.553955078125px;
left: 10px;
top: 0;
border-radius: 0px;
font-family: Poppins;
font-size: 27px;
font-style: normal;
font-weight: 700;
line-height: 41px;
letter-spacing: 0em;
text-align: left;
/* background: #FFFFFF; */
}
.rec2{
position: absolute;
height: 45.95604705810547px;
width: 119.96490478515625px;
left: 862.9404907226562px;
top: 42.593414306640625px;
border-radius: 10px;
background: #7E81D1;
}
.SignUP{
position: absolute;
height: 43.71428680419922px;
width: 106.8594970703125px;
left: 10px;
top: 0;
border-radius: 0px;
font-family: Poppins;
font-size: 27px;
font-style: normal;
font-weight: 700;
line-height: 41px;
letter-spacing: 0em;
text-align: left;
/* background: #FFFFFF; */
}
<div id="mynavbar" class="navbar">
×
<div class="logo">
<img src="{% static 'TheMachine Images/The Machine 2.png' %}" alt="">
</div>
<span class="HOME">HOME</span>
<span class="ARTIST">ARTIST</span>
<span class="ABOUTUS">ABOUT US</span>
<div class="search-bar">
<form action="{% url 'results' %}" method="post" name="searched">
{% csrf_token %}
<input type="text" id="search-area" placeholder="Search Artist">
<div class="search-icon">
<a href="results"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi-search" viewBox="0 0 16 16">
<path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/>
</svg></a>
</div>
</form>
</div>
<div class="rec">
<span class="SignIn">SignIN</span>
</div>
<div class="rec2">
<span class="SignUP">SignUp</span>
</div>
</div>
views.py
def results(request):
if request.method == "POST":
searched = request.POST['searched']
return render(request, 'Results.html', {'searched': searched})
else:
return render(request, 'Results.html', {})
url.py
path('results', views.results, name='results')
this is my results
function openNav() {
document.getElementById("mynavbar").style.display = "block";
}
function closeNav() {
document.getElementById("mynavbar").style.display = "none";
}
.navbar{
position: absolute;
height: 91px;
width: 1094px;
left: 141px;
top: 38px;
border-radius: 0px;
}
.closebtn{
display: none;
}
.nav-menu{
display: none;
}
.HOME{
position: absolute;
height: 34px;
width: 93.95413208007812px;
left: 195.8201904296875px;
top: 43px;
border-radius: 0px;
font-family: Poppins;
font-size: 27px;
font-style: normal;
font-weight: 700;
line-height: 41px;
letter-spacing: 0em;
text-align: left;
}
.ARTIST{
position: absolute;
height: 34px;
width: 101.97296142578125px;
left: 316.601806640625px;
top: 43px;
border-radius: nullpx;
font-family: Poppins;
font-size: 27px;
font-style: normal;
font-weight: 700;
line-height: 41px;
letter-spacing: 0em;
text-align: left;
}
.ABOUTUS{
position: absolute;
height: 34px;
width: 136.93508911132812px;
left: 458.3927917480469px;
top: 43px;
border-radius: 0px;
font-family: Poppins;
font-size: 27px;
font-style: normal;
font-weight: 700;
line-height: 41px;
letter-spacing: 0em;
text-align: left;
}
.search-bar{
position: absolute;
height: 34px;
width: 170.92608642578125px;
left: 631.2612915039062px;
top: 45px;
border-radius: 45px;
border: 3px solid #FFFFFF;
}
.search-icon{
position: absolute;
height: 19px;
width: 24px;
left: 137px;
top: 4px;
border-radius: 0px;
}
.bi-search{
position: absolute;
height: 19px;
width: 24px;
left: 0px;
top: 0px;
border-radius: 0px;
}
.logo img{
position: absolute;
height: 57.599998474121094px;
width: 100px;
left: 12px;
top: 31px;
border-radius: 0px;
}
.rec{
position: absolute;
height: 41px;
width: 115.56927490234375px;
left: 976.0270385742188px;
top: 38px;
border-radius: 10px;
background: #6484B4;
}
.SignIn{
position: absolute;
height: 34px;
width: 94.94293212890625px;
left: 12px;
top: 0px;
border-radius: 0px;
font-family: Poppins;
font-size: 27px;
font-style: normal;
font-weight: 700;
line-height: 41px;
letter-spacing: 0em;
text-align: left;
}
.rec2{
position: absolute;
height: 41px;
width: 115.56939697265625px;
left: 831.322509765625px;
top: 38px;
border-radius: 10px;
background: #7E81D1;
}
.SignUP{
position: absolute;
height: 39px;
width: 102.9442138671875px;
left: 7px;
top: 0px;
border-radius: 0px;
font-family: Poppins;
font-size: 27px;
font-style: normal;
font-weight: 700;
line-height: 41px;
letter-spacing: 0em;
text-align: left;
}
#search-area{
position: absolute;
left: 8px;
top: -2px;
background: #ffffff00;
border: #ffffff00;
border-radius: 45px;
font-family: 'Poppins';
font-size: 19px;
font-weight: 700;
}
<div id="mynavbar" class="navbar">
×
<div class="logo">
<img src="{% static 'TheMachine Images/The Machine 2.png' %}" alt="">
</div>
<span class="HOME">HOME</span>
<span class="ARTIST">ARTIST</span>
<span class="ABOUTUS">ABOUT US</span>
<div class="search-bar">
<input type="text" id="search-area" placeholder="Search">
<div class="search-icon">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi-search" viewBox="0 0 16 16">
<path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/>
</svg>
</div>
</div>
<div class="rec">
<span class="SignIn">SignIN</span>
</div>
<div class="rec2">
<span class="SignUP">SignUp</span>
</div>
</div>
<div class="results">
{% if searched %}
<h2>You have searched for {{searched}}</h2>
{% else %}
<h2>You forget to fill out the form</h2>
{% endif %}
</div>
With the search query you are trying to get data based on your input. so instead of post, use a get request here & give your input field a name to access that in your view.
Template:
<form>
<input type="text" id="search-area" placeholder="Search Artist" name="searched">
</form>
The default method of a form is GET, so you dont have to specify method="get"
View:
def results(request):
if request.method == "GET":
searched = request.GET.get('searched')
return render(request, 'Results.html', {'searched': searched})
else:
return render(request, 'Results.html', {})
I'm trying to dynamically add a row on the press of a button. However, due to my status as new to JS, I cannot seem to figure it out. If you notice in the demo below, nothing happens when you press the green button.This is likely a simple fix, but I just do not have the knowledge to do it. If you'd prefer to use it in CodePen, here is the link as well: CodePen Demo
$(document).ready(function(){
$("#ButtonPro").click(function(){
$("#okay").append("<p class=RowPro></p> <p class=GreenStripe></p> <p class=InputPro contenteditable>Input</p>");
});
});
.Rectangle {
align-self: flex-start;
width: 1539px;
height: 1268px;
background: #f2f4f5;
}
.Rectangle2 {
align-self: flex-start;
width: 1000px;
height: 105px;
background: #ffffff;
position: absolute;
width: 1000px;
height: 105px;
left: 270px;
top: 280px;
}
.Rectangle3 {
position: absolute;
width: 95px;
height: 8px;
left: 294px;
top: 305px;
background: #1d67ac;
border-radius: 0px;
}
.Zander{
position: absolute;
width: 218px;
height: 39px;
left: 297px;
top: 331px;
align-self: flex-start;
font-family: Arial;
font-style: normal;
font-weight: bold;
font-size: 16px;
line-height: 24px;
}
.Rectangle4 {
position: absolute;
width: 499px;
height: 65px;
left: 270px;
top: 397px;
background: #ffffff;
border-radius: 0px;
}
.Pros {
position: absolute;
width: 34px;
height: 24px;
left: 294px;
top: 418px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
/* identical to box height, or 150% */
color: #41cc90;
}
.ButtonPro {
position: absolute;
width: 32px;
height: 32px;
left: 721px;
top: 430px;
background: #41cc90;
border-radius: 4px;
}
.Group {
align-self: flex-start;
width: 17px;
height: 17px;
position: absolute;
width: 17px;
height: 17px;
left: 728.5px;
top: 437px;
.Vector {
position: absolute;
width: 17px;
height: 17px;
left: 728.5px;
top: 422px;
background: #ffffff;
}
}
.Rectangle6 {
position: absolute;
width: 500px;
height: 65px;
left: 769px;
top: 397px;
background: #ffffff;
border-radius: 0px;
}
.Rectangle_1 {
position: absolute;
width: 3px;
height: 65px;
left: 766px;
top: 397px;
background: #f2f4f5;
}
.Cons {
position: absolute;
width: 38px;
height: 24px;
left: 794px;
top: 418px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
/* identical to box height, or 150% */
color: #ff725c;
}
.ButtonCon {
align-self: flex-start;
width: 32px;
height: 32px;
background: #ff725c;
border-radius: 4px;
position: absolute;
width: 32px;
height: 32px;
left: 1222px;
top: 430px;
background: #ff725c;
border-radius: 4px;
}
.Group2 {
align-self: flex-start;
width: 17px;
height: 17px;
position: absolute;
width: 17px;
height: 17px;
left: 1229px;
top: 437px;
.Vector2 {
position: absolute;
width: 17px;
height: 17px;
left: 1230px;
top: 422px;
background: #ffffff;
}
}
.RowPro {
position: absolute;
width: 496px;
height: 75px;
left: 270px;
top: 479px;
background: #ffffff;
border-radius: 0px;
}
.GreenStripe {
position: absolute;
width: 95px;
height: 8px;
left: 294px;
top: 495px;
background: #41cc90;
border-radius: 0px;
}
.InputPro {
position:absolute;
width: 48px;
height: 24px;
left: 294px;
top: 512px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
color: #2C343D;
}
.RowCon {
position: absolute;
width: 496px;
height: 75px;
left: 769px;
top: 479px;
background: #FFFFFF;
border-radius: 0px;
}
.RedStripe {
position: absolute;
width: 95px;
height: 8px;
left: 793px;
top: 495px;
background: #FF725C;
border-radius: 0px;
}
.InputCon {
position: absolute;
width: 48px;
height: 24px;
left: 793px;
top: 512px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
/* identical to box height, or 150% */
color: #2C343D;
}
<p class="Rectangle"></p>
<p class="Rectangle2"></p>
<p class="Zander" contenteditable> Pro Con:</p>
<p class="Rectangle3"></p>
<p class="Rectangle4"></p>
<p class="Pros" contenteditable>Pros</p>
<button id="ButtonPro" class="ButtonPro"></button>
<div class="Group">
<div class="Vector">
<svg width="18" height="17" viewBox="0 0 18 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.125 6.375V0H6.875V6.375H0.5V10.625H6.875V17H11.125V10.625H17.5V6.375H11.125Z" fill="white" />
</svg>
</div>
</div>
<p class="Rectangle6"></p>
<p class="Rectangle_1"></p>
<p class="Cons" contenteditable>Cons</p>
<button class="ButtonCon"></button>
<div class="Group2">
<div class="Vector2">
<svg width="18" height="17" viewBox="0 0 18 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.125 6.375V0H6.875V6.375H0.5V10.625H6.875V17H11.125V10.625H17.5V6.375H11.125Z" fill="white" />
</svg>
</div>
</div>
<p class="RowPro"></p>
<p class="GreenStripe"></p>
<p class="InputPro" id="okay" contenteditable>Input</p>
<p class="Rectangle_2"></p>
<p class="RowCon"></p>
<p class="RedStripe"></p>
<p class="InputCon">Input</p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
Your code works (I think as intended), the problem is that it is not easy to press the button, because you have a div element on top. You just need to set pointer-events to none in that element. I have added css code for the Group class. Incidentally, you may want to set the other button to the same class (meaning change Group2 to Group:
$(document).ready(function(){
$("#ButtonPro").click(function(){
$("#okay").append("<p class=RowPro></p> <p class=GreenStripe></p> <p class=InputPro contenteditable>Input</p>");
});
});
.Rectangle {
align-self: flex-start;
width: 1539px;
height: 1268px;
background: #f2f4f5;
}
.Rectangle2 {
align-self: flex-start;
width: 1000px;
height: 105px;
background: #ffffff;
position: absolute;
width: 1000px;
height: 105px;
left: 270px;
top: 280px;
}
.Group{
pointer-events: none;
}
.Rectangle3 {
position: absolute;
width: 95px;
height: 8px;
left: 294px;
top: 305px;
background: #1d67ac;
border-radius: 0px;
}
.Zander{
position: absolute;
width: 218px;
height: 39px;
left: 297px;
top: 331px;
align-self: flex-start;
font-family: Arial;
font-style: normal;
font-weight: bold;
font-size: 16px;
line-height: 24px;
}
.Rectangle4 {
position: absolute;
width: 499px;
height: 65px;
left: 270px;
top: 397px;
background: #ffffff;
border-radius: 0px;
}
.Pros {
position: absolute;
width: 34px;
height: 24px;
left: 294px;
top: 418px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
/* identical to box height, or 150% */
color: #41cc90;
}
.ButtonPro {
position: absolute;
width: 32px;
height: 32px;
left: 721px;
top: 430px;
background: #41cc90;
border-radius: 4px;
}
.Group {
align-self: flex-start;
width: 17px;
height: 17px;
position: absolute;
width: 17px;
height: 17px;
left: 728.5px;
top: 437px;
.Vector {
position: absolute;
width: 17px;
height: 17px;
left: 728.5px;
top: 422px;
background: #ffffff;
}
}
.Rectangle6 {
position: absolute;
width: 500px;
height: 65px;
left: 769px;
top: 397px;
background: #ffffff;
border-radius: 0px;
}
.Rectangle_1 {
position: absolute;
width: 3px;
height: 65px;
left: 766px;
top: 397px;
background: #f2f4f5;
}
.Cons {
position: absolute;
width: 38px;
height: 24px;
left: 794px;
top: 418px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
/* identical to box height, or 150% */
color: #ff725c;
}
.ButtonCon {
align-self: flex-start;
width: 32px;
height: 32px;
background: #ff725c;
border-radius: 4px;
position: absolute;
width: 32px;
height: 32px;
left: 1222px;
top: 430px;
background: #ff725c;
border-radius: 4px;
}
.Group2 {
align-self: flex-start;
width: 17px;
height: 17px;
position: absolute;
width: 17px;
height: 17px;
left: 1229px;
top: 437px;
.Vector2 {
position: absolute;
width: 17px;
height: 17px;
left: 1230px;
top: 422px;
background: #ffffff;
}
}
.RowPro {
position: absolute;
width: 496px;
height: 75px;
left: 270px;
top: 479px;
background: #ffffff;
border-radius: 0px;
}
.GreenStripe {
position: absolute;
width: 95px;
height: 8px;
left: 294px;
top: 495px;
background: #41cc90;
border-radius: 0px;
}
.InputPro {
position:absolute;
width: 48px;
height: 24px;
left: 294px;
top: 512px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
color: #2C343D;
}
.RowCon {
position: absolute;
width: 496px;
height: 75px;
left: 769px;
top: 479px;
background: #FFFFFF;
border-radius: 0px;
}
.RedStripe {
position: absolute;
width: 95px;
height: 8px;
left: 793px;
top: 495px;
background: #FF725C;
border-radius: 0px;
}
.InputCon {
position: absolute;
width: 48px;
height: 24px;
left: 793px;
top: 512px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
/* identical to box height, or 150% */
color: #2C343D;
}
<p class="Rectangle"></p>
<p class="Rectangle2"></p>
<p class="Zander" contenteditable> Pro Con:</p>
<p class="Rectangle3"></p>
<p class="Rectangle4"></p>
<p class="Pros" contenteditable>Pros</p>
<button id="ButtonPro" class="ButtonPro"></button>
<div class="Group">
<div class="Vector">
<svg width="18" height="17" viewBox="0 0 18 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.125 6.375V0H6.875V6.375H0.5V10.625H6.875V17H11.125V10.625H17.5V6.375H11.125Z" fill="white" />
</svg>
</div>
</div>
<p class="Rectangle6"></p>
<p class="Rectangle_1"></p>
<p class="Cons" contenteditable>Cons</p>
<button class="ButtonCon"></button>
<div class="Group2">
<div class="Vector2">
<svg width="18" height="17" viewBox="0 0 18 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.125 6.375V0H6.875V6.375H0.5V10.625H6.875V17H11.125V10.625H17.5V6.375H11.125Z" fill="white" />
</svg>
</div>
</div>
<p class="RowPro"></p>
<p class="GreenStripe"></p>
<p class="InputPro" id="okay" contenteditable>Input</p>
<p class="Rectangle_2"></p>
<p class="RowCon"></p>
<p class="RedStripe"></p>
<p class="InputCon">Input</p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
EDIT after comment:
If you do not need absolute positioning, the jQuery code is kept simple. In that setting, each card is relatively positioned in an absolutely positioned div (#okay). Notice that now .GreenStripe and .InputPro are inside .RowPro. I have kept the approximate layout, but you would need to tweak top and left for .GreenStripe and InputPro:
$(document).ready(function(){
$("#ButtonPro").click(function(){
$("#okay").append("<div class='RowPro'><div class='GreenStripe'></div><div class='InputPro' contenteditable>Input</div></div>");
});
});
.Rectangle {
align-self: flex-start;
width: 1539px;
height: 1268px;
background: #f2f4f5;
}
.Rectangle2 {
align-self: flex-start;
width: 1000px;
height: 105px;
background: #ffffff;
position: absolute;
width: 1000px;
height: 105px;
left: 270px;
top: 280px;
}
.Group{
pointer-events: none;
}
.Rectangle3 {
position: absolute;
width: 95px;
height: 8px;
left: 294px;
top: 305px;
background: #1d67ac;
border-radius: 0px;
}
.Zander{
position: absolute;
width: 218px;
height: 39px;
left: 297px;
top: 331px;
align-self: flex-start;
font-family: Arial;
font-style: normal;
font-weight: bold;
font-size: 16px;
line-height: 24px;
}
.Rectangle4 {
position: absolute;
width: 499px;
height: 65px;
left: 270px;
top: 397px;
background: #ffffff;
border-radius: 0px;
}
.Pros {
position: absolute;
width: 34px;
height: 24px;
left: 294px;
top: 418px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
/* identical to box height, or 150% */
color: #41cc90;
}
.ButtonPro {
position: absolute;
width: 32px;
height: 32px;
left: 721px;
top: 430px;
background: #41cc90;
border-radius: 4px;
}
.Group {
align-self: flex-start;
width: 17px;
height: 17px;
position: absolute;
width: 17px;
height: 17px;
left: 728.5px;
top: 437px;
.Vector {
position: absolute;
width: 17px;
height: 17px;
left: 728.5px;
top: 422px;
background: #ffffff;
}
}
.Rectangle6 {
position: absolute;
width: 500px;
height: 65px;
left: 769px;
top: 397px;
background: #ffffff;
border-radius: 0px;
}
.Rectangle_1 {
position: absolute;
width: 3px;
height: 65px;
left: 766px;
top: 397px;
background: #f2f4f5;
}
.Cons {
position: absolute;
width: 38px;
height: 24px;
left: 794px;
top: 418px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
/* identical to box height, or 150% */
color: #ff725c;
}
.ButtonCon {
align-self: flex-start;
width: 32px;
height: 32px;
background: #ff725c;
border-radius: 4px;
position: absolute;
width: 32px;
height: 32px;
left: 1222px;
top: 430px;
background: #ff725c;
border-radius: 4px;
}
.Group2 {
align-self: flex-start;
width: 17px;
height: 17px;
position: absolute;
width: 17px;
height: 17px;
left: 1229px;
top: 437px;
.Vector2 {
position: absolute;
width: 17px;
height: 17px;
left: 1230px;
top: 422px;
background: #ffffff;
}
}
.RowPro {
width: 496px;
height: 75px;
margin-top: 16px;
background: #ffffff;
border-radius: 0px;
}
.GreenStripe {
position: relative;
width: 95px;
height: 8px;
top: 16px;
left: 16px;
background: #41cc90;
border-radius: 0px;
}
.InputPro {
width: 500px;
height: 24px;
position: relative;
left: 16px;
top: 33px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
color: #2C343D;
}
.RowCon {
position: absolute;
width: 496px;
height: 75px;
left: 769px;
top: 479px;
background: #FFFFFF;
border-radius: 0px;
}
.RedStripe {
position: absolute;
width: 95px;
height: 8px;
left: 793px;
top: 495px;
background: #FF725C;
border-radius: 0px;
}
.InputCon {
position: absolute;
width: 500px;
height: 24px;
left: 793px;
top: 512px;
font-family: Roboto;
font-style: normal;
font-weight: normal;
font-size: 16px;
line-height: 24px;
/* identical to box height, or 150% */
color: #2C343D;
}
#okay{
position: absolute;
width: 496px;
height: 123px;
left: 270px;
top: 479px;
}
<p class="Rectangle"></p>
<p class="Rectangle2"></p>
<p class="Zander" contenteditable> Pro Con:</p>
<p class="Rectangle3"></p>
<p class="Rectangle4"></p>
<p class="Pros" contenteditable>Pros</p>
<button id="ButtonPro" class="ButtonPro"></button>
<div class="Group">
<div class="Vector">
<svg width="18" height="17" viewBox="0 0 18 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.125 6.375V0H6.875V6.375H0.5V10.625H6.875V17H11.125V10.625H17.5V6.375H11.125Z" fill="white" />
</svg>
</div>
</div>
<p class="Rectangle6"></p>
<p class="Rectangle_1"></p>
<p class="Cons" contenteditable>Cons</p>
<button class="ButtonCon"></button>
<div class="Group2">
<div class="Vector2">
<svg width="18" height="17" viewBox="0 0 18 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.125 6.375V0H6.875V6.375H0.5V10.625H6.875V17H11.125V10.625H17.5V6.375H11.125Z" fill="white" />
</svg>
</div>
</div>
<div id="okay">
<div class="RowPro"><div class="GreenStripe"></div><div class="InputPro" contenteditable>Input</div></div>
</div>
<p class="Rectangle_2"></p>
<p class="RowCon"></p>
<p class="RedStripe"></p>
<p class="InputCon">Input</p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
Here's some guidance: try y = mx + b. That should give you a foundation to work off of.
Bear with me on this... little hard to explain. So what I'm attempting to do is have a block of text remove the background of a div directly behind it. The image linked below was done is Illustrator and now I'm trying to find a solution within HTML & CSS.
Illustrator screenshot of what I'm trying to accomplish
.grid-item {
position: relative;
width: 300px;
height: 200px;
padding: 5px;
}
.grid-container {
position: relative;
width: 100%;
height: 100%;
background-color: #eee;
}
.grid-container img {
position: absolute;
}
.grid-item-overlay {
position: absolute;
top: 5px;
left: 5px;
bottom: 5px;
right: 5px;
background-color: rgba(0,0,0,0.5);
}
span {
position: absolute;
top: 50%;
left: 50%;
width: 100%;
transform: translate(-50%, -50%);
font-weight: 700;
font-family: sans-serif;
font-size: 40px;
text-align: center;
color: #fff;
}
<div class="grid-item">
<div class="grid-container">
<img src="https://unsplash.it/300/200/?random">
<div class="grid-item-overlay">
<span>Text Here</span>
</div>
</div>
</div>
The objective is to have the span text create a transparent mask of the grid-item-overlay background.
I'm open to any suggestions! :)
You could try working with mix-blend-mode,
mix-blend-mode : The mix-blend-mode CSS property describes how an
element's content should blend with the content of the element's
direct parent and the element's background.
.grid-item {
position: relative;
width: 300px;
height: 200px;
padding: 5px;
}
.grid-container {
position: relative;
width: 100%;
height: 100%;
background-color: #eee;
}
.grid-container img {
position: absolute;
}
.grid-item-overlay {
position: absolute;
top: 5px;
left: 5px;
bottom: 5px;
right: 5px;
background-color: rgba(0,0,0,0.5);
}
span {
position: absolute;
top: 50%;
left: 50%;
width: 100%;
transform: translate(-50%, -50%);
font-weight: 700;
font-family: sans-serif;
font-size: 40px;
text-align: center;
color:rgba(255,255,255,1);
mix-blend-mode: overlay;
}
<div class="grid-item">
<div class="grid-container">
<img src="https://unsplash.it/300/200/?random">
<div class="grid-item-overlay">
<span>Text Here</span>
</div>
</div>
</div>
<div class="grid-item">
<div class="grid-container">
<img src="https://unsplash.it/300/200/?random">
<div class="grid-item-overlay">
<span class="text">Text Here</span>
</div>
</div>
</div>
Add this css to your css File
.text{
color: rgba(255, 255, 255, 0.1);
}
.grid-item-overlay:before{
position: absolute;
content:" ";
top:0;
left:0;
width:100%;
height:100%;
display: block;
z-index:0;
background-color:rgba(255,0,0,0.5);
}
JSFiddle: https://jsfiddle.net/d34pksmn/1/
HTML:
<div style="overflow: hidden; width: 100%; position: relative; height: 165px; background: #00AC00;">
<div class="dvSli" style="width: 100%; height: 100%; overflow: hidden; position: absolute; z-index: 4;">
</div>
<div style="overflow: visible; position: absolute; left: 2%; top: 75px; z-index: 10; padding: 10px;">
<span id="arrow-left"></span>
</div>
<div style="overflow: visible; position: absolute; right: 0; top: 75px; z-index: 10;">
<span id="arrow-right"></span>
</div>
<div style="overflow: hidden; height: 40px; width: 100%; text-align: center;">
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
<!-- Generate a letter for each occurance in `dCon` class DIV -->
</div>
<div class="dCon" style="overflow: auto; width: 6000000%; height: 125px;">
<div style="display: inline-block; width: 115px; height: 125px; background: #FF0000; position: relative; z-index: 3;">
ONE
</div>
<div style="display: inline-block; width: 115px; height: 125px; background: #FF0000; position: relative; z-index: 3;">
TWO
</div>
<div style="display: inline-block; width: 115px; height: 125px; background: #FF0000; position: relative; z-index: 3;">
THREE
</div>
<div style="display: inline-block; width: 115px; height: 125px; background: #FF0000; position: relative; z-index: 3;">
FOUR
</div>
<div style="display: inline-block; width: 115px; height: 125px; background: #FF0000; position: relative; z-index: 3;">
FIVE
</div>
<div style="display: inline-block; width: 115px; height: 125px; background: #FF0000; position: relative; z-index: 3;">
SIX
</div>
<div style="display: inline-block; width: 115px; height: 125px; background: #FF0000; position: relative; z-index: 3;">
SEVEN
</div>
<div style="display: inline-block; width: 115px; height: 125px; background: #FF0000; position: relative; z-index: 3;">
EIGHT
</div>
<div style="display: inline-block; width: 115px; height: 125px; background: #FF0000; position: relative; z-index: 3;">
NINE
</div>
<div style="display: inline-block; width: 115px; height: 125px; background: #FF0000; position: relative; z-index: 3;">
TEN
</div>
</div>
</div>
How can I modify my HTML/CSS/JQuery so:
Clicking on left/right arrow will slide each DIV inside the dCon
class parent div, left if left is clicked and right if right is
clicked.
I wanted to achieve the image carousel without the use of any plugins.
I'm not 100% certain what you're asking for in part 2, can you be a bit more specific?
For the first part, here's an easy solution:
$(function() {
$("#arrow-left").click(function() {
$(".dCon div:first-child").appendTo(".dCon");
$(".dCon").remove(".dCon div:first-child");
});
$("#arrow-right").click(function() {
$(".dCon div:last-child").prependTo(".dCon");
$(".dCon").remove(".dCon div:last-child");
});
});
and the updated fiddle: https://jsfiddle.net/JSnoobDC16/d34pksmn/6/
I am faking an image map by using CSS Image Map Generator. When the user hovers over the outer image, I want the entire image to darken a little and have a border appear around the hot spots. When they hover over a hotspot, I want that hotspot to be undarkened. Is this even possible?
This image shows a box containing an image of a product interface - removed for security purposes - inside it (via CSS background-image). The user is not hovering over it right now. No visible hotspots, no image overlay.
This image shows a user hovering over a portion of the "outer" image. The image has a transparent overlay (black, 45% opacity) applied and the image map hotspots become visible.
This image shows a user hovering over a hotspot.
When they hover over the hotspot, I'd like the hotspot area of the parent hover overlay to be removed. Is that possible? I'll accept any demonstrable solution. Javascript/jQuery is fine.
HTML:
<div class="map_image">
<div class="overlay">
<a class="map_link" id="map_link_0" href="dp"></a>
<a class="map_link" id="map_link_1" href="a"></a>
<a class="map_link" id="map_link_2" href="s"></a>
<a class="map_link" id="map_link_3" href="ab"></a>
<a class="map_link" id="map_link_4" href="ch"></a>
<a class="map_link" id="map_link_5" href="ai"></a>
<a class="map_link" id="map_link_6" href="al"></a>
<a class="map_link" id="map_link_7" href="as"></a>
<a class="map_link" id="map_link_8" href="o"></a>
<a class="map_link" id="map_link_9" href="pc"></a>
<a class="map_link" id="map_link_10" href="wi"></a>
<a class="map_link" id="map_link_11" href="c"></a>
<a class="map_link" id="map_link_12" href="pq"></a>
</div>
</div>
CSS:
.map_image { display: block; width: 200px; height: 596px; position: relative; border: 1px solid gray; }
.map_image .map_link { display: block; position: absolute; text-indent: -999em; overflow: hidden; border: 2px solid orange; }
.map_image #map_link_0 { top: 106px; left: 20px; }
.map_image #map_link_1 { top: 106px; left: 79px; }
.map_image #map_link_2 { top: 106px; left: 138px; }
.map_image #map_link_3 { top: 160px; left: 20px; }
.map_image #map_link_4 { top: 160px; left: 79px; }
.map_image #map_link_5 { top: 160px; left: 138px; }
.map_image #map_link_6 { width: 30px; height: 27px; top: 0px; right: 0px; }
.map_image #map_link_7 { width: 196px; height: 27px; top: 33px; left: 0px; }
.map_image #map_link_8 { bottom: 2px; left: 6px; }
.map_image #map_link_9 { bottom: 2px; left: 43px; }
.map_image #map_link_10 { bottom: 2px; left: 80px; }
.map_image #map_link_11 { bottom: 2px; left: 117px; }
.map_image #map_link_12 { bottom: 2px; left: 155px; }
#map_link_8, #map_link_9, #map_link_10, #map_link_11, #map_link_12 { height: 30px; width: 30px;}
#map_link_0, #map_link_1, #map_link_2, #map_link_3, #map_link_4, #map_link_5 { width: 37px; height: 37px; border-radius: 5px; }
.overlay { background:rgba(0,0,0,.45); width: 200px; height: 596px; opacity:0; -webkit-transition: opacity .25s ease; -moz-transition: opacity .25s ease;}
.map_image:hover .overlay { opacity:1; }
CBroe's comment is what did the trick. On hover of the link elements, set the background to be the original image, positioned adequately to show the original location behind the link area (accounting for border sizes).
Here's a JSFiddle with the result (apparently posting Codepen is a nono).
.map_image {
display: block;
width: 200px;
height: 596px;
position: relative;
background: url('https://media.licdn.com/mpr/mpr/p/6/005/086/004/186c3f8.jpg') top left no-repeat;
border: 1px solid gray;
}
.map_image .map_link {
display: block;
position: absolute;
text-indent: -999em;
overflow: hidden;
border: 2px solid orange;
}
.map_image #map_link_0 {
top: 106px;
left: 20px;
}
.map_image #map_link_1 {
top: 106px;
left: 79px;
}
.map_image #map_link_2 {
top: 106px;
left: 138px;
}
.map_image #map_link_3 {
top: 160px;
left: 20px;
}
.map_image #map_link_4 {
top: 160px;
left: 79px;
}
.map_image #map_link_5 {
top: 160px;
left: 138px;
}
.map_image #map_link_6 {
width: 30px;
height: 27px;
top: 0px;
right: 0px;
}
.map_image #map_link_7 {
width: 196px;
height: 27px;
top: 33px;
left: 0px;
}
.map_image #map_link_8 {
bottom: 2px;
left: 6px;
}
.map_image #map_link_9 {
bottom: 2px;
left: 43px;
}
.map_image #map_link_10 {
bottom: 2px;
left: 80px;
}
.map_image #map_link_11 {
bottom: 2px;
left: 117px;
}
.map_image #map_link_12 {
bottom: 2px;
left: 155px;
}
#map_link_8, #map_link_9, #map_link_10, #map_link_11, #map_link_12 {
height: 30px;
width: 30px;
}
#map_link_0, #map_link_1, #map_link_2, #map_link_3, #map_link_4, #map_link_5 {
width: 37px;
height: 37px;
border-radius: 5px;
}
.overlay {
background:rgba(0, 0, 0, .45);
width: 200px;
height: 596px;
opacity:0;
-webkit-transition: opacity .25s ease;
-moz-transition: all .25s ease;
}
.map_image:hover .overlay {
opacity:1;
}
#map_link_0:hover {
background: url('https://media.licdn.com/mpr/mpr/p/6/005/086/004/186c3f8.jpg') -22px -108px, top left no-repeat;
}
#map_link_1:hover {
background: url('https://media.licdn.com/mpr/mpr/p/6/005/086/004/186c3f8.jpg') -81px -108px, top left no-repeat;
}
#map_link_2:hover {
background: url('https://media.licdn.com/mpr/mpr/p/6/005/086/004/186c3f8.jpg') -140px -108px, top left no-repeat;
}
#map_link_3:hover {
background: url('https://media.licdn.com/mpr/mpr/p/6/005/086/004/186c3f8.jpg') -22px -162px, top left no-repeat;
}
#map_link_4:hover {
background: url('https://media.licdn.com/mpr/mpr/p/6/005/086/004/186c3f8.jpg') -81px -162px, top left no-repeat;
}
#map_link_5:hover {
background: url('https://media.licdn.com/mpr/mpr/p/6/005/086/004/186c3f8.jpg') -140px -162px, top left no-repeat;
}
<h1>Interface</h1>
<p>Hover over the image below for cool stuff.</p>
<div class="map_image">
<div class="overlay">
<a class="map_link" id="map_link_0" href="pd"></a>
<a class="map_link" id="map_link_1" href="a"></a>
<a class="map_link" id="map_link_2" href="s"></a>
<a class="map_link" id="map_link_3" href="ab"></a>
<a class="map_link" id="map_link_4" href="ch"></a>
<a class="map_link" id="map_link_5" href="ai"></a>
<a class="map_link" id="map_link_6" href="al"></a>
<a class="map_link" id="map_link_7" href="as"></a>
<a class="map_link" id="map_link_8" href="o"></a>
<a class="map_link" id="map_link_9" href="pc"></a>
<a class="map_link" id="map_link_10" href="wi"></a>
<a class="map_link" id="map_link_11" href="c"></a>
<a class="map_link" id="map_link_12" href="pq"></a>
</div>
</div>
So if I understand your question you want the orange border removed when the user hovers over the specific element? If so you can do that by updating your CSS like this:
.map_image .map_link:hover {
border: 2px solid transparent;
}
Once the hover is initiated the border will still be 2px and invisible.
Try
$(".overlay .map_link")
.on({
mouseover: function(e) {
$(this).css("background-color", "#fff")
}
, mouseleave:function(e) {
$(this).css("background","transparent")
}
})
jsfiddle http://jsfiddle.net/05q8zLsr/3/
$(".overlay .map_link")
.on({
mouseover: function(e) {
$(this).css("background-color", "#fff")
}
, mouseleave:function(e) {
$(this).css("background","transparent")
}
})
.map_image { display: block; width: 200px; height: 596px; position: relative; border: 1px solid gray; }
.map_image .map_link { display: block; position: absolute; text-indent: -999em; overflow: hidden; border: 2px solid orange; }
.map_image #map_link_0 { top: 106px; left: 20px; }
.map_image #map_link_1 { top: 106px; left: 79px; }
.map_image #map_link_2 { top: 106px; left: 138px; }
.map_image #map_link_3 { top: 160px; left: 20px; }
.map_image #map_link_4 { top: 160px; left: 79px; }
.map_image #map_link_5 { top: 160px; left: 138px; }
.map_image #map_link_6 { width: 30px; height: 27px; top: 0px; right: 0px; }
.map_image #map_link_7 { width: 196px; height: 27px; top: 33px; left: 0px; }
.map_image #map_link_8 { bottom: 2px; left: 6px; }
.map_image #map_link_9 { bottom: 2px; left: 43px; }
.map_image #map_link_10 { bottom: 2px; left: 80px; }
.map_image #map_link_11 { bottom: 2px; left: 117px; }
.map_image #map_link_12 { bottom: 2px; left: 155px; }
#map_link_8, #map_link_9, #map_link_10, #map_link_11, #map_link_12 { height: 30px; width: 30px;}
#map_link_0, #map_link_1, #map_link_2, #map_link_3, #map_link_4, #map_link_5 { width: 37px; height: 37px; border-radius: 5px; }
.overlay { background:rgba(0,0,0,.45); width: 200px; height: 596px; opacity:0; -webkit-transition: opacity .25s ease; -moz-transition: opacity .25s ease;}
.map_image:hover .overlay { opacity:1; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<h1>Interface</h1>
<p>Hover over the image below for stuff.</p>
<div class="map_image">
<div class="overlay">
<a class="map_link" id="map_link_0" href="dp"></a>
<a class="map_link" id="map_link_1" href="a"></a>
<a class="map_link" id="map_link_2" href="s"></a>
<a class="map_link" id="map_link_3" href="ab"></a>
<a class="map_link" id="map_link_4" href="ch"></a>
<a class="map_link" id="map_link_5" href="ai"></a>
<a class="map_link" id="map_link_6" href="al"></a>
<a class="map_link" id="map_link_7" href="as"></a>
<a class="map_link" id="map_link_8" href="o"></a>
<a class="map_link" id="map_link_9" href="pc"></a>
<a class="map_link" id="map_link_10" href="wi"></a>
<a class="map_link" id="map_link_11" href="c"></a>
<a class="map_link" id="map_link_12" href="pq"></a>
</div>
</div>